C#中listview控件实现按照文本、数字、时间升序和降序排序
					当前位置:点晴教程→知识管理交流
					
					→『 技术文档交流 』
					
				 
				
 【问题】: 
当点击列标题的时候,能够完成对该列排序,再次点击,按照该列反序排序。 
 【解决方法】: 
使用  IComparer接口。 
 例子: 新建一个class类: using System; using System.Collections.Generic; 
using System.Text; 
using System.Collections; using System.Windows.Forms; namespace sortListView 
{ 
  class ListViewColumnSorter: IComparer 
  {       
    private int ColumnToSort;// 指定按照哪个列排序   
    private SortOrder OrderOfSort;// 指定排序的方式           private CaseInsensitiveComparer ObjectCompare;// 声明CaseInsensitiveComparer类对象     public ListViewColumnSorter()// 构造函数 
    {         
        ColumnToSort = 0;// 默认按第一列排序     
        OrderOfSort = SortOrder.None;// 排序方式为不排序         
      ObjectCompare = new CaseInsensitiveComparer();// 初始化CaseInsensitiveComparer类对象 }     // 重写IComparer接口.     
    // <returns>比较的结果.如果相等返回0,如果x大于y返回1,如果x小于y返回-1</returns> 
    public int Compare(object x, object y) { int compareResult;         ListViewItem listviewX, listviewY; 
        // 将比较对象转换为ListViewItem对象 
        listviewX = (ListViewItem)x; 
        listviewY = (ListViewItem)y; 
        // 比较 
        compareResult = ObjectCompare.Compare(listviewX.SubItems[ColumnToSort].Text, listviewY.SubItems[ColumnToSort].Text); 
        // 根据上面的比较结果返回正确的比较结果 
        if (OrderOfSort == SortOrder.Ascending) { // 因为是正序排序,所以直接返回结果             return compareResult; 
        } 
        else if (OrderOfSort == SortOrder.Descending) { // 如果是反序排序,所以要取负值再返回             return (-compareResult); 
        } 
        else 
        { 
            // 如果相等返回0 
            return 0; 
        } }     /// 获取或设置按照哪一列排序.     
    public int SortColumn { set { ColumnToSort = value;         } 
        get 
        { 
            return ColumnToSort; 
        } }     /// 获取或设置排序方式.   
    public SortOrder Order { set         { 
            OrderOfSort = value; 
        } 
        get 
        { 
            return OrderOfSort; 
        } } } } ================================ 页面代码: namespace sortListView { 
  public partial class Form1 : Form 
  { 
      public Form1() 
      { 
        InitializeComponent(); 
        // 创建一个ListView排序类的对象,并设置listView1的排序器 
        lvwColumnSorter = new ListViewColumnSorter(); 
        this.listView1.ListViewItemSorter = lvwColumnSorter; }       private void Form1_Load(object sender, EventArgs e) { //初始化listview1. }       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; 
        } 
        // 用新的排序方法对ListView排序 
        this.listView1.Sort();       }     private void button1_Click(object sender, EventArgs e) 
    { 
        Form2 obj = new Form2(); 
        obj.Show(); } } } 该文章在 2023/11/2 15:20:15 编辑过  | 
		
			 关键字查询 
				相关文章 
				正在查询...  |