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);
По своему опыту я обнаружил, что сортировка выполняется очень быстро, однако ваш набор записей немного больше, чем обычно загружается в память за один раз.