assegnazione del comparatore a ListViewItemSorter
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
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>