سؤال

وأريد أن فرز تحكم 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.

هل هناك طريقة للادلاء صراحة واحدة إلى أخرى؟ أو مجرد القيام فرز طريقة أخرى؟

وشكرا مقدما

هل كانت مفيدة؟

المحلول

ووIComparer<T> عام وIComparer غير عام ليست قابلة للتحويل عن بعضها البعض.

وربما ListViewItemComparer الخاص بك ينبغي أن تنفذ IComparer غير عام بدلا من ذلك؟

نصائح أخرى

وأعتقد أن الطبقة المقارن يجب أن يكون IComparer, not IComparer<type>. هنا مقال التي قد تساعد، ويستخدم وSortDescriptions.

والمحاولة

class ListViewItemComparer : IComparer

وليس

class ListViewItemComparer : IComparer<ListViewItem>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top