2010-08-18 2 views
1

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

В основном у меня есть datagrid с колонкой с именем 'system.' Система представляет собой int, который представляет id объекта в другой таблице. Я использовал lableFunction, чтобы перекрестно ссылаться на два и переименовать столбец. Но теперь сортировка не работает, я понимаю, что вам нужно создать пользовательскую функцию сортировки. Я попытался перекрестно ссылаться на две таблицы снова, но это занимает ~ 30 секунд для сортировки 1200 строк. Теперь я просто не знаю, что я должен попробовать дальше.

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

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; 
    } 
}

ответ

1

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

+0

Я думаю, что это то, что мне нужно сделать. Я пытался хранить все данные отдельно, но я не думаю, что это произойдет. Я попробую. – noazark

+0

Спасибо за ясновидение, все выглядит так хорошо. В принципе, я сохраняю все таблицы отдельно в модели (используя роботы), когда когда-либо обновляется таблица, она вызывает метод добавления поля с перекрестными ссылками в строку таблицы. Я не замечаю многого (если есть) дополнительного задержек. Так что еще раз спасибо. – noazark

0

Способ использования DataGrids и других классов, основанных на списке, с помощью itemRenderers. Renderers создаются только для данных, которые отображаются на экране. В большинстве случаев в вашем 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); 

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

Смежные вопросы