Home  >  Article  >  Backend Development  >  Sample code sharing to implement C# listview click column header sorting

Sample code sharing to implement C# listview click column header sorting

黄舟
黄舟Original
2017-03-24 11:48:481692browse

The editor below will bring you an example of C# listview clicking on the column header to sort. The editor thinks it is quite good, so I will share it with you now and give it as a reference for everyone. Let’s follow the editor and take a look.

The examples are as follows:

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

The above is the detailed content of Sample code sharing to implement C# listview click column header sorting. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn