如果你在DataGrid里面加入checkbox,不做任何处理。当你滚动你的DataGrid的时候就会发现,checkbox的选中状态会错乱。这就涉及到数据绑定的问题。原因是itemRenderer里的控件是对整个DataGrid共用的,你不知道某个组件会和哪一行的数据绑定。所以,你必须做事件监听(FlexEvent.DATA_CHANGE)。
例子如下:
- <mx:DataGrid width="100%" height="100%" horizontalCenter="0" verticalCenter="0" >
- <mx:columns>
- <mx:DataGridColumn headerText="选择">
- <mx:itemRenderer>
- <mx:Component>
- <mx:Box horizontalAlign="center" creationComplete="init()">
- <mx:Script><![CDATA[
- import mx.events.FlexEvent;
- function init():void
- {
- this.addEventListener(FlexEvent.DATA_CHANGE,doChange)
- }
- function doChange(e:Event):void
- {
- keyCheck.selected=data.choose;
- }
- ]]></mx:Script>
- <mx:CheckBox id="keyCheck" click="parentDocument.onChangeCheck(event,data.key)" />
- </mx:Box>
- </mx:Component>
- </mx:itemRenderer>
- </mx:DataGridColumn>
- <mx:DataGridColumn headerText="名称" dataField="name"/>
- <mx:DataGridColumn headerText="类型" dataField="type"/>
- </mx:columns>
- </mx:DataGrid>
事件监听后,当数据绑定发生变化的时候会执行doChange函数,重新刷新选中状态。