在我的flex应用程序中我使用了一个有三个颜色的数据网格 第一列用于复选框itemRenderer和 其他两列是可编辑的。
我的要求是
现在当我从DB获取一些数据时,数据将填充在datagrid中,
1.填充数据后,应在所有行中禁用第一列 2.如果我在一行中单击第二列或第三列进行编辑..应启用第一列对应行中的复选框,并且复选框应准备好进行检查并取消选中..
我该怎么办? 这是我的代码
<mx:DataGrid x="46" y="135" dataProvider="{DetailsProvider}" width="836" height="349">
<mx:columns>
<mx:DataGridColumn headerText="Select" dataField="isSelect" itemRenderer="com.components.checkbox"/>
<mx:DataGridColumn headerText="First Name" dataField="fname"/>
<mx:DataGridColumn headerText="Second Name" dataField="sname"/></mx:columns></mx:DataGrid>
我希望这些细节足以理解我的问题 对此有任何想法..提前致谢..
答案 0 :(得分:1)
我正在为您提供我在单个DataGrid中使用ItemRenderer和ItemEditor创建的示例代码,您只需要创建一个名为d ComNS和ComCB的新mxml组件。只需创建我就可以获得示例代码。
主要mxml应用程序代码
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" horizontalAlign="center"
verticalAlign="middle" height="100%" width="100%">
<mx:Script>
<![CDATA[
public var arr:Array = new Array({isSelected:true,label:'ABC',score:'78',name:'ABC'},
{isSelected:true,label:'DEF',score:'50',name:'DEF'},
{isSelected:false,label:'GHI',score:'70',name:'GHI'},
{isSelected:false,label:'JKL',score:'80',name:'JKL'},
{isSelected:true,label:'TRE',score:'50',name:'MNO'});
public function dgCLG_dataChange():void
{
}
public function dgCLG_change():void
{
}
public function btnSubmit_click():void
{
dgCopy.dataProvider = dgCLG.dataProvider;
}
]]>
</mx:Script>
<mx:VBox height="100%" width="100%" horizontalAlign="center" verticalAlign="middle">
<mx:DataGrid id="dgCLG" dataProvider="{arr}" editable="true" dataChange="{dgCLG_dataChange();}" change="{dgCLG_change();}">
<mx:columns>
<mx:DataGridColumn headerText="" dataField="isSelected">
<mx:itemRenderer>
<mx:Component>
<mx:Box horizontalAlign="center" verticalAlign="middle" height="100%" width="100%">
<mx:Script>
<![CDATA[
override public function set data(value:Object):void
{
if(value != null)
{
super.data = value;
var temp:Object = value as Object;
chb.selected = temp.isSelected;
}
}
]]>
</mx:Script>
<mx:CheckBox id="chb"/>
</mx:Box>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
<mx:DataGridColumn headerText="Label" dataField="label" editable="false">
</mx:DataGridColumn>
<mx:DataGridColumn headerText="Marks" dataField="score" editable="true" itemEditor="ComNS" editorDataField="value">
</mx:DataGridColumn>
<mx:DataGridColumn dataField="name" headerText="Person" itemEditor="ComCB" editorDataField="value" editable="true">
</mx:DataGridColumn>
</mx:columns>
</mx:DataGrid>
<mx:Button id="btnSubmit" label="Click" click="{btnSubmit_click();}" />
<mx:DataGrid id="dgCopy" editable="false">
<mx:columns>
<mx:DataGridColumn headerText="CopyLabel" dataField="label" />
<mx:DataGridColumn headerText="CopyMarks" dataField="score" />
<mx:DataGridColumn headerText="CopyPerson" dataField="name" />
</mx:columns>
</mx:DataGrid>
</mx:VBox>
</mx:Application>
ComNS.mxml代码
<?xml version="1.0" encoding="utf-8"?>
<mx:NumericStepper xmlns:mx="http://www.adobe.com/2006/mxml" minimum="0" maximum="100">
</mx:NumericStepper>
ComCB.mxml代码
<?xml version="1.0" encoding="utf-8"?>
<mx:ComboBox xmlns:mx="http://www.adobe.com/2006/mxml" dataProvider="{arr}" selectedIndex="1" creationComplete="{c_complete();}" >
<mx:Script>
<![CDATA[
public var arr:Array = new Array({label:'ABC'},{label:'DEF'},{label:'GHI'},{label:'JKL'},{label:'MNO'})
public function c_complete():void
{
for(var i:int = 0; i < arr.length; i++)
{
if(arr[i].label == parentDocument.dgCLG.selectedItem.name)
{
this.selectedItem = arr[i];
}
}
}
]]>
</mx:Script>
</mx:ComboBox>
如果有任何查询只是评论我的答案......
答案 1 :(得分:0)
如果您实现IDropInListItemRenderer,您的渲染器将传递一个BaseListData对象,该对象除其他外,将包含对DataGrid的引用。通过对DataGrid的引用,您可以将其selectedItem与该呈现器的数据对象进行比较,以启用或禁用该复选框。
请注意,Checkbox应该已经实现了这个接口,所以理论上你应该能够通过几个调整来使用它。但是,Adobe没有正确实现它。在联机帮助中查看此页面的评论,了解如何修复http://livedocs.adobe.com/flex/3/html/help.html?content=celleditor_4.html。