当我编辑网格的最后一行时,我的itemEditEnd事件方法被调用,但是我的ArrayCollection中的数据没有更新以反映所做的更改。所有其他列都可以工作,只是最后一列似乎有问题。我不确定这是一个错误,还是我需要做一些与众不同的事情? (Flash Builder 4.5 / Flex 4.5.1)
我有一个简单的可编辑DataGrid,它带有一个ArrayCollection,因为它是数据提供者。它填充,我可以编辑。我正在捕获itemEditEnd事件并从我的数组集中获取行以传回服务器:
public var _recs:ArrayCollection = new ArrayCollection;
<mx:DataGrid id="recsDG" dataProvider="{_recs}"
editable="true" itemEditEnd="recsDG_itemEditEndHandler(event)">
<mx:columns>
<mx:DataGridColumn headerText="id" dataField="id" editable="false"/>
<mx:DataGridColumn headerText="type" dataField="type"/>
... more columns ...
</mx:columns>
</mx:DataGrid>
protected function recsDG_itemEditEndHandler(event:DataGridEvent):void
{
// THIS IS MY ARRAY COLLECTION/ROW(?): _recs[event.rowIndex]
}
如果我再次点击最后一列并再次更改它,我可以看到数组集合中的值现在已更改为我之前所做的更改。例如,当调试器跟踪时,假设我的原始值为“AAA”,我将其更改为“BBB”并按Tab键,在itemEditEnd的调试器中,它显示“AAA”(仅适用于此最后一列)。然后我将值更改为“CCC”和tab,在调试器中我看到“BBB”!
我还尝试了'event.currentTarget.itemEditorInstance.data'属性,并且也没有使用键入的新值进行更新。
作为临时解决方法,我在网格的末尾添加了一个可编辑的列,没有列标题,1像素宽。这似乎有效,当我退出时,现在它不再是最后一列,它似乎工作。虽然有点像kluge。
OH,我刚注意到,当我点击时,它们都没有更新,只有当我选中时!那是另一个问题??
答案 0 :(得分:0)
确保您的数据提供者标记为[Bindable]。另外,在itemEditEnd处理程序方法中尝试_recs.refresh()
。我在一个简单的项目中设置了下面的代码,它似乎工作正常(所有单元格在按Tab键后立即更新数组集合)。另外,我正在使用Flex 4.5.1 SDK。如果这不能解决您的问题,您可以发布您正在使用的完整代码,还是提供一个可以重现问题的示例应用程序?
<?xml version="1.0" encoding="utf-8"?>
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.events.DataGridEvent;
[Bindable]
public var _data:ArrayCollection = new ArrayCollection([
{id:1,name:'Ted',pos:'Mgr'},
{id:2,name:'Bob',pos:'Mgr'},
{id:3,name:'Jeb',pos:'Mgr'}
]);
protected function dg_itemEditEndHandler(event:DataGridEvent):void
{
_data.refresh();
}
]]>
</fx:Script>
<s:Panel title="Halo DataGrid Control Example"
width="75%" height="75%"
horizontalCenter="0" verticalCenter="0">
<s:VGroup left="10" right="10" top="10" bottom="10">
<s:Label width="100%" color="blue"
text="Select a row in the DataGrid control."/>
<mx:DataGrid id="dg" width="100%" height="100%" rowCount="5" dataProvider="{_data}" editable="true" itemEditEnd="dg_itemEditEndHandler(event)">
<mx:columns>
<mx:DataGridColumn dataField="id" headerText="ID"/>
<mx:DataGridColumn dataField="name" headerText="NAME"/>
<mx:DataGridColumn dataField="pos" headerText="POSITION"/>
</mx:columns>
</mx:DataGrid>
<mx:DataGrid id="dg2" width="100%" height="100%" rowCount="5" dataProvider="{_data}" editable="false" >
<mx:columns>
<mx:DataGridColumn dataField="id" headerText="ID"/>
<mx:DataGridColumn dataField="name" headerText="NAME"/>
<mx:DataGridColumn dataField="pos" headerText="POSITION"/>
</mx:columns>
</mx:DataGrid>
</s:VGroup>
</s:Panel>