Telerik UI For WinForms--关于RadGridView的列排序
在使用RadGridView绑定数据后,我希望属性的显示顺序按继承层次显示,但实际是相反的。下面示例两个类:
public class A
{
public string Astr { get; set; }
public int Aint { get; set; }
}
public class B : A
{
public string Bstr { get; set; }
public int Bint { get; set; }
}
实例化一个B类的集合,然后绑定到RadGridView控件:
List<B> list = new List<B>();
list.Add(new B() { Astr = "astr", Aint = , Bstr = "bstr", Bint = });
radGridView1.DataSource = list;
显示效果:

很明显,先显示子类的属性,再显示基类的属性。而通过反射获取类型B的属性也是这个顺序。查了资料,没有找到很舒服的解决方法,如果你有,恳请赐教。下面是我的解决思路:
考虑从基类型Object开始到B类型,获取继承层次中每个类型的属性,用到反射和递归,代码如下:
public static List<string> GetPropertyNames(Type type)
{
var list = new List<string>();
if (type != null && type.IsClass)
{
Type basetype = type.BaseType;
if (basetype != null)
{
list = GetPropertyNames(basetype);
}
PropertyInfo[] propertyInfos = type.GetProperties();
List<string> curTypeList = propertyInfos.Select(propertyInfo => propertyInfo.Name).ToList();
list.AddRange(curTypeList.Except(list));
}
return list; }
获取了属性的顺序列表,接下来就要对RadGridView控件的列进行排序,代码如下:
List<B> list = new List<B>();
list.Add(new B() { Astr = "astr", Aint = , Bstr = "bstr", Bint = });
radGridView1.DataSource = list; Type typeB = typeof(B);
List<string> attList = GetPropertyNames(typeB);
var sortedIndex = SortColumn(radGridView1.Columns, attList); foreach (var i in sortedIndex)
{
int index = GetColumnIndex(radGridView1.Columns, i.Key);
if (index != i.Value)
radGridView1.Columns.Move(index, i.Value);
}
用到的辅助方法:
public static SortedList<string, int> SortColumn(GridViewColumnCollection columnCollection, List<string> list)
{
var sortedList = new SortedList<string, int>();
int i = ;
foreach (var item in list)
{
int columnIndex = GetColumnIndex(columnCollection, item);
if (columnIndex != -)
{
sortedList.Add(item, i);
i++;
}
}
return sortedList;
}
public static int GetColumnIndex(GridViewColumnCollection columnCollection, string name)
{
int count = columnCollection.Count;
for (int i = ; i < count; i++)
{
if (columnCollection[i].Name == name)
return i;
}
return -;
}
在DataGridView中,可以通过DataGridViewColumn的DisplayIndex属性设置列的显示顺序,而Index是不变的。在RadGridView中,则要通过Move方法将列从原位置移到新位置。
我总觉得有更好的解决方法,如果你有,望赐教。
Telerik UI For WinForms--关于RadGridView的列排序的更多相关文章
- UI控件Telerik UI for WinForms发布R1 2019|附下载
Telerik UI for WinForms拥有适用Windows Forms的110多个令人惊叹的UI控件.所有的UI for WinForms控件都具有完整的主题支持,可以轻松地帮助开发人员在桌 ...
- 用户界面控件Telerik UI for WinForms发布R2 2019|附下载
Telerik UI for WinForms拥有适用Windows Forms的110多个令人惊叹的UI控件.所有的UI for WinForms控件都具有完整的主题支持,可以轻松地帮助开发人员在桌 ...
- Telerik UI for ASP.NET AJAX控件汉化方法
Telerik UI for ASP.NET AJAX控件功能十分强大,但原版是英文界面的,不方便一些用户使用. 和.NET的其他控件一样,可以通过资源文件来制作多语言版本. 下面看看安装完成后原始的 ...
- UWP中使用Telerik UI For UWP
国际惯例先上一张图吧: 首先去下载Telerik UI For UWP的SDK,安装好之后在项目中添加SDK的引用 建议使用引用SDK,如果引用dll的话需要引用的dll较多不太方便 引用好之后以一个 ...
- JSP组件Telerik UI for JSP发布R1 2019 SP1|附下载
Telerik UI for JSP拥有由Kendo UI for jQuery支持的40+ JSP组件,同时通过Kendo UI for jQuery的支持能使用JSP封装包构建现代的HTML5和J ...
- 本文演示如何配置ASP.NET Core项目以在Visual Studio(VS)2017中使用Telerik UI for ASP.NET Core。
学习时使用的是VS2017+Core2.1了,不再讨论VS2015和core1.1的东西. 配置ASP.NET Core Web应用程序以使用Telerik UI for ASP.NET Core: ...
- Telerik UI for ASP.NET Core概要
介绍:不介绍了,刚开始研究. 下载:CSDN或者51cto上都有最新的开发版 安装:默认的安装目录是C:\Program Files (x86)\Progress\Telerik UI for ASP ...
- UI控件Telerik UI for ASP.NET MVC全新发布R2 2019 SP1
Telerik UI for ASP.NET MVC拥有使用JavaScript和HTML5构建网站和移动应用所需的70+UI部件,来满足开发者的各种需求,提供无语伦比的开发性能和用户体验.它主要是针 ...
- WPF界面控件Telerik UI for WPF发布R2 2019 SP1|实现新的属性
Telerik UI for WPF拥有超过100个控件来创建美观.高性能的桌面应用程序,同时还能快速构建企业级办公WPF应用程序.UI for WPF支持MVVM.触摸等,创建的应用程序可靠且结构良 ...
随机推荐
- Ubuntu 下配置Ganglia监控
Ganglia是比较知名的开源监控系统, 运维上需要关注的一些通用的状态都有所涉及.其组成主要是gmond(监控程序),gmetad(信息收集程序),web(监控数据展现app).ubuntu的apt ...
- table下属标签与标签中间不能加其他任何标签
今天设计网页,很想在table下面的caption下面加hr标签,不能正常解析,后来发现hr标签可以显示,但是用浏览器查看解析,发现hr在table上面进行了解析,不会再caption下面显示, 又连 ...
- Java中反射的理解
反射 一.什么是反射 Java 反射是Java语言的一个很重要的特征,它使得Java具体了"动态性". 反射用在 Java 身上指的是我们可以于运行时加载.探知.使用编译期间完全未 ...
- Andrew Ng机器学习公开课笔记 -- 支持向量机
网易公开课,第6,7,8课 notes,http://cs229.stanford.edu/notes/cs229-notes3.pdf SVM-支持向量机算法概述, 这篇讲的挺好,可以参考 先继 ...
- PsySH:PHP交互运行环境
是什么 我们经常会在命令行用到诸如mysql.python等命令,特点是一旦输入后,会进入命令本身的交互运行环境.示例: [root@iZ25vs3mckhZ ~]# python Python 2. ...
- JS中的宽高(基础知识很重要)
IE中:document.body.clientWidth ==> BODY对象宽度document.body.clientHeight ==> BODY对象高度document.docu ...
- MySQL内核:InnoDB存储引擎 卷1
MySQL内核:InnoDB存储引擎卷1(MySQL领域Oracle ACE专家力作,众多MySQL Oracle ACE力捧,深入MySQL数据库内核源码分析,InnoDB内核开发与优化必备宝典) ...
- asp.net 站点重启
有时一些特殊情况需要重启站点,在System.Web.dll程序集下HttpRuntime类下有一个静态方法UnloadAppDomain,使用这个方法可以重启站点: protected void b ...
- iOS开发中 workspace 与 static lib 工程的联合使用
在iOS开发中,其实workspace的使用没有完全发挥出来,最近做了一些研究,也想把之前写过的代码整理下,因为iOS里面的布局方式,交互方式也就那么几种.所以,整理好了之后,更能快捷开发,而且能够形 ...
- WPF自定义控件与样式(9)-树控件TreeView与菜单Menu-ContextMenu
一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要内容: 菜单M ...