zoukankan      html  css  js  c++  java
  • 点击listview 的列头对其item进行自动排序

    若要自定义排序顺序,必须编写一个实现 IComparer 接口的类,并将 ListViewItemSorter 属性设置为该类的一个对象。
    当设置 ListViewItemSorter 属性值时,将自动调用 Sort 方法。

    实现 IComparer 接口的类:

    //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
  • 相关阅读:
    码云的安装和配置
    Python解释器安装教程和环境变量配置
    Python基础学习
    buuctf CheckIn
    各种小马收集
    buuctf Easysql 小记
    locust
    封装好的日志模块
    实用的测试网站
    列表操作
  • 原文地址:https://www.cnblogs.com/bloomalone/p/3437914.html
Copyright © 2011-2022 走看看