C# DataGridView 绑定List 無法排序問題解決方案
/// <summary>
/// 自定义绑定列表类
/// </summary>
/// <typeparam name="T">列表对象类型</typeparam>
public class BindingCollection<T> : BindingList<T>
{
private bool isSorted;
private PropertyDescriptor sortProperty;
private ListSortDirection sortDirection;
/// <summary>
/// 构造函数
/// </summary>
public BindingCollection() : base()
{
}
/// <summary>
/// 构造函数
/// </summary>
/// <param name="list">IList类型的列表对象</param>
public BindingCollection(IList<T> list) : base(list)
{
}
/// <summary>
/// 自定义排序操作
/// </summary>
/// <param name="property"></param>
/// <param name="direction"></param>
protected override void ApplySortCore(PropertyDescriptor property, ListSortDirection direction)
{
List<T> items = this.Items as List<T>;
if (items != null)
{
ObjectPropertyCompare<T> pc = new ObjectPropertyCompare<T>(property, direction);
items.Sort(pc);
isSorted = true;
}
else
{
isSorted = false;
}
sortProperty = property;
sortDirection = direction;
this.OnListChanged(new ListChangedEventArgs(ListChangedType.Reset, -1));
}
/// <summary>
/// 获取一个值,指示列表是否已排序
/// </summary>
protected override bool IsSortedCore
{
get
{
return isSorted;
}
}
/// <summary>
/// 获取一个值,指示列表是否支持排序
/// </summary>
protected override bool SupportsSortingCore
{
get
{
return true;
}
}
/// <summary>
/// 获取一个只,指定类别排序方向
/// </summary>
protected override ListSortDirection SortDirectionCore
{
get
{
return sortDirection;
}
}
/// <summary>
/// 获取排序属性说明符
/// </summary>
protected override PropertyDescriptor SortPropertyCore
{
get
{
return sortProperty;
}
}
/// <summary>
/// 移除默认实现的排序
/// </summary>
protected override void RemoveSortCore()
{
isSorted = false;
this.OnListChanged(new ListChangedEventArgs(ListChangedType.Reset, -1));
}
}
public class ObjectPropertyCompare<T> : IComparer<T>
{
private PropertyDescriptor property;
private ListSortDirection direction;
// 构造函数
public ObjectPropertyCompare(PropertyDescriptor property, ListSortDirection direction)
{
this.property = property;
this.direction = direction;
}
// 实现IComparer中方法
public int Compare(T x, T y)
{
object xValue = x.GetType().GetProperty(property.Name).GetValue(x, null);
object yValue = y.GetType().GetProperty(property.Name).GetValue(y, null);
int returnValue;
if (xValue is IComparable)
{
returnValue = ((IComparable)xValue).CompareTo(yValue);
}
else if (xValue == yValue)
{
returnValue = 0;
}
else
{
returnValue = xValue.ObjToString().CompareTo(yValue.ObjToString());
}
if (direction == ListSortDirection.Ascending)
{
return returnValue;
}
else
{
return returnValue * -1;
}
}
}
new BindingCollection<model对象>(models);
C# DataGridView 绑定List 無法排序問題解決方案的更多相关文章
- ASP.NET MVC Identity 兩個多個連接字符串問題解決一例
按照ASP.NET MVC Identity建立了一個用戶權限管理模塊,由于還要加自己已有的數據庫,所以建立了一個實體模型,建立了之后,發現登錄不了: 一直顯示“Login in failed for ...
- DevExpress的GridControl控件更新數據問題解決辦法
開發WPF程序時,使用Devexpress的GridControl控件用ItemSource綁定數據,在頁面進行編輯時,當屬性繼承INotifyPropertyChanged接口時會同步更新後臺數據. ...
- Oracle臨時表空間過大問題解決
查詢資料庫伺服器時,發現資料庫伺服器磁片使用空間達到了98%,分析總共的資料檔案也不可能達到如此大,經過查詢發現原來臨時表空間的使用方式達到了 32G,導致磁碟空間使用緊張.搜索了相應的文檔與資料後, ...
- NB實體連線到公司的網路,無法上網解決方案,需設 proxy。
未使用 VPN Cisco Anyconnect 已連線到公司的網路: google-chrome-stable --proxy-server="proxy.XXXcomm.com:3128 ...
- [CSS Hack]解決IE6、IE7、IE8、Firefox的瀏覽器相容性問題!
每次調CSS最令人頭痛的就是瀏覽器校正問題,因為每個瀏覽器對CSS的解釋都不太一樣,Firefox本身算是比較照規矩來,處理上比較簡單,但是遇到微軟的IE系列頭就大了,雖然都是IE,但是IE6.IE7 ...
- 解決從Ubuntu 12.04升級至12.10之後的Unity顯示問題
FROM: http://blog.sina.com.cn/s/blog_97ef3ff4010190pe.html#bsh-75-306370781 今天中午經過系統自帶的“檢查更新”軟件從Ubun ...
- jQuery-menu-aim有時候不能觸發BUG解決辦法
在使用jQuery-menu-aim菜單時有時候鼠標移上去會發現樣式有改變但是第二階菜單卻沒有出現的問題 解決辦法:在exitMenu的方法中加入return true; 如下所示: exitMenu ...
- 在 React Native 中使用 moment.js 無法載入語系檔案
moment.js 是很常見的日期時間 library,友善的 API 與極佳的執行效率是它的兩大賣點.例如 (new Date()).getFullYear(),如果使用 moment.js 我可以 ...
- [亂數] <細說> C/C++ 亂數基本使用與常見問題
陸陸續續寫了 EA 一.二年,以前亂數引導文回頭看時才發現,怎麼有這麼多細節的錯誤.沒系統. 這篇文章主要引導初學者使用亂數,同時附上常被翻出來討論的議題,C/C++適用,唯以 C 語言撰之. 也由 ...
- 修改windows系統下xampp中apache端口被其他程式占用的問題
windows 7安裝後啟動xampp, 提示port 443 被其他程式占用. 網上查找解決方案: http://stackoverflow.com/questions/21182512/how-t ...
随机推荐
- Nodejs与管道和信号
Nodejs与管道 Linux的其中一个设计哲学就是小而精,一个程序只做一件事情,然后通过管道将多个程序连接起来完成复杂的任务. 比如如下的命令: ps -ef | grep node cat aaa ...
- springboot集成docker实现自动化构建镜像说明
springboot集成docker实现自动化构建镜像说明 文档说明 该文档仅包括通过配置springboot.docker.jenkins.git.appollo等实现持续构建,持续发布的功能,不包 ...
- mysql、PikaDB的使用方法和优化策略
Mysql 字段选择 尽量选用INT,BIGINT,4字节8字节的消耗小于varchar.字符串选择VARCHAR增加拓展性. 时间应使用时间戳BIGINT存储,不使用DATETIME. 不使用BLO ...
- 理解tomcat中的BIO、NIO、AIO、ARP
理解tomcat中的BIO.NIO.AIO.ARP tomcat作为springboot中默认的web容器,了解tomcat的运转可以帮助我们更好的去调整tomcat的参数达到更好的性能 前置知识 I ...
- 康谋分享 | aiSim5仿真场景重建感知置信度评估(三)
aiSim5重建高精度的真实交通场景,用于测试和训练ADAS/AD系统.内置场景包括赛道.车库.高速公路和城市环境.通过全局行动日志,aiSim能将驾驶数据转化为场景重建.车道线检测算法在仿真与现实世 ...
- C#基础——不可变集合
参照:https://mp.weixin.qq.com/s/NFBc2bNeHpdadh89T44Lpg 在 .NET Core 中就存在着这三大 IReadOnlyList,IReadOnlyDic ...
- 【HUST】网安|编译原理|期末复习概念梳理笔记
纯自用,仅概念无题型,配合课本<编译原理 第4版>(ISBN: 978-7-121-31930-3)理解. 参考文献:刘铭. 编译原理 第4版. 北京:电子工业出版社, 2018.06. ...
- 通过Java写入数据到Excel表格
在数据处理与管理领域,Excel 凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具.在 Java 开发过程中,常常需要将不同类型的数据,如文本.数值.数组以及 DataTable 数据写入 ...
- 信息资源管理综合题之“LJ集团信息化项目规划问题”
一.LJ集团是北京的一家规模巨大的房地产投资公司,早在15年前,该公司出现了如下几个问题:每个业务员手上的用户资料,其他人无法得知,从而导致员工离职时会流失大量潜在客户:业务员繁忙的时候,无法满足客户 ...
- 词库过大导致的Redis超时问题-RedisCommandTimeoutException
问题 Redis缓存超时问题 报错内容 redis io.lettuce.core.RedisCommandTimeoutException: Command timed out after 10 s ...