一个DataGrid刷新的问题

liu_binq63 2011-06-16 07:07:02
先描述状况:
界面上有一个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>
...全文
247 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
liu_binq63 2011-06-29
  • 打赏
  • 举报
回复
还是没有人回答吗?
liu_binq63 2011-06-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dormouse1985 的回复:]

var obj:Object = bookList.getItemAt(testData.selectedIndex);这里取的obj不是修改后的内容,判断的一直是编辑修改前的内容
[/Quote]

取得之后做的修改啊,难道我还需要在修改完数据后再重新取得一次这个obj?
taolei870222 2011-06-22
  • 打赏
  • 举报
回复
数据取得的还是原来的引用,没有更新。所以datagrid没有刷新
dormouse1985 2011-06-22
  • 打赏
  • 举报
回复
var obj:Object = bookList.getItemAt(testData.selectedIndex);这里取的obj不是修改后的内容,判断的一直是编辑修改前的内容
liu_binq63 2011-06-22
  • 打赏
  • 举报
回复
貌似不起作用。
<?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";
}
bookList.itemUpdated(obj);
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>
liu_binq63 2011-06-22
  • 打赏
  • 举报
回复
1楼,看好我的定义。
2楼,我测试一下,不过能在明确一点吗?
dormouse1985 2011-06-19
  • 打赏
  • 举报
回复
Object动态对象,更新其属性值是不会引发视图的更新,可以使用ArrayCollection.itemUpdated进行更新视图
lizepeng645913441 2011-06-19
  • 打赏
  • 举报
回复
对象不是绑定的,当然不会变啦!

4,328

社区成员

发帖
与我相关
我的任务
社区描述
多媒体/设计 Flex
社区管理员
  • Flex
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧