mx: Datagrid неправильно отображает логические значения - PullRequest
0 голосов
/ 08 июля 2011

Я испытываю довольно странное поведение с сеткой данных itemRenderers.Сначала я создаю коллекцию ArrayCollection следующим образом:

[Bindable]
private var myBooleans:ArrayCollection = new ArrayCollection([false,true]);

, а затем привязываю ее к сетке данных:

<mx:DataGrid dataProvider="{myBooleans}" width="100%" height="100%">
    <mx:columns>
        <mx:DataGridColumn 
            xmlns:mx="library://ns.adobe.com/flex/mx"
            headerText="Value"
            editorDataField="selected"
            rendererIsEditor="true"
            itemRenderer="mx.controls.CheckBox"
            >
        </mx:DataGridColumn>
    </mx:columns>
</mx:DataGrid>

При выполнении этой сетки данных отображается только строка с правильным itemRendererесли логическое == правда.Для строки, где логическое == false, будет отображаться пустая строка.

Я также хотел бы добавить, что упаковка логического объекта в объект-обертку не обрезает его для моего варианта использования, так как я получуArrayCollection развернутых логических значений посредством вызова RPC.

Cheers

1 Ответ

3 голосов
/ 08 июля 2011

Flex SDK 3.6;Строка 1070-1071 объекта DataGridBase выглядит следующим образом:

    if (item is IDropInListItemRenderer)
        IDropInListItemRenderer(item).listData = data ? rowData : null;

По сути, поскольку ваш объект данных имеет значение false, для listData отправляются нулевые значения.Я предполагаю, что это вызывает отклонение цепочки, которое препятствует рендерингу.К счастью, метод setupColumnItemRenderer защищен, поэтому вы можете попробовать расширить DataGrid.

Я также заметил, что событие изменения данных в средстве визуализации никогда не выполняется для «ложных» элементов в dataProvider.Это неожиданно.

Мне понадобилось ~ 30 минут, чтобы пройти по коду, чтобы найти эту строку, и я не уверен, что у меня есть «ответ» на 100%.

...