按第二列排序Windows.Forms.ListView

时间:2012-06-27 20:49:09

标签: c# winforms listview sorting icomparer

我想按第二列的内容(可以是“在线”或“离线”)对ListView项目进行排序。排序只在代码中的一个特定位置进行,因此解决方案不必具有灵活性。更重要的是,它应该易于实施,并且不需要对其余应用程序进行重大更改。

我尝试使类实现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();

2 个答案:

答案 0 :(得分:1)

您可以使用OrderBy方法使用LINQ:

我认为列表中的用户来自User []数组或List,或任何Enumerable。然后,您只需使用OrderBY方法获取新的有序List:

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

其中user.State是其当前状态(在线,离线)

答案 1 :(得分:0)

您的功能应该只包含一行:

return (a as ListViewItem).SubItems[0].Text.CompareTo((b as ListViewItem).SubItems[0].Text)