软件编程
位置:首页>> 软件编程>> C#编程>> C# listview 点击列头排序的实例

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

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

标签:c,listview,点击,排序

实例如下:


#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);
   }
  }
 }
0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com