mx:Datagrid没有正确显示布尔值

时间:2011-07-08 12:21:01

标签: flex datagrid itemrenderer

我在使用datagrid itemRenderers时遇到了一些相当古怪的行为 首先,我按如下方式创建一个ArrayCollection:

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

然后我将它绑定到datagrid:

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

运行此操作时,如果布尔值== true,则数据网格仅显示具有正确itemRenderer的行。 对于boolean == false的行,它将显示一个空行。

我还想补充一点,在包装器对象中包装布尔值不会为我的用例剪切它,因为我将通过RPC调用接收到一个未包装的布尔值的ArrayCollection。

干杯

1 个答案:

答案 0 :(得分:3)

Flex SDK 3.6; DataGridBase的第1070-1071行是:

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

基本上,由于您的数据对象为false,因此会为listData发送空值。我猜这会导致链式反射,阻止渲染器渲染。值得庆幸的是,方法setupColumnItemRenderer受到保护,因此您可以继续扩展DataGrid。

我还注意到,渲染器中的数据更改事件似乎永远不会对dataProvider中的“false”项执行。这是出乎意料的。

我花了大约30分钟的时间通过代码来找到这条线,我不相信我的'答案'是100%。