点击listview 的列头对其item进行自动排序_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 点击listview 的列头对其item进行自动排序

点击listview 的列头对其item进行自动排序

 2013/11/22 18:27:29  bloomalone  博客园  我要评论(0)
  • 摘要:若要自定义排序顺序,必须编写一个实现IComparer接口的类,并将ListViewItemSorter属性设置为该类的一个对象。当设置ListViewItemSorter属性值时,将自动调用Sort方法。实现IComparer接口的类://usingSystem;//usingSystem.Collections.Generic;//usingSystem.Linq;//usingSystem.Text;usingSystem.Collections;usingSystem.Windows
  • 标签:view list item

若要自定义排序顺序,必须编写一个实现 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

 

发表评论
用户名: 匿名