首页 > 资料收集 > ListView 点击列标题 自动排序 【转】

ListView 点击列标题 自动排序 【转】

2009年8月8日 eking 发表评论 阅读评论

1.创建一个新的C#项目,窗体Form1会被默认创建。2.向窗体添加一个ListView控件,3.在Form1.cs中添加下面的代码:
private ListViewColumnSorter lvwColumnSorter;
4.将下面的代码粘贴到InitializeComponent()函数中的最后
// 创建一个ListView排序类的对象,并设置listView1的排序器
lvwColumnSorter = new ListViewColumnSorter();
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.listFiles.Sort();
7.向项目中添加一个类
8.用下面的代码替换全部系统生成的代码
using System.Collections;
using System.Windows.Forms;

///
/// 继承自IComparer
///
public class ListViewColumnSorter : IComparer
{
///
/// 指定按照哪个列排序
///
private int ColumnToSort;
///
/// 指定排序的方式
///
private SortOrder OrderOfSort;
///
/// 声明CaseInsensitiveComparer类对象,

private CaseInsensitiveComparer ObjectCompare;

///
/// 构造函数
///
public ListViewColumnSorter()
{
// 默认按第一列排序
ColumnToSort = 0;

// 排序方式为不排序
OrderOfSort = SortOrder.None;

// 初始化CaseInsensitiveComparer类对象
ObjectCompare = new CaseInsensitiveComparer();
}

///
/// 重写IComparer接口.
///
///
要比较的第一个对象///
要比较的第二个对象/// 比较的结果.如果相等返回0,如果x大于y返回1,如果x小于y返回-1
public int Compare(object x, object y)
{
int compareResult;
ListViewItem listviewX, listviewY;

// 将比较对象转换为ListViewItem对象
listviewX = (ListViewItem)x;
listviewY = (ListViewItem)y;

// 比较
compareResult = ObjectCompare.Compare(listviewX.SubItems.Text,listviewY.SubItems.Text);

// 根据上面的比较结果返回正确的比较结果
if (OrderOfSort == SortOrder.Ascending)
{
// 因为是正序排序,所以直接返回结果
return compareResult;
}
else if (OrderOfSort == SortOrder.Descending)
{
// 如果是反序排序,所以要取负值再返回
return (-compareResult);
}
else
{
// 如果相等返回0
return 0;
}
}

///
/// 获取或设置按照哪一列排序.
///
public int SortColumn
{
set
{
ColumnToSort = value;
}
get
{
return ColumnToSort;
}
}

///
/// 获取或设置排序方式.
///
public SortOrder Order
{
set
{
OrderOfSort = value;
}
get
{
return OrderOfSort;
}
}

}
9.保存、编译并执行程序
10.点击列头测试

From MicroSoft.com:
http://support.microsoft.com/default.aspx?scid=kb;EN-US;319401

Popularity: 5% [?]

你可能对下面的内容也感兴趣

    分类: 资料收集 标签: 阅读:531
    1. 本文目前尚无任何评论.
    1. 本文目前尚无任何 trackbacks 和 pingbacks.

    3718150474633154929112424204136344840324513627301092612313516391742725322194423144338215828