C# listview 点击列头排序的实例

作者:jingxian 时间:2023-11-26 20:09:05 

实例如下:


#region 自定义变量
 int currentCol = -1;
 bool sort;
 #endregion//列头点击事件

private void lvw_ColumnClick(object sender, ColumnClickEventArgs e)
 {
  string Asc = ((char)0x25bc).ToString().PadLeft(4, ' ');
  string Des = ((char)0x25b2).ToString().PadLeft(4, ' ');

if (sort == false)
  {
   sort = true;
   string oldStr = this.lvw.Columns[e.Column].Text.TrimEnd((char)0x25bc, (char)0x25b2, ' ');
   this.lvw.Columns[e.Column].Text = oldStr + Des;
  }
  else if (sort == true)
  {
   sort = false;
   string oldStr = this.lvw.Columns[e.Column].Text.TrimEnd((char)0x25bc, (char)0x25b2, ' ');
   this.lvw.Columns[e.Column].Text = oldStr + Asc;
  }

if(lvw.Columns[e.Column].Tag.ToString()=="n")//在设计器中把列头的tag设为"n",则表示该列按数字比较器处理,否则为文本
   lvw.ListViewItemSorter = new ListViewItemComparerNum(e.Column, sort);
  else
   lvw.ListViewItemSorter = new ListViewItemComparer(e.Column, sort);
  this.lvw.Sort();
  int rowCount = this.lvw.Items.Count;
  if (currentCol != -1)
  {
   if (e.Column != currentCol)
    this.lvw.Columns[currentCol].Text = this.lvw.Columns[currentCol].Text.TrimEnd((char)0x25bc, (char)0x25b2, ' ');
  }
  currentCol = e.Column;
 }//文本比较器public class ListViewItemComparer : IComparer
 {
  public bool sort_b;
  public SortOrder order = SortOrder.Ascending;

private int col;

public ListViewItemComparer()
  {
   col = 0;
  }

public ListViewItemComparer(int column, bool sort)
  {
   col = column;
   sort_b = sort;
  }

public int Compare(object x, object y)
  {
   if (sort_b)
   {
    return String.Compare(((ListViewItem)x).SubItems[col].Text, ((ListViewItem)y).SubItems[col].Text);
   }
   else
   {
    return String.Compare(((ListViewItem)y).SubItems[col].Text, ((ListViewItem)x).SubItems[col].Text);
   }
  }
 }  //数字比较器
 public class ListViewItemComparerNum : IComparer
 {
  public bool sort_b;
  public SortOrder order = SortOrder.Ascending;

private int col;

public ListViewItemComparerNum()
  {
   col = 0;
  }

public ListViewItemComparerNum(int column, bool sort)
  {
   col = column;
   sort_b = sort;
  }

public int Compare(object x, object y)
  {
   decimal d1=Convert.ToDecimal(((ListViewItem)x).SubItems[col].Text);
   decimal d2=Convert.ToDecimal(((ListViewItem)y).SubItems[col].Text);
   if (sort_b)
   {
    return decimal.Compare(d1,d2);
   }
   else
   {
    return decimal.Compare(d2,d1);
   }
  }
 }
标签:c,listview,点击,排序
0
投稿

猜你喜欢

  • Java 中的位运算与移位运算详解

    2022-03-10 09:34:19
  • 举例讲解JDK注解的使用和自定义注解的方法

    2022-06-29 17:34:52
  • 详解Java类库的概念以及import的使用方法

    2022-04-18 06:56:54
  • C#中的Linq To XML讲解

    2021-06-29 18:39:43
  • 详解C++ STL模拟实现forward_list

    2023-06-21 02:36:04
  • 解析android中的dip,dp,px,sp和屏幕密度

    2023-09-26 20:44:38
  • SpringBoot2.1.4中的错误处理机制

    2023-11-06 02:48:47
  • springmvc分层领域模型概念详解

    2021-09-07 01:21:51
  • SpringBoot如何优雅的处理全局异常

    2021-06-09 21:28:13
  • C#多线程处理多个队列数据的方法

    2021-12-26 19:31:02
  • Java异常 Factory method'sqlSessionFactory'rew exception;ested exception is java.lang.NoSuchMethodError:

    2022-03-25 15:06:42
  • Android WebView使用的技巧与一些坑

    2022-10-18 12:57:23
  • Java中遍历Map的六种方法实现

    2022-03-21 13:30:58
  • mybatis使用foreach查询不出结果也不报错的问题

    2023-11-24 22:36:17
  • Android开发之ListView的简单用法及定制ListView界面操作示例

    2021-10-17 13:26:15
  • Java中List集合去除重复数据的方法汇总

    2021-07-05 14:57:21
  • java实现单词搜索迷宫游戏

    2023-11-10 22:44:32
  • HDFS Balancer负载均衡器及语法详解

    2023-11-18 18:30:39
  • C#正则表达式匹配HTML中的图片路径,图片地址代码

    2023-03-10 16:33:48
  • springboot如何读取配置文件到静态工具类

    2023-11-28 04:44:54
  • asp之家 软件编程 m.aspxhome.com