首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > flex >

一个DataGrid刷新的有关问题

2012-06-01 
一个DataGrid刷新的问题先描述状况:界面上有一个DataGrid,有三列数据,其中第一列数据可以编辑。第一列数据

一个DataGrid刷新的问题
先描述状况:
界面上有一个DataGrid,有三列数据,其中第一列数据可以编辑。第一列数据编辑后,根据编辑后的数据修改后面两列的数据。目前的情况似乎是修改完后面两列数据后,DataGrid并不能立即刷新,必须等到下一次编辑的时候才能刷新。请高手帮忙看看是怎么回事儿。谢谢。

代码如下:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
xmlns:s="library://ns.adobe.com/flex/spark" 
xmlns:mx="library://ns.adobe.com/flex/mx" initialize="init()" minWidth="955" minHeight="600" xmlns:ns1="*">
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.events.DataGridEvent;
import mx.events.ListEvent;

[Bindable]
private var bookList:ArrayCollection = new ArrayCollection();
private function init():void
{
//添加行
var o:Object = new Object();
o.name = "abc";
o.pub = "cde";
o.auth= "efg";
bookList.addItem(o);
}

private function aa(event:DataGridEvent):void
{
var obj:Object = bookList.getItemAt(testData.selectedIndex);
if (obj['name'] == "1") {
obj['pub'] = "asd";
obj['auth'] = "ttttt";
} else if (obj['name'] == "2") {
obj['pub'] = "22222";
obj['auth'] = "33333";
} else {
obj['pub'] = "44444";
obj['auth'] = "55555";
}
lblTemp.text = event.type;
}

]]>
</fx:Script>
<mx:DataGrid id="testData" editable="true" x="53" y="18" itemEditEnd="aa(event)" dataProvider="{bookList}">
<mx:columns>
<mx:DataGridColumn headerText="列 1" editable="true" dataField="name"/>
<mx:DataGridColumn headerText="列 2" dataField="pub" />
<mx:DataGridColumn headerText="列 2" dataField="auth" />

</mx:columns>
</mx:DataGrid>
<s:Label id="lblTemp" x="53" y="178" text="标签"/>
</s:Application>


[解决办法]
对象不是绑定的,当然不会变啦!
[解决办法]
Object动态对象,更新其属性值是不会引发视图的更新,可以使用ArrayCollection.itemUpdated进行更新视图
[解决办法]
var obj:Object = bookList.getItemAt(testData.selectedIndex);这里取的obj不是修改后的内容,判断的一直是编辑修改前的内容
[解决办法]
数据取得的还是原来的引用,没有更新。所以datagrid没有刷新

热点排行