0

ListView アイテムを 2 列目のコンテンツ (「オンライン」または「オフライン」のいずれか) で並べ替えたいと考えています。並べ替えはコード内の特定の 1 か所でのみ行われるため、ソリューションは柔軟である必要はありません。それ以上に、実装が簡単で、アプリケーションの残りの部分に大きな変更を必要としない必要があります。

IComparer を実装したクラスを作成し、listView.ListViewItemSorter に割り当てようとしましたが、うまくいきません。

コードサンプル:

class ChannelSorter : System.Collections.IComparer
{
    public int Compare(object a, object b)
    {
        if ((a as ListViewItem).SubItems[0].Text.CompareTo("Online") == 0)
            if ((b as ListViewItem).SubItems[0].Text.CompareTo("Online") == 0)
                return 0;
            else
                return -1;
        else if ((b as ListViewItem).SubItems[0].Text.CompareTo("Online") == 0)
            return 1;
        else
            return 0;
    }
}


// in constructor of Form1
listView1.ListViewItemSorter = new ChannelSorter();
4

2 に答える 2

1

OrderByメソッドで LINQ を使用できます。

リスト内のユーザーは、User[] 配列またはリスト、または列挙可能なものから来ていると思います。次に、OrderBY メソッドを使用して、新しい順序付きリストを取得します。

var currentUsers = new List<User>();
// Fill your users
// Super happy fun sorting time!
var sortedUsers = currentUsers.OrderBy(user => user.State);

user.State は現在の状態 (オンライン、オフライン) です。

于 2012-06-27T20:56:37.543 に答える
0

関数には次の1行のみを含める必要があります。

return (a as ListViewItem).SubItems[0].Text.CompareTo((b as ListViewItem).SubItems[0].Text)
于 2012-06-27T21:00:43.403 に答える