zoukankan      html  css  js  c++  java
  • 怎样对ListView的项进行排序

    当您使用资源浏览器查看文件时,您能够随心所欲的按名称、大小、类型及改动日期不同的列对文件进行大小排序。.Net提供的ListView组件没有直接提供这样的功能,但要实现并不难。

     
    ListView.Sort()方法的功能是“对列表视图的项进行排序”,可当您调用它时却什么也没有发生,原因是您没有为listView1.ListViewItemSorter指定排序器。所以,首先必须写一个排序类。
    public class mySorter:IComparer
    {
    private Comparer comparer;
    private int sortColumn;
    private SortOrder sortOrder;
    public mySorter()
    {
    sortColumn=0;
    sortOrder=SortOrder.None;
    comparer=Comparer.Default;
    }
    //指定进行排序的列
    public int SortColumn
    {
    get {return sortColumn;}
    set {sortColumn=value;}
    }
    //指定按升序或降序进行排序
    public SortOrder SortOrder
    {
    get {return sortOrder;}
    set {sortOrder=value;}
    }
    public int Compare(object x,object y)
    {
    int CompareResult;
    ListViewItem itemX=(ListViewItem)x;
    ListViewItem itemY=(ListViewItem)y;
    //在这里您能够提供自己定义的排序
    CompareResult=comparer.Compare(itemX.SubItems[this.sortColumn].Text,itemY.SubItems[this.sortColumn].Text);
    if (this.SortOrder==SortOrder.Ascending)
    return CompareResult;
    else
    if (this.SortOrder==SortOrder.Descending)
    return (-CompareResult);
    else
    return 0;
    }
    }


    怎样使用这个类,非常easy。新建一个Windows应用程序,增加ListView组件listView1并将其View属性设为Details。

    //增加排序类
    private mySorter sorter;
    //改动窗口构造函数
    public Form1()
    {
    InitializeComponent();
    sorter=new myColumnSorter();
    //为ListViewItemSorter指定排序类
    this.listView1.ListViewItemSorter=sorter;
    sorter.SortOrder=SortOrder.Ascending;
    }
    //给单击表头事件增加代码
    private void listView1_ColumnClick(object sender, System.Windows.Forms.ColumnClickEventArgs e)
    {
    if (e.Column==this.sorter.SortColumn)
    {
    if (this.sorter.SortOrder==SortOrder.Ascending)
    this.sorter.SortOrder=SortOrder.Descending;
    else
    if (this.sorter.SortOrder==SortOrder.Descending)
    this.sorter.SortOrder=SortOrder.Ascending;
    else
    return;
    }
    else
    {
    this.sorter.SortColumn=e.Column;
    }
    this.listView1.Sort();
    }
    假设您须要自己定义排序,那么您能够改动排序器的Compare()方法。 

    转自domanager

  • 相关阅读:
    『Delphi』字符串操作——返回子串出现的位置
    2007:远见、劲取、专注
    『转载』个人博客吸引风投关注成可盈利业务
    [和管子对话] 1 200745/对面向对象的你言我语
    『Delphi』File not found的解决办法
    Ruby学习1字符串
    聚集表(clustered table)data page中的数据行可以无序
    通过DBCC PAGE查看页信息验证聚集索引和非聚集索引节点信息
    查看SQL Server Resource Database以及修改系统表
    SQL Server的还原(2)——STOPAT
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/3851637.html
Copyright © 2011-2022 走看看