使用FastObjectListview的自定义排序不起作用

时间:2010-01-19 09:08:54

标签: c# .net winforms sorting listview

嘿,我正在使用FastObjectListview,现在我需要对2列进行排序。 所以我尝试使用我在the ObjectListview website上找到的示例,但我无法让它工作。

class MyCustomSortingDataSource : FastVirtualListDataSource
{ 
    override public void SortObjects(OLVColumn column, SortOrder order) { 
        // do some amazing sorting here 
        this.RebuildIndexMap(); // you must call this otherwise the control will not work properly 
    }; 
}; 
...
this.myFastObjectListView.DataSource = new MyCustomSortingDataSource(this.myFastObjectListView);

首先我添加了:

using BrightIdeasSoftware;

但该命名空间不包含FastVirtualListDataSource,它包含FastObjectListDataSource。

在FastObjectListDataSource中

但是没有要覆盖的SortObjects方法,有一个Sort方法,我想我应该覆盖它。

所以这就是我得到的而不是示例代码:

class MyCustomSortingDataSource : FastObjectListDataSource 
{
    public MyCustomSortingDataSource(FastObjectListView listView) 
        : base(listView) 
    {
    }

    public override void Sort(OLVColumn column, SortOrder sortOrder) 
    {
        base.Sort(column, sortOrder); 
        // do some amazing sorting here
        // base.ObjectList.Sort(new ModelObjectComparer(this.olvGroupCln, SortOrder.Ascending, column, sortOrder));
        this.RebuildIndexMap(); // you must call this otherwise the control will not work properly 
    }
}

我无法访问olvGroupCln,这是我需要排序的第一列,在对该列进行排序后,我需要对用户点击的列进行排序。

很高兴得到一些帮助。

提前致谢。

1 个答案:

答案 0 :(得分:2)

这始终是文档的问题 - 它永远不会是最新的。我会修复文档。

我猜您无法访问olvGroupCln变量,因为它位于表单本身上,您需要在分拣机中吗?是对的吗?

只需为自定义排序器提供一个属性即可保存要排序的列。每当您设置olvGroupCln时,也要在分拣机上设置属性。像这样的东西

class MyCustomSortingDataSource : FastObjectListDataSource
{
    public MyCustomSortingDataSource(FastObjectListView listView)
        : base(listView) { }

    public OLVColumn SortColumn {
        get { return this.sortColumn; }
        set { this.sortColumn = value; }
    }
    private OLVColumn sortColumn;

    public override void Sort(OLVColumn column, SortOrder sortOrder)
    {
        if (sortOrder != SortOrder.None) {
            ArrayList objects = (ArrayList)this.listView.Objects;
            objects.Sort(new ModelObjectComparer(this.SortColumn, SortOrder.Ascending, column, sortOrder));

        }
        this.RebuildIndexMap();
    }
}