.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(); 搞定。

您可能感兴趣的内容

作者: 可爱的猴子
原载: 可爱的猴子 的blog
版权所有。转载时必须以链接形式注明作者和原始出处及本声明。

发表评论

.net中的ListView排序“2 评论”

  1. 可爱的猴子 说:

    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]

  2. sanni 说:

    请问 猴子 我怎么对一个16进制数的列排序呢?
    就是这个列 里面的数都是 16进制的。
    谢谢

    [Reply]