对于datagrid中删除后,想要自动选中下一条记录,如果是最后一条,就选中上一条。
这个看似简单的需求,实际操作中却出现了问题。
当选中第一条,删除一条后,selectedIndex的值变成-1,然后对其赋值:
dg.selectedIndex=si;
从debug中看到,这里的si=0,但是dg的selectedIndex却是1,也就是flash内部对datagrid的selectedIndex的时候做了其他一些操作,时间关系也没细看源码,网上找了个方法就解决了这个问题,就是在对数据源remove的之前加入:
dp.disableAutoUpdate();
在remove并且对selectedIndex赋值完了后,再dp.enableAutoUpdate();
这样问题就解决了,但是我用debug看还是没能赋值成功。。
希望有经验的兄弟提醒提醒,在下感激不尽。
下面是解决后的代码:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" minWidth="955" minHeight="600" initialize="init();">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.controls.Alert;
[Bindable]
private var dp:ArrayCollection=new ArrayCollection();
private function init():void{
dp.addItem({id:1,name:"join"});
dp.addItem({id:2,name:"jason"});
dp.addItem({id:3,name:"lori"});
dp.addItem({id:4,name:"tony"});
dp.addItem({id:5,name:"randy"});
}
private function deleteColumn():void{
var si:int=dg.selectedIndex;
dp.disableAutoUpdate();
if(si==dp.length-1){
dp.removeItemAt(si);
dg.selectedIndex=si--;
dg.dispatchEvent(new MouseEvent(MouseEvent.CLICK));
}else{
dp.removeItemAt(si);
dg.selectedIndex=si;
dg.dispatchEvent(new MouseEvent(MouseEvent.CLICK));
}
dp.enableAutoUpdate();
}
]]>
</mx:Script>
<mx:DataGrid id="dg" dataProvider="{dp}">
<mx:columns>
<mx:DataGridColumn dataField="id" headerText="ID" />
<mx:DataGridColumn dataField="name" headerText="NAME" />
</mx:columns>
</mx:DataGrid>
<mx:Button label="del" click="deleteColumn()"/>
</mx:Application>
本文介绍了一种在删除Datagrid中的某条记录后,如何自动选中相邻记录的方法,并提供了一个具体的Flash应用实例。
3025

被折叠的 条评论
为什么被折叠?



