私の問題は、ユーザーがコンボボックスエディタを持つ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です。
コードを表示してください。これは少し混乱です。たとえば、DataGrid列にlabelFunctionを使用していますか?またはコンボボックスのために? SparkコンポーネントまたはHaloコンポーネントを使用していますか? – JeffryHouser
私はポストをコードで更新しました。残念ながら、mxmlをコードモードにする方法を理解できませんでした。申し訳ありません。しかし、見ていただきありがとうございます。 – fumeng
開いているブラケット/閉じるブラケットボタンは、強調表示されたコードの書式を設定します。 – JeffryHouser