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.触摸等,创建的应用程序可靠且结构良 ...
随机推荐
- Vue.js2.0从入门到放弃---入门实例
最近,vue.js越来越火.在这样的大浪潮下,我也开始进入vue的学习行列中,在网上也搜了很多教程,按着教程来做,也总会出现这样那样的问题(坑啊,由于网上那些教程都是Vue.js 1.x版本的,现在用 ...
- 360路由器c301最新固件支持万能中继
360路由器c301现在已经停产了.出厂的固件是360_301_0.7.3.8.这个版本不支持中继.5G信号.本文主要介绍如何刷最新固件以及设置万能中继. 本文为作者原创,发表在博客园:http:// ...
- Atitti 图像处理 图像混合 图像叠加 blend 原理与实现
Atitti 图像处理 图像混合 图像叠加 blend 原理与实现 混合模式 编辑 本词条缺少信息栏,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 混合模式是图像处理技术中的一个技术名词,不 ...
- OutputCache属性详解(三)— VaryByHeader,VaryByCustom
目录 OutputCache概念学习 OutputCache属性详解(一) OutputCache属性详解(二) OutputCache属性详解(三) OutputCache属性详解(四)— SqlD ...
- Multiton & Singleton
From J2EE Bloger http://j2eeblogger.blogspot.com/2007/10/singleton-vs-multiton-synchronization.html ...
- C++中“类”相关知识点汇总
一:类中默认的成员函数 一个空的class在C++编译器处理过后就不再为空,编译器会自动地为我们声明一些member function,如果你写 class Empty{}; 就相当于: class ...
- 【技巧】只利用 Visual Stdio 自带的工具这么找父类?
很多人说只能 F12 看见子类 其实vs里面有一个叫“对象浏览器” 通过这个就可以直接定位父类,不需要利用reflector之类的工具来找父类 具体如下:
- RESTORE DATABASE的standby选项
RESTORE DATABASE [db1] FROM DISK = N'E:\Backup\db2.bak' , MOVE N'db1_Data' TO N'D:\Data\db2.MDF', MO ...
- Android开发实践:编译VLC-for-android
最近在Android做流媒体相关的开发,一直想学习一下强大的VLC,正好趁此机会研究研究VLC-for-android的代码,看看优秀的开源音视频播放器是如何实现的.本文总结下在Linux平台下如何编 ...
- HTML5移动Web开发(七)——通过界面图标启动Web应用
现在我们要使用手机上某个应用时,通过点击屏幕上的图标就可以运行.但是对基于HTML的Web应用来说,运行起来就比较麻烦了,用户必须先打开浏览器,然后访问想使用的应用程序站点.现在我们想把一个指定的We ...