Flex - сортировка столбца таблицы данных по метке строки

Я создаю таблицу, которая отображает информацию из базы данных MySQL, я использую внешние ключи повсеместно для перекрестных ссылок на данные.

По сути, у меня есть сетка данных со столбцом с именем "система". Система представляет собой целое число, которое представляет идентификатор объекта в другой таблице. Я использовал lableFunction для перекрестной ссылки на два и переименования столбца. Но теперь сортировка не работает, я понимаю, что вы должны создать собственную функцию сортировки. Я снова попытался сослаться на две таблицы, но для сортировки 1200 строк требуется ~ 30 секунд. Теперь я просто не знаю, что мне делать дальше.

Есть ли способ получить доступ к метке поля столбцов внутри функции сортировки?

public function order(a:Object,b:Object):int
{
    var v1:String = a.sys;
    var v2:String = b.sys;
    if ( v1 < v2 ){
        trace(-1);
        return -1;
    }else if ( v1 > v2 ){
        trace(1);
        return 1;
    }else {
        trace(0);
        return 0;
    }
}

2 ответа

Решение

Один из способов справиться с этим - просмотреть полученные вами объекты и добавить метку в качестве свойства для каждого из них на основе идентификатора с перекрестными ссылками. Затем вы можете указать свойство метки для отображения в столбце таблицы данных вместо использования функции метки. Таким образом, вы получите сортировку, как вы ожидаете, вместо того, чтобы создавать собственную функцию сортировки.

То, как работают DataGrids и другие списочные классы, - это использование itemRenderers. Средства визуализации создаются только для данных, отображаемых на экране. В большинстве случаев в вашем dataProvider намного больше данных, чем на экране.

Попытка сортировки данных на основе данных, отображаемых в dataGrid, скорее всего, не даст желаемых результатов.

Но нет причины, по которой вы не можете вызывать одну и ту же функцию метки для ваших объектов данных в sortFunction.

Одним из способов является использование функции itemToLabel dataGrid:

var v1:String = dataGrid.itemToLabel(a);
var v2:String = dataGrid.itemToLabel(b);

Второй способ - просто явно вызвать labelFunction:

var v1:String = labelFunction(a);
var v2:String = = labelFunction(b);

По своему опыту я обнаружил, что сортировка выполняется очень быстро, однако ваш набор записей немного больше, чем обычно загружается в память за один раз.

Другие вопросы по тегам