/// <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  無法排序問題解決方案的更多相关文章

  1. ASP.NET MVC Identity 兩個多個連接字符串問題解決一例

    按照ASP.NET MVC Identity建立了一個用戶權限管理模塊,由于還要加自己已有的數據庫,所以建立了一個實體模型,建立了之后,發現登錄不了: 一直顯示“Login in failed for ...

  2. DevExpress的GridControl控件更新數據問題解決辦法

    開發WPF程序時,使用Devexpress的GridControl控件用ItemSource綁定數據,在頁面進行編輯時,當屬性繼承INotifyPropertyChanged接口時會同步更新後臺數據. ...

  3. Oracle臨時表空間過大問題解決

    查詢資料庫伺服器時,發現資料庫伺服器磁片使用空間達到了98%,分析總共的資料檔案也不可能達到如此大,經過查詢發現原來臨時表空間的使用方式達到了 32G,導致磁碟空間使用緊張.搜索了相應的文檔與資料後, ...

  4. NB實體連線到公司的網路,無法上網解決方案,需設 proxy。

    未使用 VPN Cisco Anyconnect 已連線到公司的網路: google-chrome-stable --proxy-server="proxy.XXXcomm.com:3128 ...

  5. [CSS Hack]解決IE6、IE7、IE8、Firefox的瀏覽器相容性問題!

    每次調CSS最令人頭痛的就是瀏覽器校正問題,因為每個瀏覽器對CSS的解釋都不太一樣,Firefox本身算是比較照規矩來,處理上比較簡單,但是遇到微軟的IE系列頭就大了,雖然都是IE,但是IE6.IE7 ...

  6. 解決從Ubuntu 12.04升級至12.10之後的Unity顯示問題

    FROM: http://blog.sina.com.cn/s/blog_97ef3ff4010190pe.html#bsh-75-306370781 今天中午經過系統自帶的“檢查更新”軟件從Ubun ...

  7. jQuery-menu-aim有時候不能觸發BUG解決辦法

    在使用jQuery-menu-aim菜單時有時候鼠標移上去會發現樣式有改變但是第二階菜單卻沒有出現的問題 解決辦法:在exitMenu的方法中加入return true; 如下所示: exitMenu ...

  8. 在 React Native 中使用 moment.js 無法載入語系檔案

    moment.js 是很常見的日期時間 library,友善的 API 與極佳的執行效率是它的兩大賣點.例如 (new Date()).getFullYear(),如果使用 moment.js 我可以 ...

  9. [亂數] <細說> C/C++ 亂數基本使用與常見問題

    陸陸續續寫了 EA  一.二年,以前亂數引導文回頭看時才發現,怎麼有這麼多細節的錯誤.沒系統. 這篇文章主要引導初學者使用亂數,同時附上常被翻出來討論的議題,C/C++適用,唯以 C 語言撰之. 也由 ...

  10. 修改windows系統下xampp中apache端口被其他程式占用的問題

    windows 7安裝後啟動xampp, 提示port 443 被其他程式占用. 網上查找解決方案: http://stackoverflow.com/questions/21182512/how-t ...

随机推荐

  1. CSS文本超出省略

    语法: text-overflow:clip|ellipsis|"任意字符" <!DOCTYPE html> <html> <head> < ...

  2. 航天信息诺税通SAAS接口封装DLL

    项目中需要对接航天信息的诺税通接口开具电子发票,为此将功能封装到了DLL中,其他项目也可以方便的引用. Delphi调用示例: 有需要可以和我联系:yzqnet(微信)

  3. centos简单文件备份

    1. 背景 现在有一个正在使用的服务器, 需要对服务器上的数据库数据.实验室文件以及采购平台文件进行备份, 将备份文件存储到另外一个服务器上, 要求留存最近七天的备份文件. 2.详细步骤 2.1 备份 ...

  4. Spring的基础结构和核心接口

    目录 1.BeanDefinition 2.BeanDefinitionReader 3.BeanDefinitionRegistry 4.BeanFactory 5.ApplicationConte ...

  5. Spring 的 resolveBeforeInstantiation 方法作用详解

    一.定义 resolveBeforeInstantiation 是 Spring 框架中 AbstractAutowireCapableBeanFactory 类的核心方法之一,它在 Bean 的实例 ...

  6. 看了他,妈妈再也不用担心我被问到Mybatis缓存了

    Mybatis缓存 一.一级缓存 1. 概念 sqlsession级别的缓存,即缓存的是SQL语句 同一个sqlsession中执行多次查询条件相同的SQL,mybatis会提供一级缓存进行优化 2. ...

  7. kette介绍-Step之Merge Join

    Merge Join介绍 需要配合Sort rows使用,对关联字段进行排序 关联两个step数据,可以是两个不同的数据库表数据,也可以是一张表,一个文件,输出字段为两张表所有字段 注意将小数据集作为 ...

  8. 27.4K Star!这个LLM应用宝库让你秒变AI全栈高手,RAG和AI Agent一网打尽!

    嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 想要快速入门LLM应用开发?想要了解最新的RAG和AI Agent技术?这个收获27.4K ...

  9. 漏洞预警 | Netis Wifi路由器信息泄露漏洞

    0x00 漏洞编号 CVE-2024-48455 0x01 危险等级 高危 0x02 漏洞概述 Netis Wi-Fi路由器以其稳定的性能.易用的管理界面以及较高的性价比受到许多用户的青睐. 0x03 ...

  10. 内网私仓全流程搭建记录(二)-npm私仓提交与拉取

    1.npm私仓依赖下载及本地上传 方法一1)使用Pycharm创建py文档,写入如下py代码: import os import re import aiohttp import asyncio fr ...