FLEX:Datagrid,如何根据我的数据属性值选择项目

时间:2010-05-06 13:38:01

标签: flex

我正在使用自定义组件CheckBoxList DataGrid(http://blogs.adobe.com/aharui/2008/02/checkbox_selection_in_datagrid.html),而作为dataProvider我有一个ArrayCollection,其中包含以下项目:

name="item name" selected="true"

我希望在数据模型中将selected属性设置为false或true时更新CheckBox列表。

感谢

1 个答案:

答案 0 :(得分:0)

到目前为止,最简单的方法是更新其中的一些对象后refresh ArrayCollection。最后有一个这样做的例子。

我不相信你能够绑定到ArrayCollection中的数据。我认为您需要做的是扩展Object(或者可能是FlashProxy)来创建一个自定义类,只要其某些属性发生更改,就会告诉应用程序更新给定的数据列表。与我们在示例中手动完成的方式相同。

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication 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="426" height="243"
                       showStatusBar="false">

    <fx:Script>
        <![CDATA[
            import mx.collections.ICollectionView;
            import mx.controls.Alert;
            import mx.events.CollectionEvent;
            import mx.events.FlexEvent;

            protected function randomizeData_click(event:MouseEvent):void
            {
                for each (var o:Object in data)
                {
                    o.name = Math.round(Math.random() * 100);
                    o.selected = Math.random() < 0.5;
                }

                data.refresh();
            }

        ]]>
    </fx:Script>

    <fx:Declarations>
        <s:ArrayCollection id="data">
            <fx:Object name="1" selected="false" />
            <fx:Object name="2" selected="false" />
            <fx:Object name="3" selected="true" />
            <fx:Object name="4" selected="false" />
        </s:ArrayCollection>
    </fx:Declarations>

    <mx:DataGrid id="dataGrid" dataProvider="{data}" top="10" left="10" bottom="39" right="10">
        <mx:columns>
            <mx:DataGridColumn headerText="Item" dataField="name"/>
            <mx:DataGridColumn headerText="Selected" dataField="selected" itemRenderer="mx.controls.CheckBox" />
        </mx:columns>
    </mx:DataGrid>

    <s:Button label="Randomize Data" right="10" bottom="10" click="randomizeData_click(event)"/>
</s:WindowedApplication>