使用ObjectListView进行一次性排序

时间:2015-10-13 07:13:35

标签: c# sorting listview objectlistview

我有一个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,但我可能不理解CustomSorterListViewItemSorter的诀窍 - 这两个类的职责是什么?谢谢你的任何想法!

0 个答案:

没有答案