如何获取DataGrid中ComboBox的值
虽然这可能是一个简单的问题,但我有一段时间想出解决方案。如何获取DataGrid中ComboBox的值
我有一个DataGrid组合框作为ItemRenderer用于我的一列。当用户选择一行时,我想获取所选行的ComboBox的选定值。
编辑:我应该提到myData中的dataField2_Array属性实际上是一个Array是ComboBox的dataProvider。 myData中的每个对象在该数组中可以有完全不同的值,因此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>
<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;
现在,当您的数据发生变化时,它将保存数据。你点击按钮将这个值存储在一个行对象中。
[Bindable] public var rows:Object = new Object();
rows=Application.application.whateverStuff;
当您发送值回数据库,将所有与该行对象一起。
更新:
后,我看了上一还击你的评论,我才知道,每个组合框有不同的选择。你应该早点提到它。
当您单击选定的行时,您应该能够收集该行的ID,这将确保只有该行的ID在数据库中得到更新,无论您是否更新其他组合框行。
一旦您选择了一行,单击并使用警报或跟踪验证您选择了哪个行ID,然后通过事件分派器单独发送该行值。
您DataGrid的单击事件添加了一个名为myGrid_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;
}
}
}
感谢您的回应。我可能用我的最初的问题措辞不佳,因为我的情况与平均水平不同。如果存储在myData中的对象只包含为ComboBox选择的值,那么您建议的内容看起来会有效。在我的情况下,我的ArrayCollection中的每个对象中的DataField2_Array属性实际上都包含一个我用作comboBox的dataProvider的Array。 DataGrid中每行的ComboBox可以有一组完全不同的选项可供选择。 – 2010-05-14 16:41:39
感谢您的答复葡萄酒,但我不是很在这里跟随你。这看起来像它会在我的数据网格中显示组合框,但是如何在选择数据网格行时获取组合框的选定值? 例如,如果有人双击一行来选择它,我想获得该行中组合框的选定值。 – 2010-05-13 15:20:20
我已更新代码,请告知我是否需要更多说明或帮助 – Thalaivar 2010-05-14 11:15:12
因此,如果我有这个权利,每次用户从ComboBox中选择一个值,它都会更新应用程序级别的whateverStuff变量。当选择一行时,它会去抓取存储在whateverStuff变量中的数据,并传递给我用来更新数据库的任何方法。如果用户从一行中的ComboBox中选择一个值,然后单击以选择一个完全不同的行,会发生什么?它会发送更改为数据库的ComboBox的数据还是发送所选行中ComboBox的数据? – 2010-05-14 16:48:33