affectation du comparateur à ListViewItemSorter
Question
Je souhaite trier un contrôle ListView en C # en fonction de colonnes. J'ai créé ColumnClickEventHandler:
private void contactsListView_ColumnClick(object sender, ColumnClickEventArgs e)
{
contactsListView.ListViewItemSorter = new ListViewItemComparer(e.Column);
contactsListView.Sort();
}
Où la classe ListViewItemComparer ressemble à ceci:
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;
}
}
Ce code ne sera pas compilé car contactsListView.ListViewItemSorter est de type IComparer et la classe ListViewItemComparer est IComparer.
Existe-t-il un moyen de lancer explicitement l'un sur l'autre? Ou faites-vous simplement un autre tri?
Merci d'avance
La solution
Le générique IComparer<T>
et le non-générique IComparer
ne sont pas convertibles l'un de l'autre.
Peut-être que votre ListViewItemComparer
devrait implémenter le non-générique <=> à la place?
Autres conseils
Je crois que la classe de comparaison doit être I Comparer, not IComparer<type>
.
voici un article qui pourrait vous aider, qu'il utilise les SortDescriptions.
essayer
class ListViewItemComparer : IComparer
pas
class ListViewItemComparer : IComparer<ListViewItem>