这里只贴主要代码,dataList是已添加数据的全局变量,绑定数据源 datagridview1.DataSource = dataList,以下是核心代码。

实现点击列表头实现自定义排序

      private int _sorterOrder;   //1表示升序,0表示降序
    private int _previousIndex = -; //记录前一次点击的列索引
    private datagridview1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
//判断列标头是否被连续点击,是则改变上次排序规则,否则按升序排序
if (this._previousIndex == e.ColumnIndex)
{
this._sorterOrder = -this._sorterOrder;
}
else
{
this._sorterOrder = ;
}
this._previousIndex = e.ColumnIndex;
       ListComparison(datagridview1.Columns[e.ColumnIndex].DataPropertyName);
}

实现List集合根据传入的属性名进行排序

        /// <summary>
/// List集合比较器
/// </summary>
/// <param name="propName">属性名</param>
private void ListComparison(string propName)
{
Type type = typeof(MyModel);
PropertyInfo property = type.GetProperty(propName);
List<MyModel> modelList = datagridview1.DataSource as List<MyModel>;
modelList.Sort((x, y) =>
{
string value1 = property.GetValue(x, null).ToString();
string value2 = property.GetValue(y, null).ToString();
double number1, number2;
//如果属性值为数字则转换为浮点数进行比较,否则按照字符串比较
if (double.TryParse(value1, out number1) && double.TryParse(value2, out number2))
{
return this._sorterOrder == ? number1.CompareTo(number2) : number2.CompareTo(number1);
} return this._sorterOrder == ? value1.CompareTo(value2) : value2.CompareTo(value1);
});
}

最新文章

  1. (转)NIO与AIO,同步/异步,阻塞/非阻塞
  2. Node.js process 模块常用属性和方法
  3. CSS选择器和jQuery选择器的区别与联系之一
  4. hiho#1033 : 交错和
  5. 【bzoj1029】道路抢修
  6. iOS的app 中的 埋点
  7. 组合控件 圆环 ring
  8. shell惊鸿
  9. 《微信小程序七日谈》- 第五天:你可能要在登录功能上花费大力气
  10. 5.Smart使用内置函数或者自定义函数
  11. CentOS上安装GitBlit服务
  12. Qt 5.9.4 如何静态编译和部署?
  13. Codeforces 1045E. Ancient civilizations 构造 计算几何 凸包
  14. python之路(十)-正则表达式
  15. 读取Excel的部分问题
  16. expdp和impdp导入和导出数据
  17. Python中StringIO和BytesIO
  18. Java编程的逻辑 (15) - 初识继承和多态
  19. 获取和设置消息队列的属性msgctl,删除消息队列
  20. 刷新物化视图sql

热门文章

  1. SQL Server求解最近多少销售记录的销售额占比总销售额的指定比例
  2. python基础(六)循环
  3. Java的SPI机制与简单的示例
  4. Ajax请求利用jsonp实现跨域
  5. web报表移动端如何进行移动设备绑定与撤销
  6. [转]Dropdownlist doesn&#39;t postback after Page_ClientValidate()
  7. [转]六款值得推荐的android(安卓)开源框架简介
  8. No resource found that matches the given name &#39;Theme.AppCompat.Light 的完美解决方案
  9. win10输入法切换快捷键怎么设置
  10. Eclipse代码追踪功能说明