我有一个ObjectListView
填充了一些数据。当用户单击按钮时,我会进行一些数据分析,并且需要根据我的分析结果对ObjectListView
的行进行排序 - 某些行应位于视图的顶部,有些行应遵循下一步。
此排序是一次性排序 - 它不基于视图的任何列,下次分析结果可能完全不同。
首先,我尝试了最基本的情况:我只需要在视图顶部放置一些行。我检查了这个类似的问题:
Custom Sorting with ObjectListView
我写了这段代码:
SortDelegate prevDelegate = myListView.CustomSorter;
IComparer prevComparer = myListView.ListViewItemSorter;
myListView.CustomSorter = delegate(OLVColumn column, SortOrder order)
{
myListView.ListViewItemSorter = new MyComparer(specialItemsList);
};
myListView.Sort();
myListView.ListViewItemSorter = prevComparer;
myListView.CustomSorter = prevDelegate;
,其中
class MyComparer : IComparer
{
private readonly List<string> specialItemsList;
public SetPrivilegeComparer(List<string> specialItemsList)
{
this.specialItemsList= specialItemsList;
}
public int Compare(object xobj, object yobj)
{
if (!(xobj is MyListItem && yobj is MyListItem))
return 0;
MyListItem x = (MyListItem )xobj;
MyListItem y = (MyListItem )yobj;
if (specialItemsList.Contains(x.strVal) && specialItemsList.Contains(y.strVal))
{
return 0;
}
if (!specialItemsList.Contains(x.strVal) && !specialItemsList.Contains(y.strVal))
{
return 0;
}
if (specialItemsList.Contains(x.strVal) && !specialItemsList.Contains(y.strVal))
{
return 1;
}
if (!specialItemsList.Contains(x.strVal) && specialItemsList.Contains(y.strVal))
{
return -1;
}
return 0;
}
}
当我运行上面的代码时没有任何问题,永远不会调用Compare
方法。我研究过http://objectlistview.sourceforge.net/cs/recipes.html#how-can-i-do-some-fancy-sorting,但我可能不理解CustomSorter
和ListViewItemSorter
的诀窍 - 这两个类的职责是什么?谢谢你的任何想法!