我想按第二列的内容(可以是“在线”或“离线”)对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();
答案 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)