【问题标题】:Custom sort with FastObjectListview is not working使用 FastObjectListview 的自定义排序不起作用
【发布时间】:2011-01-06 17:32:59
【问题描述】:

嘿,我正在使用 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,在对该列进行排序后,我需要对用户单击的列进行排序。

我们将不胜感激。

提前致谢。

【问题讨论】:

    标签: c# .net winforms sorting listview


    【解决方案1】:

    这一直是文档的问题——它从来都不是最新的。我会修复文档。

    我猜您无法访问您的 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();
        }
    }
    

    【讨论】:

    • 非常感谢,它成功了^^。真的不能感谢你,完全让我开心。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    相关资源
    最近更新 更多