.net中的ListView排序
前段时间安排一个新人编写了一个小程序(使用C#.net,winform的程序),其中有一个ListView中的项要进行排序,新人是完成了排序的功能。但是我一看可吓了我一跳,她竟然使用了一个三重循环来搞定的,而且还有些bug。哎!新人就是新人,能编写出就已经很不错了,没法对她要求太高。我把那部分排序的代码修改了一下。拿出来共享。
ListView有个存取元是获取或设置用于控件的排序比较器(ListViewItemSorter),此存取元返回IComparer接口。我们只要重新定义这个ListViewItemSorter就可以对它包含的项目进行排序了。
///
/// [可爱的猴子] 排序接口(只可对整数列排序)
///
class MonkeyListViewItemComparer : IComparer
{
private int col;
public MonkeyListViewItemComparer()
{
this.col = 0;
}
public MonkeyListViewItemComparer(int col)
{
this.col = col;
}
public int Compare(object x, object y)
{
int a = int.Parse(((ListViewItem)x).SubItems[col].Text);
return a.CompareTo(int.Parse(((ListViewItem)y).SubItems[col].Text));
}
}
最后,新建完ListView后,重新定义一下它的排序接口listView1.ListViewItemSorter = new MonkeyListViewItemComparer(); 搞定。


2007-05-23
sanni 说:
2007-05-21
请问 猴子 我怎么对一个16进制数的列排序呢?
就是这个列 里面的数都是 16进制的。
谢谢
你可以使用下面代码,增加System.Globalization.NumberStyles.HexNumber
public int Compare(object x, object y)
{
uint a = uint.Parse(((ListViewItem)x).SubItems[col].Text, System.Globalization.NumberStyles.HexNumber);
return a.CompareTo(uint.Parse(((ListViewItem)y).SubItems[col].Text, System.Globalization.NumberStyles.HexNumber));
}
[Reply]
2007-05-21
请问 猴子 我怎么对一个16进制数的列排序呢?
就是这个列 里面的数都是 16进制的。
谢谢
[Reply]