質問

列に基づいて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です。

一方を他方に明示的にキャストする方法はありますか?または、単に別の方法でソートしますか?

事前に感謝

役に立ちましたか?

解決

ジェネリックIComparer<T>と非ジェネリックIComparerは、相互に変換できません。

多分あなたのListViewItemComparerは非ジェネリック<=>を代わりに実装すべきでしょうか?

他のヒント

比較クラスはI Comparer, not IComparer<type>でなければなりません。 ここに役立つ記事があります。 SortDescriptions。

試用

class ListViewItemComparer : IComparer

ない

class ListViewItemComparer : IComparer<ListViewItem>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top