using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Windows.Forms;
using System.Drawing;namespace STools
{class ListViewColumnSorter : IComparer{/**//// <summary>/// 指定按照哪个列排序/// </summary>private int ColumnToSort;/**//// <summary>/// 指定排序的方式/// </summary>private SortOrder OrderOfSort;/**//// <summary>/// 声明CaseInsensitiveComparer类对象,/// 参见ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfSystemCollectionsCaseInsensitiveComparerClassTopic.htm/// </summary>private CaseInsensitiveComparer ObjectCompare;         /**//// <summary>/// 构造函数/// </summary>public ListViewColumnSorter(){// 默认按第一列排序ColumnToSort = 0;             // 排序方式为不排序OrderOfSort = SortOrder.None;             // 初始化CaseInsensitiveComparer类对象ObjectCompare = new CaseInsensitiveComparer();}         /**//// <summary>/// 重写IComparer接口./// </summary>/// <param name="x">要比较的第一个对象</param>/// <param name="y">要比较的第二个对象</param>/// <returns>比较的结果.如果相等返回0,如果x大于y返回1,如果x小于y返回-1</returns>public int Compare(object x, object y){int compareResult;ListViewItem listviewX, listviewY;             // 将比较对象转换为ListViewItem对象listviewX = (ListViewItem)x;listviewY = (ListViewItem)y;             // 比较compareResult = ObjectCompare.Compare(listviewX.SubItems[ColumnToSort].Text, listviewY.SubItems[ColumnToSort].Text);//Console.WriteLine(listviewX.SubItems[ColumnToSort].Text + "<->" + listviewY.SubItems[ColumnToSort].Text+":"+compareResult);// 根据上面的比较结果返回正确的比较结果if (OrderOfSort == SortOrder.Ascending){// 因为是正序排序,所以直接返回结果return compareResult;}else if (OrderOfSort == SortOrder.Descending){// 如果是反序排序,所以要取负值再返回return (-compareResult);}else{// 如果相等返回0return 0;}}         /**//// <summary>/// 获取或设置按照哪一列排序./// </summary>public int SortColumn{set{ColumnToSort = value;}get{return ColumnToSort;}}         /**//// <summary>/// 获取或设置排序方式./// </summary>public SortOrder Order{set{OrderOfSort = value;}get{return OrderOfSort;}}}
}

下面是应用排序,并不同值隔色显示

 private void listView1_ColumnClick(object sender, ColumnClickEventArgs e){ListView lv = sender as ListView;// 检查点击的列是不是现在的排序列.   int column = (lv.ListViewItemSorter as ListViewColumnSorter).SortColumn;//当前排序的序列listView1.Columns[column].Text = listView1.Columns[column].Text.Replace("↓", "").Replace("↑", "");if (e.Column == (lv.ListViewItemSorter as ListViewColumnSorter).SortColumn){// 重新设置此列的排序方法.   if ((lv.ListViewItemSorter as ListViewColumnSorter).Order == SortOrder.Ascending){(lv.ListViewItemSorter as ListViewColumnSorter).Order = SortOrder.Descending;listView1.Columns[e.Column].Text += "↑";}else{(lv.ListViewItemSorter as ListViewColumnSorter).Order = SortOrder.Ascending;listView1.Columns[e.Column].Text += "↓";}}else{// 设置排序列,默认为正向排序   (lv.ListViewItemSorter as ListViewColumnSorter).SortColumn = e.Column;(lv.ListViewItemSorter as ListViewColumnSorter).Order = SortOrder.Ascending;listView1.Columns[e.Column].Text += "↓";}// 用新的排序方法对ListView排序
            ((ListView)sender).Sort();for (int i = 0; i < listView1.Items.Count; i++){if (i != 0 && listView1.Items[i].SubItems[e.Column].Text == listView1.Items[i - 1].SubItems[e.Column].Text){listView1.Items[i].BackColor = listView1.Items[i - 1].BackColor;}else if (i == 0){listView1.Items[i].BackColor = Color.Transparent;}else{if (listView1.Items[i - 1].BackColor == Color.Transparent){listView1.Items[i].BackColor = Color.LightBlue;}else{listView1.Items[i].BackColor = Color.Transparent;}}}//listView1.Refresh();}

转载于:https://www.cnblogs.com/haorui/p/3608841.html

ListView排序并隔色显示相关推荐

  1. ListView数据项隔行换色控制实现详解

    看到有朋友在群里问过ListView项达到一定数量时加不同色选项的功能,有时间就学习了下ListView隔行换色的效果,大体效果实现出来了,吼吼,写博客里面,跟大家学习交流,一样的,先贴效果,再上代码 ...

  2. 解决 echarts柱状图x轴数据隔一个显示

    echarts柱状图x轴数据隔一个显示 在显示一个柱状图的时候,x轴的数据是隔一个显示的,但是hover的时候却能显示出当前轴x轴的名称,如下图: 那就只能说明这个轴的名称太长了,所以导致它默认就隔一 ...

  3. android上滑隐藏动画,ListView上滑和下滑,显示和隐藏Toolbar的实现方法

    1.准备Toolbar 先隐藏系统自带的actionbar,在AndroidManifest.xml文件标签中: android:theme="@style/Theme.AppCompat. ...

  4. OpenCV学习笔记:反色显示图片、鼠标事件、键盘事件和窗口滑动条操作

    环境CentOS7 g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16) $ pkg-config --modversion opencv 2.4.13 参照< ...

  5. 当点击ListView的列头时,对ListView排序

    1.创建一个新的C#项目,窗体Form1会被默认创建. 2.向窗体添加一个ListView控件, 3.在Form1.cs中添加下面的代码: private ListViewColumnSorter l ...

  6. Python项目:学生管理系统连接MySQL数据库(增删改查、排序、统计、显示所有信息)

    文章目录 一程序功能(Function) 1. 功能概述 2. 思维导图 二.开始实践 战前准备 定义学生管理系统菜单 定义主函数 1.录入学生信息 2.查找学生信息 3.删除学生信息 4.修改学生信 ...

  7. Delphi ListView排序

    var   m_bSort:   boolean=false;   //控制正反排序的变量       //ListView排序的回调函数,默认的是快速排序法,也可以自己在这里做算法   functi ...

  8. C# ListView排序

    1声明 private ListViewColumnSorter lvwColumnSorter; 2窗体构造函数添加下面代码 // 创建一个ListView排序类的对象,并设置listView1的排 ...

  9. C# winform中listview排序

    C# winform中listview排序 本文解决方案是采用下面链接中的解决方案.十分感谢这篇文章的作者bright:http://blog.163.com/shensc@126/blog/stat ...

最新文章

  1. 第三次学JAVA再学不好就吃翔(part55)--StringBuffer类的删除功能
  2. 你喜欢什么样的课堂?
  3. PHP基础题带详细答案,PHP基础语法试题(一)答案版.docx
  4. 【BZOJ 4516】生成魔咒
  5. 博文视点Open Party第5期:操作系统与嵌入式开发 圆满结束
  6. PHP网站从Apache转移到Nginx后产生404错误的原因和解决办法
  7. 数字图像处理(极简) 第一章 概述(docx)
  8. 华为 linux网络工程师待遇,华为网络工程师待遇如何?
  9. win7系统怎么用计算机,Win7系统中计算器怎么用
  10. Excel表格文件,.xls和.xlsx格式的区别
  11. matlab积分法求椭圆周长,用MATLAB计算椭圆周长和牛顿迭代MATLAB实现.doc
  12. SiteSucker Mac版(整站下载工具)中文版
  13. 51驱动AD9850/AD9851—DDS信号发生器
  14. GraphRNN: Generating Realistic Graphs with Deep Auto-Regressive Models
  15. 成都托普计算机职业技术怎么样学校,成都中职学校前景怎么样
  16. CTR模型:FNN模型
  17. Python语法错误和异常
  18. 智商情商哪个重要_高智商和高情商究竟哪个更重要?
  19. 图像处理--医疗图片的处理
  20. DBN+LSTM神经网络电容量回归分析,基于MATLAB编程的深度信念网络+lstm回归分析,

热门文章

  1. Vue中富文本编辑器的使用
  2. LeetCode 2100. 适合种地的日子(计数)
  3. 天池 在线编程 回合制游戏(前缀和)
  4. [Kaggle] Digit Recognizer 手写数字识别(卷积神经网络)
  5. LeetCode 第 22 场双周赛(220/2041,前10.8%)
  6. LeetCode 第 21 场双周赛(779/1913,前40.7%)
  7. 剑指Offer - 面试题53 - I. 在排序数组中查找数字 I(二分查找的变形版本)
  8. POJ 2287 田忌赛马(贪心)
  9. 计算所有1-100之间数字之和(偶数之和)代码
  10. 关于深度学习,我们写了一本1400页的全栈手册