назначение компаратора для ListViewItemSorter - PullRequest
0 голосов
/ 30 апреля 2009

Я хочу отсортировать элемент управления ListView в C # на основе столбцов. Я создал 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 ]

1 голос
/ 30 апреля 2009

Общие IComparer<T> и неуниверсальные IComparer не могут быть преобразованы друг в друга.

Может быть, ваш ListViewItemComparer должен вместо этого реализовывать неуниверсальный IComparer?

0 голосов
/ 11 августа 2011

1001 * попробовать *

class ListViewItemComparer : IComparer

не

class ListViewItemComparer : IComparer<ListViewItem>
0 голосов
/ 30 апреля 2009

Я считаю, что классом сравнения должен быть I Comparer, not IComparer<type>. вот статья , которая может помочь, она использует SortDescription.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...