2011-06-27 16 views
0

私の問題は、ユーザーがコンボボックスエディタを持つDataGridセルをクリックし、すぐにセルから離れていくと、そのセルのテキスト値が消えてしまうことです。LabelfunctionがCombobox Item Editorに干渉する

私はデータグリッドにitemEditEndハンドラを持っていて、それは私が使用するプロパティの値をeditorDataFieldとして表示します。しかし、そのグリッド列のlabelFunction(itemEditEndハンドラの後に呼び出される)は、それをゼロとみなします。

labelFunctionとアイテムエディタがうまく一緒に遊んでいないのはなぜですか?ここで

はDataGridColumnのである:ここでは

<mx:DataGridColumn 
           headerText="Field Name" 
           dataField="attribId" 
           editorDataField="attributeId" 
           labelFunction="getFieldName"> 

は、項目エディタ

      <mx:itemEditor> 

           <mx:Component> 

            <mx:ComboBox 
             dataProvider="{this.outerDocument.lendersModel.fileAttributes}" 
             creationComplete="{outerDocument.selectAttribute();}" 
             labelField="fileAttribDesc" 
             change="updateAttribute(event);" 
             selectedIndex="-1"> 


             <mx:Script> 
              <![CDATA[             
               [Bindable] 
               public var attributeId:int; 
               private var fileDetailRecordType:String; 

               override public function set data(value:Object):void{ 
                this.attributeId = value.attribId; // adding this line appears to be the fix. 
                var category:String = value.category; 

                this.filterFileAttributes(category); 
               } 

               /** Change handler for combobox in Record Type column. 
               */ 
               private function filterFileAttributes(recordType:String):void{ 
                this.fileDetailRecordType = recordType; 

                this.dataProvider.filterFunction = filterByRecordType; 
                this.dataProvider.refresh(); 
               } 

               /** Filters the file attributes collection based on the record type. 
               */ 
               private function filterByRecordType(item:Object):String{ 
                return item.category.match(this.fileDetailRecordType); 
               } 

               private function updateAttribute(event:*):void{ 
                attributeId = event.currentTarget.selectedItem.attribId; 
                this.outerDocument.selectedAttributeId = attributeId; 
               } 

              ]]> 
             </mx:Script> 

            </mx:ComboBox> 

           </mx:Component> 

          </mx:itemEditor> 

、ここでは、DataGridColumnのためのラベル関数です。

 private function getFieldName(item:Object, dgc:DataGridColumn):String{ 
      var fieldName:String = ''; 

      /* At this point the lendersModel.fileAttributes collection is 
       filtered based on the record type. We need to remove the filter 
       so we can search the entire collection, not just the filtered subset. */ 
      lendersModel.fileAttributes.filterFunction = refreshFilter; 
      lendersModel.fileAttributes.refresh(); 

      for each(var attrib:FileAttributeDTO in lendersModel.fileAttributes){ 
       if(attrib.attribId == item.attribId) 
        fieldName = attrib.fileAttribDesc; 
      } 

      return fieldName; 
     } 

そしてここでDataGridのitemEditEndHandlerで実行されるコードです:

のvarをrowCount:int型= fieldsGridEmpty.selectedIndexは、 var attribCombo:ComboBox = ComboBox(fieldsGridEmpty.itemEditorInstance);今

   if(rowCount != -1 && attribCombo.selectedItem != null) 
       {               
        newFieldsDp[ rowCount ].fileAttribute.dataType = attribCombo.selectedItem.dataType;           
        newFieldsDp[ rowCount ].fileAttribute.dataLength = attribCombo.selectedItem.dataLength; 
        newFieldsDp[ rowCount ].fileAttribute.fileAttribDesc = attribCombo.selectedLabel; 
        newFieldsDp[ rowCount ].dataLength = attribCombo.selectedItem.dataLength;  
        newFieldsDp[ rowCount ].attribId = attribCombo.selectedItem.attribId; 
       } 

、アイテムの編集・ハンドラは、「attribId」の有効な値を示しています

newFieldsDp[ rowCount ].attribId = attribCombo.selectedItem.attribId; 

しかし、ラベル関数は、この後に実行されますとitem.attribIdの値は0です。そして、それはですなぜなら、一致しないため、 'fieldName'は空のStringです。

+0

コードを表示してください。これは少し混乱です。たとえば、DataGrid列にlabelFunctionを使用していますか?またはコンボボックスのために? SparkコンポーネントまたはHaloコンポーネントを使用していますか? – JeffryHouser

+0

私はポストをコードで更新しました。残念ながら、mxmlをコードモードにする方法を理解できませんでした。申し訳ありません。しかし、見ていただきありがとうございます。 – fumeng

+0

開いているブラケット/閉じるブラケットボタンは、強調表示されたコードの書式を設定します。 – JeffryHouser

答えて

0

コメントに記載されている修正がうまくいくようです。根本的な問題は、ユーザーがコンボボックスとやり取りしたときにのみeditorDataFieldプロパティが設定されたことです。

オーバーライドpublic function set data()メソッドで問題を解決しました。このようにして、ユーザがタッチするとすぐに、それが設定される。

関連する問題