嘿,我正在使用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,这是我需要排序的第一列,在对该列进行排序后,我需要对用户点击的列进行排序。
很高兴得到一些帮助。
提前致谢。
答案 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();
}
}