使用列索引和行索引获取flex datagrid单元格值

时间:2013-07-02 20:59:16

标签: flex datagrid row recovery

我正在使用flex进行应用程序但是我在从其中一列中有一个复选框的数据网格中恢复数据时遇到了一些麻烦,问题是我无法使用函数selectedIndex或selectedItem,因为它们用于保存已检查的项目。

有没有办法使用列和行索引恢复数据网格信息?类似的东西:

MyDataGrid [row] [column]或MyDataProvider [row] [column]或任何函数组合,只允许我使用行和列恢复信息。

由于

2 个答案:

答案 0 :(得分:4)

如果您只想使用row和col索引获取数据网格的单元格值,则可以扩展DataGrid组件并添加一个简单函数。

这是working example

它看起来像这样:

// CustomDataGrid

<?xml version="1.0" encoding="utf-8"?>
<s:DataGrid xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark" 
        xmlns:mx="library://ns.adobe.com/flex/mx" 
        width="400" height="300">
<fx:Script>
    <![CDATA[
        import spark.components.gridClasses.GridColumn;

        public function getElementAt(row:int, col:int):Object
        {
            if (this.dataProvider.length < row + 1 || this.columns.length < col + 1)
                return null;
            else
                return this.dataProvider.getItemAt(row)[(this.columns.getItemAt(col) as GridColumn).dataField];
        }
    ]]>
</fx:Script>
</s:DataGrid>

然后你在你的应用程序中调用它:

//应用

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:mx="library://ns.adobe.com/flex/mx" 
           minWidth="955" minHeight="600" 
           xmlns:dgrc="com.dgrc.*">
<fx:Script>
    <![CDATA[
        import mx.collections.ArrayCollection;
        import mx.controls.Alert;

        [Bindable]private var collection:ArrayCollection = new ArrayCollection([
            {fld01:1, fld02:"fld02", fld03:"fld13", fld04:"fld14"},
            {fld01:2, fld02:"fld02", fld03:"fld23", fld04:"fld24"},
            {fld01:3, fld02:"fld02", fld03:"fld33", fld04:"fld34"},
            {fld01:4, fld02:"fld02", fld03:"fld43", fld04:"fld44"},
            {fld01:5, fld02:"fld02", fld03:"fld53", fld04:"fld54"}
        ]);

        protected function getElement():void
        {
            var obj:Object = myDG.getElementAt(nsRow.value, nsCol.value);
            Alert.show(String(obj));
        }

    ]]>
</fx:Script>

<s:VGroup x="20" y="20">

    <s:HGroup>
        <s:NumericStepper id="nsRow" minimum="0" value="0"/>
        <s:NumericStepper id="nsCol" minimum="0" value="0"/>
        <s:Button label="Get It!" click="getElement()"/>
    </s:HGroup>

    <dgrc:CustomDataGrid id="myDG" width="300" height="160" dataProvider="{collection}">
        <dgrc:columns>
            <s:ArrayList>  
                <s:GridColumn dataField="fld01" headerText="Field 1" width="100"/>
                <s:GridColumn dataField="fld03" headerText="Field 3" width="100"/>
                <s:GridColumn dataField="fld04" headerText="Field 4"/>
            </s:ArrayList>                  
        </dgrc:columns> 
    </dgrc:CustomDataGrid>
</s:VGroup>

</s:Application>

请注意,此示例中的row和col索引引用数据网格的单元格而不是数据网格提供程序的值。

如果你打电话

getElementAt(0, 1)

你会得到“fld13”

答案 1 :(得分:0)

如果您使用的是原始DataGrid控件,最好使用itemToLabel的{​​{1}}方法,因为DataGridColumn会在属性值包含点表示法时导致异常,例如作为item[dataField]

"customer.name"

框架使用相同的方法来提供网格单元格中显示的文本。如果网格中的复选框由布尔属性驱动,则返回的值将为 public function getElementAt(row:int, col:int):Object { var item:Object = dataProvider.getItemAt(row) var column:DataGridColumn = dataGrid.columns[column] as DataGridColumn; var value:String = column.itemToLabel(item); return value; } true