2009-04-30 64 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>