【问题标题】:Using itemRenderer in mx Datagrid在 mx Datagrid 中使用 itemRenderer
【发布时间】:2012-08-21 22:59:55
【问题描述】:

我有一个 2 列的 mx DataGrid。第一列在 TextInput 中呈现其数据,在 ComboBox 中呈现第二列。当我更改 ComboBox 中的选定值时,我希望相同索引的 TextInput 将其文本更改为 ComboBox 中选定的值。谁能帮我这个?我的代码如下。

<mx:DataGrid id="myGrid" rowHeight="25" dataProvider="{Testarray}" width="100%" height="205" chromeColor="#D0CCAF" headerHeight="0" showHeaders="false" >
                <mx:columns>
                    <mx:DataGridColumn headerText="My Header 1"                                                                        
                                       editable="true"                                                                        
                                       dataField="LBL"                                                                            
                                       >
                        <mx:itemRenderer>
                            <fx:Component>
                                <mx:HBox horizontalAlign="left" horizontalScrollPolicy="off" verticalScrollPolicy="off">



                                    <s:TextInput id="label_txt" text="{data.LBL}" width="98%"/>
                                </mx:HBox>
                            </fx:Component>
                        </mx:itemRenderer>
                    </mx:DataGridColumn>    

                    <mx:DataGridColumn headerText="My Header 2"                                                                       
                                       editable="true"                                                                                
                                       rendererIsEditor="true"                                                                        
                                       dataField="ALIAS"                                                                            
                                       >
                        <mx:itemRenderer>
                            <fx:Component>

                                    <renderers:comboItemRenderer height="80%" change="comboitemrenderer1_changeHandler(event)" lookupField="ALIAS" labelField="ALIAS" dataProvider="{outerDocument.searchCustomizationComponents_array}">
                                        <fx:Script>
                                            <![CDATA[
                                                import mx.events.DataGridEvent;
                                                import mx.events.ListEvent;

                                                protected function comboitemrenderer1_changeHandler(event:ListEvent):void
                                                {
                                //WHAT TO PUT HERE?
                                                }

                                            ]]>
                                        </fx:Script>

                                    </renderers:comboItemRenderer>
                            </fx:Component>
                        </mx:itemRenderer>
                    </mx:DataGridColumn>

                </mx:columns>
            </mx:DataGrid>

【问题讨论】:

    标签: actionscript-3 apache-flex datagrid flex4.5 itemrenderer


    【解决方案1】:
    I got it myself. Thanks buddies.
    I needed to add these 2 lines of codes for the textInput to take the value of the selectedItem int he ComboBox.
    protected function comboitemrenderer1_changeHandler(event:ListEvent):void
                                                    {
                                                        outerDocument.myGrid.dataProvider[outerDocument.myGrid.selectedIndex]['LBL'] = this.selectedItemKey; 
                                                        outerDocument.myGrid.invalidateList();
    
                                        }
    Also note that the code for my comboitemrenderer below:
        <mx:ComboBox
            xmlns:mx="http://www.adobe.com/2006/mxml" 
            dataChange="setSelected()" 
            change="onSelectionChange(event)"
            focusEnabled="true">
            <mx:Script>
                <![CDATA[
                    import mx.events.DataGridEvent;
                    import mx.events.ListEvent;
                    import mx.controls.dataGridClasses.DataGridListData;
    
                    private var _ownerData:Object;
                    private var _lookupField:String = "value";
    
                    // When using this component as an itemEditor rather than an itemRenderer
                    // then set ' editorDataField="selectedItemKey"' on the column to 
                    // ensure that changes to the ComboBox are propogated.
                    [Bindable] public var selectedItemKey:Object;
    
                    public function set lookupField (value:String) : void {
                        if(value) {
                            _lookupField = value;
                            setSelected();
                        }
                    }           
                    override public function set data (value:Object) : void {
                        if(value) {                    
                            _ownerData = value;
                            setSelected();
                        }
                    }
                    override public function get data() : Object {
                        return _ownerData;
                    }            
                    private function setSelected() : void {
                        if (dataProvider && _ownerData) {
                            var col:DataGridListData = DataGridListData(listData);
                            for each (var dp:Object in dataProvider) {
                                if (dp[_lookupField] == _ownerData[col.dataField]) {
                                    selectedItem = dp;
                                    selectedItemKey = _ownerData[col.dataField];
                                    return;     
                                }
                            }                    
                        }
                        selectedItem = null;
                    }
                    private function onSelectionChange (e:ListEvent) : void {
                        if (selectedItem && _ownerData) {                    
                            var col:DataGridListData = DataGridListData(listData);
                            _ownerData[col.dataField] = selectedItem[_lookupField];
                            selectedItemKey = selectedItem[_lookupField];
    
        }
                    }                   
                ]]>
            </mx:Script>    
        </mx:ComboBox>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-12
      • 2012-03-10
      • 1970-01-01
      • 1970-01-01
      • 2011-11-03
      • 1970-01-01
      • 1970-01-01
      • 2010-11-18
      相关资源
      最近更新 更多