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

Était-ce utile?

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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top