欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C# ListView 点击表头对数据进行排序功能的实现代码

程序员文章站 2023-08-15 21:11:43
添加表头单击事件 private void listview1_columnclick(object sender, columnclickeventargs e...

添加表头单击事件

private void listview1_columnclick(object sender, columnclickeventargs e)
    {
      if (listview1.columns[e.column].tag == null)
      {
        listview1.columns[e.column].tag = true;
      }
      bool tabk = (bool)listview1.columns[e.column].tag;
      if (tabk)
      {
        listview1.columns[e.column].tag = false;
      }
      else
      {
        listview1.columns[e.column].tag = true;
      }
      listview1.listviewitemsorter = new listviewsort(e.column, listview1.columns[e.column].tag);
      //指定排序器并传送列索引与升序降序关键字
      listview1.sort();//对列表进行自定义排序
}

排序用到的类

public class listviewsort : icomparer
  {
    private int col;
    private bool desck;

    public listviewsort()
    {
      col = 0;
    }
    public listviewsort(int column, object desc)
    {
      desck = (bool)desc;
      col = column; //当前列,0,1,2...,参数由listview控件的columnclick事件传递
    }
    public int compare(object x, object y)
    {
      int tempint = string.compare(((listviewitem)x).subitems[col].text, ((listviewitem)y).subitems[col].text);
      if (desck)
      {
        return -tempint;
      }
      else
      {
        return tempint;
      }
    }
  }

注意:
有的会报“错误 cs0305: 使用泛型 类型“system.collections.generic.icomparer<t>”需要 1 个类型参数”
这时只需要using system.collections.generic;改为using system.collections; 即可。