1.创建一个新的C#项目,窗体Form1会被默认创建。
2.向窗体添加一个ListView控件,
3.在Form1.cs中添加下面的代码:
privateListViewColumnSorterlvwColumnSorter;
4.将下面的代码粘贴到InitializeComponent()函数中的最后
//创建一个ListView排序类的对象,并设置listView1的排序器
lvwColumnSorter=newListViewColumnSorter();
this.listView1.ListViewItemSorter=lvwColumnSorter;
5. 向listView1中添加行,代码略
6.在listView1的ColumnClick事件中添加以下代码:
//检查点击的列是不是现在的排序列.
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;
}
//用新的排序方法对ListView排序
this.listview1.Sort();
7.向项目中添加一个类
8.用下面的代码替换全部系统生成的代码
usingSystem.Collections;
usingSystem.Windows.Forms;
///<summary>
///继承自IComparer
///</summary>
publicclassListViewColumnSorter:IComparer
{
///<summary>
///指定按照哪个列排序
///</summary>
privateintColumnToSort;
///<summary>
///指定排序的方式
///</summary>
privateSortOrderOrderOfSort;
///<summary>
///声明CaseInsensitiveComparer类对象,
///参见ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfSystemCollectionsCaseInsensitiveComparerClassTopic.htm
///</summary>
privateCaseInsensitiveComparerObjectCompare;
///<summary>
///构造函数
///</summary>
publicListViewColumnSorter()
{
//默认按第一列排序
ColumnToSort=0;
//排序方式为不排序
OrderOfSort=SortOrder.None;
//初始化CaseInsensitiveComparer类对象
ObjectCompare=newCaseInsensitiveComparer();
}
///<summary>
///重写IComparer接口.
///</summary>
///<paramname="x">要比较的第一个对象</param>
///<paramname="y">要比较的第二个对象</param>
///<returns>比较的结果.如果相等返回0,如果x大于y返回1,如果x小于y返回-1</returns>
publicintCompare(objectx,objecty)
{
intcompareResult;
ListViewItemlistviewX,listviewY;
//将比较对象转换为ListViewItem对象
listviewX=(ListViewItem)x;
listviewY=(ListViewItem)y;
//比较
compareResult=ObjectCompare.Compare(listviewX.SubItems[ColumnToSort].Text,listviewY.SubItems[ColumnToSort].Text);
//根据上面的比较结果返回正确的比较结果
if(OrderOfSort==SortOrder.Ascending)
{
//因为是正序排序,所以直接返回结果
returncompareResult;
}
elseif(OrderOfSort==SortOrder.Descending)
{
//如果是反序排序,所以要取负值再返回
return(-compareResult);
}
else
{
//如果相等返回0
return0;
}
}
///<summary>
///获取或设置按照哪一列排序.
///</summary>
publicintSortColumn
{
set
{
ColumnToSort=value;
}
get
{
returnColumnToSort;
}
}
///<summary>
///获取或设置排序方式.
///</summary>
publicSortOrderOrder
{;http://support.microsoft.com/kb/319401
set
{
OrderOfSort=value;
}
get
{
returnOrderOfSort;
}
}
}
原文http://support.microsoft.com/kb/319401
分享到:
相关推荐
在C#中实现对ListView点击列标题自动排序功能.doc
c# listview实现按多列排序.doc
WPF 使用 ListView 排序的程序例子
一个用来排序ListView的类 以下需要在Listview的标题单击事件中加入 Private m_SortingColumn As ColumnHeader Private Sub ListView1_ColumnClick(ByVal sender As Object, ByVal e As System.Windows.Forms....
精彩编程与编程技巧-对ListView中的列排序 ...
Listview实例排序 当点击ListView的列头时,对ListView排序
带箭头排序的ListView示例,排序时按照各列设置的数据类型进行
很多时候我们需要listview中的某一列按照数值大小来排序,而不是ASCII
在Listview排序,实现按某一列的数据进行排序。列表数据排序。
VB6 ListView 排序 数字.。
这个文件中包含了一个ListView控件几种操作的例子,包括对ListView控件的列排序(文本排序,数字排序和图标排序)和动态隐藏列几种功能的使用。
可以实现列排序的ListView,使用接口实现.
#endregion//列头点击事件 private void lvw_ColumnClick(object sender, ColumnClickEventArgs e) { string Asc = ((char)0x25bc).ToString().PadLeft(4, ' '); string Des = ((char)0x25b2).ToString()....
浅谈WinForm下ListView的扩展(一):单击列头实现排序.doc
C#对数据库记录进行排序查询,仅包括程序部分及源代码,数据库需要根据代码手动还原,可以按工资进行升序或降序排列,然后将结果显示在ListView中……
双列共存的ListView,方便排序,下载既用,包含截图示意。
listview排序VC++, VC编写的listview按列排序
1. 自定义CMyListView,继承自CListView, 实现点击表头进行该列排序以及固定某些列宽的功能。使用时直接继承此View即可。 2. 自定义CMyListCtrl, 继承自CMFCListCtrl, 同样实现上述功能,用于listctrl控件。使用...