Flex - сортировка столбца таблицы данных по метке строки - PullRequest
1 голос
/ 18 августа 2010

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

В основном у меня есть таблица данных со столбцом с именем 'system'. Система представляет собой int , который представляет id объекта в другой таблице. Я использовал 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 ]

1 голос
/ 19 августа 2010

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

0 голосов
/ 19 августа 2010

Способ работы 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);

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

...