虽然这可能是一个简单的问题,但我有一段时间想出一个解决方案。
我有一个DataGrid,其中一个ComboBox作为我的一个列的ItemRenderer。当用户选择一行时,我想获得所选行的ComboBox选定值。
编辑:我应该提到myData中的dataField2_Array属性实际上是一个Array,它是ComboBox的dataProvider。 myData中的每个对象在该Array中的值可能完全不同,因此DataGrid每行中的ComboBox可以有完全不同的选项供选择。
有什么建议吗?
一些示例代码:
<mx:DataGrid id="myGrid"
dataProvider="{myData}">
<mx:columns>
<mx:DataGridColumn headerText="Column 1" dataField="dataField1" />
<mx:DataGridColumn headerText="Column 2" dataField="dataField2_Array">
<mx:itemRenderer>
<mx:Component>
<mx:HBox paddingLeft="5">
<mx:ComboBox id="myComboBox" dataProvider="{data.dataField2_Array}" />
</mx:HBox>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
</mx:columns>
</mx:DataGrid>
答案 0 :(得分:2)
<mx:DataGrid ="MyDataGrid">
<mx:columns>
<mx:DataGridColumn headerText="Resource" width="200" itemRenderer="com.myClasses.myGridDropdownRenderer"/>
</mx:columns>
</mx:DataGrid>
这是您的datagrid的itemRenderer。
<?xml version="1.0" encoding="utf-8"?>
<mx:ComboBox prompt="Please select a Rating" change="stuffChanged()" dataProvider="{data.dataField2_Array}"
xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
import flash.events.Event;
import mx.controls.Alert;
import mx.core.Application;
import mx.collections.ArrayCollection;
override public function set data( value:Object ) : void {
super.data = value;
}
public function stuffChanged():void{
var myListData:DataGridListData = DataGridListData(listData);
var r:int=myListData.rowIndex;
var c:int=myListData.columnIndex;
//Application.application.whateverStuff[r+1][c]=this.value;
Application.application.whateverStuff[r+1][c]=
this.selectedItem.data;
}
]]>
</mx:Script>
</mx:ComboBox>
这将在您的主应用程序中保存此值。
[Bindable] public var whateverStuff:ArrayCollection;
现在,当您的数据发生变化时,它会保存数据。单击该按钮可将此值存储在rows对象中。
[Bindable] public var rows:Object = new Object();
rows=Application.application.whateverStuff;
当您将值发送回数据库时,请同时发送此行对象。
<强>更新强>
在我阅读了您之前的反击意见后,我发现每个组合框都有不同的选项。你应该早点提到它。
当您单击所选行时,您应该能够收集行的ID,这将确保在数据库中只更新该行的ID,即使您更新其他行的组合框也是如此。
选择行后,单击并验证使用“警报”或“跟踪”选择的行ID,然后通过事件调度程序单独发送该行值。
答案 1 :(得分:1)
将一个名为myGrid_click的函数添加到DataGrid的click事件中:
<mx:DataGrid id="myGrid" dataProvider="{myData}" click="myGrid_click(event)" >
在这个函数中,存储网格的selectedIndex并使用它来从dataProvider中获取对象(假设它是一个MyObjects数组,我们对这些MyObjects的dataField2属性感兴趣):
public function myGrid_click(event:MouseEvent):void {
var index:int = myGrid.selectedIndex;
var obj:MyObject = myData[index];
var value:String = obj.dataField2;
}
如果通常情况下,对象不存储实际值,并且只是将索引存储到查找表(dataField2_Array?),则编写for循环以迭代dataField2_Array查找该值(actualValue) )并将其分配给先前声明的更大范围的变量(selectedRowComboBoxValue):
public function myGrid_click(event:MouseEvent):void {
var index:int = myGrid.selectedIndex;
var obj:MyObject = myData[index];
var value:int = obj.dataField2;
for (var i:int = 0; i < dataField2_Array.length; i++) {
if (value == dataField2_Array[index].id) {
selectedRowComboBoxValue = dataField2_Array.actualValue;
break;
}
}
}