将比较器分配给ListViewItemSorter

时间:2009-04-30 17:39:43

标签: c# sorting listview

我想基于列对C#中的ListView控件进行排序。我创建了ColumnClickEventHandler:

    private void contactsListView_ColumnClick(object sender, ColumnClickEventArgs e)
    {
        contactsListView.ListViewItemSorter = new ListViewItemComparer(e.Column);
        contactsListView.Sort();
    }

ListViewItemComparer类如下所示:

   class ListViewItemComparer : IComparer<ListViewItem>
{
    private int col;
    public ListViewItemComparer()
    {
        col = 0;
    }
    public ListViewItemComparer(int column)
    {
        col = column;
    }
    public int Compare(ListViewItem x, ListViewItem y)
    {
        int returnVal = -1;
        returnVal = String.Compare(x.SubItems[col].Text, y.SubItems[col].Text);
        return returnVal;
    }
}

此代码无法编译导致contactsListView.ListViewItemSorter为IComparer类型,类ListViewItemComparer为IComparer。

有没有办法明确地将一个投射到另一个?或者只是按照另一种方式进行排序?

提前致谢

3 个答案:

答案 0 :(得分:1)

通用IComparer<T>和非通用IComparer不可相互转换。

也许您的ListViewItemComparer应该实现非通用的IComparer

答案 1 :(得分:0)

我相信比较者类应该是I Comparer, not IComparer<type>here is an article可能有所帮助,它使用SortDescriptions。

答案 2 :(得分:0)

class ListViewItemComparer : IComparer

class ListViewItemComparer : IComparer<ListViewItem>