0

我正在尝试在 DataGrid 表中添加一个 DropDownList。用户从下拉列表中选择其中一项后,我选择的项目没有反映或没有被选中。我知道我可以使用 ComboBoxGridItemEditor 来实现我要求的结果。但是组合框是可编辑的,我不希望用户进行编辑,而只是从列表中的一个选项中进行选择。这就是我尝试在 dataGrid 中添加 dropDownList 的原因。

请告诉我下拉列表中的选定项目如何识别和更新 dataGrid 中单元格的值并将值保存回数据提供者?

问题:所以当我尝试选择蓝色时,单元格不会更新,而是保持红色。

谢谢雷哈。

 <fx:Script>
    <![CDATA[                
        import mx.collections.ArrayCollection;      
        [Bindable]
        private var myDP:ArrayCollection = new ArrayCollection([
            {label1:"Order #2314", quant:3, color:'red'},
            {label1:"Order #2315", quant:3, color:'red'}     
        ]); 


    ]]>
</fx:Script>

<s:DataGrid id="myDG" x="85" y="57" width="393" height="151" dataProvider="{myDP}"
            editable="true" variableRowHeight="true">
    <s:columns>
        <s:ArrayList>
            <s:GridColumn dataField="label1" headerText="Order #" editable="false"/>                
            <s:GridColumn dataField="quant" headerText="Qty" editable="true"/>

            <s:GridColumn dataField="color" headerText="Color" editable="true">                     
                <s:itemEditor>
                    <fx:Component>                              
                        <s:GridItemEditor>                          
                            <s:DropDownList id="myDropList" requireSelection="true">
                                <s:dataProvider>
                                    <s:ArrayCollection>
                                        <fx:String>red</fx:String>
                                        <fx:String>blue</fx:String>
                                        <fx:String>green</fx:String>
                                    </s:ArrayCollection>                                        
                                </s:dataProvider>
                            </s:DropDownList>                               
                        </s:GridItemEditor>                         
                    </fx:Component>
                </s:itemEditor>                 
            </s:GridColumn> 

        </s:ArrayList> 
    </s:columns >
</s:DataGrid>   
4

1 回答 1

0

基本上,您需要通过data getter/setter method自定义 itemrenderer 将更改的 selectedItem 更新/保存为 arraycollection。

查看data[column.dataField] = value;这一行 saveback to arraycollection。

<s:GridColumn dataField="color" headerText="Color" editable="true">                     
    <s:itemEditor>
        <fx:Component>                              
            <s:GridItemEditor>              
            <fx:Script>
                <![CDATA[

                    import mx.core.FlexGlobals;
                    import mx.events.FlexEvent;

                    import spark.events.IndexChangeEvent;

                    override public function set value(newValue:Object):void {

                        cb.selectedItem = newValue;
                    }

                    override public function get value():Object {
                        return cb.selectedItem.toString();
                    }

                    override public function setFocus():void {
                        cb.setFocus();
                    }

                    override public function save():Boolean
                    {
                        data[column.dataField] = value;                                     
                        return true;
                    }
                ]]>
            </fx:Script>
            <s:DropDownList id="cb" requireSelection="true">
                <s:dataProvider>
                    <s:ArrayCollection>
                        <fx:String>red</fx:String>
                        <fx:String>blue</fx:String>
                        <fx:String>green</fx:String>
                    </s:ArrayCollection>                                        
                </s:dataProvider>
            </s:DropDownList>                               
        </s:GridItemEditor>                         
    </fx:Component>
</s:itemEditor>                 

于 2013-01-28T10:14:23.703 回答