若要自定义排序顺序,必须编写一个实现 IComparer 接口的类,并将 ListViewItemSorter 属性设置为该类的一个对象。
当设置 ListViewItemSorter 属性值时,将自动调用 Sort 方法。
实现 IComparer 接口的类:
class="code_img_closed" src="/Upload/Images/2013112218/0015B68B3C38AA5B.gif" alt="" />logs_code_hide('caa86b44-24b7-4d6c-bf6b-3cb1ff82821a',event)" src="/Upload/Images/2013112218/2B1B950FA3DF188F.gif" alt="" />//using System; //using System.Collections.Generic; //using System.Linq; //using System.Text; using System.Collections; using System.Windows.Forms; namespace APIdesktop54 { public class ListViewColumnSorter:IComparer { private int sortColumn; //指定按照哪个列排序 private SortOrder order; //指定排序的方式 public int SortColumn { get { return sortColumn; } set { sortColumn = value; } } public SortOrder Order { get { return order; } set { order = value; } } private CaseInsensitiveComparer ObjectCompare; //声明 CaseInsensitiveComparer 类对象 /// <summary> /// 构造函数 /// </summary> public ListViewColumnSorter() { sortColumn = 0; //默认按第一列排序 order = SortOrder.None; //排序方式为不排序 ObjectCompare = new CaseInsensitiveComparer(); //初始化 CaseInsensitiveComparer 类对象 } public int Compare(object x,object y) { int compareResult; ListViewItem listviewX, listviewY; //将比较对象转换为ListViewItem对象 listviewX=(ListViewItem)x; listviewY=(ListViewItem)y; //比较 compareResult = ObjectCompare.Compare(listviewX.SubItems[sortColumn].Text,listviewY.SubItems[sortColumn].Text); //根据上面的比较结果,返回正确的比较结果 if(order==SortOrder.Ascending) { return compareResult; } else if (order == SortOrder.Descending) { return (-compareResult); } else { return 0; } } } }View Code
在form1中和listview的ColumnClick事件中实现下面的代码。
public partial class Form1 : Form { private ListViewColumnSorter lvwColumnSorter; public Form1() { InitializeComponent(); //若要自定义排序顺序,必须编写一个实现 IComparer 接口的类,并将 ListViewItemSorter 属性设置为该类的一个对象。 //当设置 ListViewItemSorter 属性值时,将自动调用 Sort 方法。 lvwColumnSorter = new ListViewColumnSorter(); //new一个listview的排序类的对象 this.listView1.ListViewItemSorter = lvwColumnSorter; //设置ListView1的排序列 this.listView1.View = View.Details; this.listView1.Columns.Add(new ColumnHeader()); this.listView1.Columns[0].Text = "Name"; this.listView1.Columns[0].Width=100; this.listView1.Columns.Add(new ColumnHeader()); this.listView1.Columns[1].Text = "Path"; this.listView1.Columns[1].Width = 270; this.listView1.Columns.Add(new ColumnHeader()); this.listView1.Columns[2].Text = "Type"; this.listView1.Columns[2].Width = 50; } private void listView1_ColumnClick(object sender, ColumnClickEventArgs e) { if (e.Column == lvwColumnSorter.SortColumn) //检查点击的列是不是现在的排序列 { //重新设置此列的排序方法 if (lvwColumnSorter.Order == SortOrder.Ascending) { lvwColumnSorter.Order = SortOrder.Descending; } else { lvwColumnSorter.Order =SortOrder.Ascending; } } else { //设置排序列,默认为正向排序 lvwColumnSorter.SortColumn = e.Column; lvwColumnSorter.Order = SortOrder.Ascending; } this.listView1.Sort(); } }View Code