2009-04-30 85 views
0

我想根据列对C#中的ListView控件进行排序。我已经创建ColumnClickEventHandler:分配比较器到ListViewItemSorter

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的。

有没有一种方法可以明确地将一个转换到另一个?或者只是做另一种排序?

在此先感谢

回答

1

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

也许你的ListViewItemComparer应该实现非通用IComparer而不是?

+0

你是对的。我忘了使用System.Collections(我只是System.Collections.Generic)。这就是为什么当我看到丢失IComparer <>类型时,我只是把它放在:P 感谢和快乐编程:) – kyrisu 2009-04-30 18:03:15

0

我认为,比较器类应该是我Comparer, not IComparer<type>here is an article可能有帮助,它使用SortDescriptions。

0

尝试

class ListViewItemComparer : IComparer 

class ListViewItemComparer : IComparer<ListViewItem>