欢迎来到代码驿站!

.NET代码

当前位置:首页 > 软件编程 > .NET代码

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

时间:2021-08-23 09:26:49|栏目:.NET代码|点击:

实例如下:

#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# WinForm捕获全局变量异常 SamWang解决方法

栏    目:.NET代码

下一篇:asp.net Http异常eurl.axd出错信息解决方法

本文标题:C# listview 点击列头排序的实例

本文地址:http://www.codeinn.net/misctech/169336.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有