我在使用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。
干杯
答案 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%。