Пользовательская сортировка с FastObjectListview не работает - PullRequest
1 голос
/ 19 января 2010

Привет, я использую FastObjectListview и теперь мне нужно отсортировать по 2 столбцам. Поэтому я попытался использовать пример, найденный на веб-сайте ObjectListview , но не могу заставить его работать.

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 Ответ

2 голосов
/ 23 января 2010

Это всегда проблема с документацией - она ​​никогда не бывает в курсе.Я исправлю документы.

Я полагаю, вы не можете получить доступ к своей переменной 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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...