Как изменить dataField на лету?
У меня есть dataGrid, который имеет несколько столбцов, эти столбцы обычно имеют фиксированный dataField, все работает нормально.
Однако при особых обстоятельствах мне нужно изменить это поле данных на другое, но я не уверен, как это сделать.
Я попытался запечатлеть момент, когда данные заполняются, каким-то образом перехватить поле данных и изменить его на тот, который я хочу... но пока не повезло.
Любая идея?.
1 ответ
В зависимости от того, что именно вы пытаетесь сделать, я могу придумать три способа сделать это.
1) Если вы пытаетесь поменять весь столбец за раз (например, кнопка, чтобы выбрать столбец для отображения), вы можете установить значения полей dataField и headerText в GridColumn:
<s:GridColumn id="fieldToChange" dataField="name" headerText="Name">
...
protected function changeToRank(event:MouseEvent):void
{
fieldToChange.dataField = "rank";
fieldToChange.headerText = "Rank";
}
2) Как и выше, если вы используете состояния, вы можете указать dataField и headerText для каждого состояния:
<s:GridColumn dataField.nameState="name" dataField.rankState="rank" ...>
3) Если вы хотите изменить то, что отображается для одной строки на основе некоторого критерия элемента данных, вы можете использовать labelFunction, чтобы установить все, что вы хотите отобразить.
<s:GridColumn labelFunction="nameOrRank" ...>
...
protected function nameOrRank(item:Object):String
{
if (item.foo == xyzzy)
return item.name;
else
return item.rank;
}