在使用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. 虚拟化平台cloudstack(6)——使用maven:jetty调试

    调试环境 ubuntu 12.04 JDK1.7 apache-maven-3.10 eclipse 4.2 Juno mysql 5 apache ant JDK的配置和安装 安装可以参考: htt ...

  2. Node.js刷新session过期时间

    在Node.js中,我们通常使用express-session这个包来使用和管理session,保存服务端和客户端浏览器之间的会话状态.那如何才能实现当用户刷新当前页面或者点击页面上的按钮时重新刷新s ...

  3. ejs模板中的四种表达式输出形式

    在ejs模板中,通常会用下面四种方式在HTML中输出服务端的变量或表达式的值: 1. 直接在<%%>中写表达式或变量.这种情况通常只是用来进行表达式计算或给变量赋值,不会有任何输出,被称作 ...

  4. Java Socket Server的演进 (一)

    最近在看一些网络服务器的设计, 本文就从起源的角度介绍一下现代网络服务器处理并发连接的思路, 例子就用java提供的API. 1.单线程同步阻塞式服务器及操作系统API 此种是最简单的socket服务 ...

  5. ASP.NET将原始图片按照指定尺寸等比例缩放显示图片

    网站上可能会有很多图片,比如产品图片等,而且他们可能大小不一,宽度和高度也不一定一样,有的很大有的很小.如果放在一张网页上,可能会破坏版面,但是如果强制让他们按照指定的宽度和高度显示,因为比例不同还会 ...

  6. 开发者最常用的 8 款 Sublime Text 3 插件

    转载于:http://www.itxuexiwang.com/a/liunxjishu/2016/0228/177.html?1456925631Sublime Text作为一个尽为人知的代码编辑器, ...

  7. Andrew Ng机器学习公开课笔记 -- Regularization and Model Selection

    网易公开课,第10,11课 notes,http://cs229.stanford.edu/notes/cs229-notes5.pdf   Model Selection 首先需要解决的问题是,模型 ...

  8. Laravel5.0学习--02 实例进阶

    本文以laravel5.0.22为例. 本节以新建一个简单的博客作为实例. 准备工作 数据库配置 .env文件(也可以直接修改config/database.php) DB_HOST=localhos ...

  9. 查看Query Plan

    在执行一个查询语句时,查询优化器编译查询语句,产生一个足够好的Compiled Plan,将其缓存到plan cache中.Compiled plan是基于batch的,如果一个batch含有多个qu ...

  10. JSP网站开发基础总结《七》

    按照计划本篇将为大家总结搜索功能的两种实现:确定搜索与模糊搜索.所谓精确搜索便是指,根据用户的输入的搜索内容,在数据库中寻找具有一一对应的关系的数据,一般都是用户在数据库中的主键值.而模糊搜索,是一种 ...