怎样对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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • AbstractInterceptor和Interceptor的区别

    AbstractInterceptor和Interceptor的区别AbstractInterceptor实现了Interceptor接口,并且空实现了init()和destroy()方法。在使用中,如果无需实现init和destroy方法,可以直接实现AbstractInterceptor

    2022年5月15日
    38
  • Linux之shell编程:if语法「建议收藏」

    Linux之shell编程:if语法「建议收藏」1、if的基本格式if[参数];then符合该条件执行的语句elif[参数];then符合该条件执行的语句else符合该条件执行的语句fi2、参数内容单文件判断????????????[-afile]如果file存在则为真[-bfile]如果file存在且是一个块特殊文件则为真[-cfile]如果file存在且是一个字特殊文件则为真[-dfile]如…

    2022年8月18日
    11
  • 使用CEF类库处理HTTP请求「建议收藏」

    使用CEF类库处理HTTP请求

    2022年3月6日
    42
  • jquery输入数字随机抽奖特效

    简介:jQuery自定义数值抽奖活动代码是一款点击开始按钮计算机会产生玩家输入范围内的随机数,点击停止按钮,将显示数字最终结果的效果。效果展示 http://hovertree.com/te

    2021年12月26日
    64
  • mac如何安装pip_mac怎么卸载python

    mac如何安装pip_mac怎么卸载pythonmac下直接安装pip和卸载pip的方法如下:1、pip的安装:输入sudoeasy_installpip就可以安装pip了。验证pip安装是否成功:输入:pip结果找不到文件。尝试输入:pip3-V或者pip3则说明已经安装成功了。2、pip的卸载:输入命令:sudopipuninstallpip然后输入密码后如下图:输入y,回车。即要卸载pip,再次用pip-V或者pip显示已经找不到文件,即卸载成功了。卸载不再做图片演示。注意:输入p

    2022年10月7日
    5
  • Landsat 8 地表反射率数据介绍—— Landsat 8 Surface Reflectance Tier 1

    Landsat 8 地表反射率数据介绍—— Landsat 8 Surface Reflectance Tier 1USGSLandsat8SurfaceReflectanceTier1该数据集是来自Landsat8OLI/TIRS传感器的经大气校正的表面反射率。图像包含4个可见光和一个近红外(VNIR)波段和2个短波红外(SWIR)波段两个热红外。经过正射校正后的表面反射率,以及2个热红外经过正交校正后的亮度温度这些数据已使用LaSRC进行了大气校正,包括使用CFMASK生成的云,阴影…

    2022年7月23日
    38

发表回复

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

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