怎样对ListView的项进行排序

怎样对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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119001.html原文链接:https://javaforall.net

(0)
上一篇 2021年11月24日 上午11:00
下一篇 2021年11月24日 上午11:00


相关推荐

  • ping指定IP的指定端口_ping命令端口号多少

    ping指定IP的指定端口_ping命令端口号多少ping是简单的测试网络连接情况的小工具,对于一般用户很实用,但是ping有个缺点就是,不能指定端口tcping命令是针对tcp监控的,也可以看到ping值,即使源地址禁ping也可以通过tcpin

    2022年8月1日
    9
  • 51单片机入门教程(2)——实现流水灯

    51单片机入门教程(2)——实现流水灯51单片机入门教程(2)——实现流水灯一、搭建流水灯电路二、流水灯程序2.1延时程序2.2延时函数2.3按字节寻址2.4逻辑移位2.5条件判断一、搭建流水灯电路在Proteus中搭建流水灯电路如图二、流水灯程序我们可以把流水灯看作依次点亮若干个灯。程序如下:#include<reg52.h>sbitled1=P2^0;sbitled2=P2^1…

    2022年6月10日
    34
  • 0xffffffff是多少?

    0xffffffff是多少?(1)正数的补码与原码相同;(2)负数的符号位为1,其余位为该数绝对值的原码按位取反,然后整个数加1,即为其补码。(总的来说:补码=原码取反+1,只不过负数带有符号位需特殊考虑。。。)—————————————————————————————————–

    2022年5月17日
    40
  • Linux文件系统类型介绍[通俗易懂]

    Linux文件系统类型介绍[通俗易懂]Linux把设备都当作文件一样来进行操作,这样就大大方便了用户的使用(在后面的Linux编程中可以更为明显地看出)。在Linux下与设备相关的文件一般都在/dev目录下,它包括两种,一种是块设备文件,另一种是字符设备文件。这就涉及到文件系统,以下介绍以下Linux文件系统。 1.ext2和ext3 ext3是现在Linux(包括RedHat,Mandrake下…

    2025年12月12日
    4
  • oralce11g 注冊表卸载20140810

    oralce11g 注冊表卸载20140810

    2022年1月27日
    69
  • 如何偷窥到socket对应的内核缓冲区中有什么数据? 有多少数据?—利用recv的MSG_PEEK和ioctlsocket的FIONREAD

    如何偷窥到socket对应的内核缓冲区中有什么数据? 有多少数据?—利用recv的MSG_PEEK和ioctlsocket的FIONREAD很多时候,应用程序仅仅想知道内核缓冲区中有什么数据,或者想知道有多少数据可读,也就是说,应用程序仅仅想偷窥一下里面的数据,并不是想偷取,那怎么办呢?事实上,我们之前已经大致说过,现在,我们继续来复习一下recv的MSG_PEEK:服务端程序为:#include#include//winsock接口#pragmacomm

    2022年7月23日
    12

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号