在使用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的列排序的更多相关文章

  1. UI控件Telerik UI for WinForms发布R1 2019|附下载

    Telerik UI for WinForms拥有适用Windows Forms的110多个令人惊叹的UI控件.所有的UI for WinForms控件都具有完整的主题支持,可以轻松地帮助开发人员在桌 ...

  2. 用户界面控件Telerik UI for WinForms发布R2 2019|附下载

    Telerik UI for WinForms拥有适用Windows Forms的110多个令人惊叹的UI控件.所有的UI for WinForms控件都具有完整的主题支持,可以轻松地帮助开发人员在桌 ...

  3. Telerik UI for ASP.NET AJAX控件汉化方法

    Telerik UI for ASP.NET AJAX控件功能十分强大,但原版是英文界面的,不方便一些用户使用. 和.NET的其他控件一样,可以通过资源文件来制作多语言版本. 下面看看安装完成后原始的 ...

  4. UWP中使用Telerik UI For UWP

    国际惯例先上一张图吧: 首先去下载Telerik UI For UWP的SDK,安装好之后在项目中添加SDK的引用 建议使用引用SDK,如果引用dll的话需要引用的dll较多不太方便 引用好之后以一个 ...

  5. 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 ...

  6. 本文演示如何配置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: ...

  7. Telerik UI for ASP.NET Core概要

    介绍:不介绍了,刚开始研究. 下载:CSDN或者51cto上都有最新的开发版 安装:默认的安装目录是C:\Program Files (x86)\Progress\Telerik UI for ASP ...

  8. UI控件Telerik UI for ASP.NET MVC全新发布R2 2019 SP1

    Telerik UI for ASP.NET MVC拥有使用JavaScript和HTML5构建网站和移动应用所需的70+UI部件,来满足开发者的各种需求,提供无语伦比的开发性能和用户体验.它主要是针 ...

  9. WPF界面控件Telerik UI for WPF发布R2 2019 SP1|实现新的属性

    Telerik UI for WPF拥有超过100个控件来创建美观.高性能的桌面应用程序,同时还能快速构建企业级办公WPF应用程序.UI for WPF支持MVVM.触摸等,创建的应用程序可靠且结构良 ...

随机推荐

  1. Windows 10 周年版尝鲜

    早在今年的 Build 大会上,微软就开始宣传最新的 Windows 10 周年版更新,炫了不少特技,直到昨天(2016/8/2 PST)才正式放出,相关新闻可以参考这里,正式的版本为 Version ...

  2. Android开发学习之路-下拉刷新以及GridView的使用

    GridView是类似于ListView的控件,只是GridView可以使用多个列来呈现内容,而ListView是以行为单位,所以用法上是差不多的. 主布局文件,因为要做下拉刷新,所以加了一个Prog ...

  3. Atitit 语音识别的技术原理

    Atitit 语音识别的技术原理 1.1. 语音识别技术,也被称为自动语音识别Automatic Speech Recognition,(ASR),2 1.2. 模型目前,主流的大词汇量语音识别系统多 ...

  4. EasyUI Field

    效果: JS: var sortIndex = $("#ListDiv").find(".datagrid-view2").find(".datagr ...

  5. ASPNET MVC中断请求

    ASPNET MVC如何正确的中断请求? 感觉是这样? 在aspnet开发过程中如果想要中断当前的http处理,以前在aspnet中一直是Response.End(); 在这Response.End( ...

  6. 快速入门系列--WCF--05事务

    最近开始WCF相关知识的学习,虽然实际工作中使用公司自己的一套SOA系统,但微软的一套服务架构还是具有很大的参考意义.除了WCF的一些基础使用,相对比较复杂的内容有分布式的事务和通信的安全等,不过基本 ...

  7. Zookeeper-Zookeeper的配置

    前面两篇文章介绍了Zookeeper是什么和可以干什么,那么接下来我们就实际的接触一下Zookeeper这个东西,看看具体如何使用,有个大体的感受,后面再描述某些地方的时候也能在大脑中有具体的印象.本 ...

  8. 用ticons指令结合ImageMagickDisplay工具批量生成Android适应图片

    用ticons指令结合ImageMagickDisplay工具批量生成Android适应图片 ticons的用法可以百度 这里记录下具体的编译方法 在安装了ticons和ImageMagickDisp ...

  9. prototype.js源码

    prototype 1.3.1 版本和之前的 1.2.0 版本有了不少改进,并增加了新的功能: 1. 增加了事件注册管理2. 增加了空间定位的常用函数3. 改善了 xmlhttp 的封装4. 移除了 ...

  10. [Node.js] 使用node-forge保障Javascript应用的传输安全

    原文地址:http://www.moye.me/2015/12/19/protect_jsapp_tsl_by_using_node-forge/ 引子 半年前的最后一次更新(惭愧  ),提到了对称与 ...