Domanda

Voglio ordinare un controllo ListView in C # basato su colonne. Ho creato ColumnClickEventHandler:

    private void contactsListView_ColumnClick(object sender, ColumnClickEventArgs e)
    {
        contactsListView.ListViewItemSorter = new ListViewItemComparer(e.Column);
        contactsListView.Sort();
    }

Dove la classe ListViewItemComparer si presenta così:

   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;
    }
}

Questo codice non verrà compilato perché contattiListView.ListViewItemSorter è di tipo IComparer e la classe ListViewItemComparer è IComparer.

Esiste un modo per trasmettere esplicitamente l'una all'altra? O semplicemente fare l'ordinamento in un altro modo?

Grazie in anticipo

È stato utile?

Soluzione

Il generico IComparer<T> e il non generico IComparer non sono convertibili l'uno dall'altro.

Forse il tuo ListViewItemComparer dovrebbe invece implementare il <=> non generico?

Altri suggerimenti

Credo che la classe di confronto debba essere I Comparer, not IComparer<type>. ecco un articolo che potrebbe aiutare, utilizza SortDescriptions.

try

class ListViewItemComparer : IComparer

non

class ListViewItemComparer : IComparer<ListViewItem>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top