我的问题是,当用户单击具有组合框编辑器的datagrid单元格,然后立即单击离开该单元格时,该单元格中的文本值将消失。
我在datagrid上有一个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的label函数。
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;
}下面是在itemEditEndHandler中为Datagrid执行的代码:
var rowCount:int = fieldsGridEmpty.selectedIndex;var属性组合:组合框= 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;但是,在此之后将执行label函数,并且item.attribId的值为0。这就是'fieldName‘是空字符串的原因,因为没有匹配。
发布于 2011-06-28 22:42:54
我在评论中提到的修复方法似乎有效。潜在的问题是,只有在用户与组合框交互时才设置editorDataField属性。
我在override public function set data()方法中设置了它,从而解决了这个问题。以这种方式,只要用户触摸它,它就会被设置。
https://stackoverflow.com/questions/6495363
复制相似问题