对于datagrid中删除后,对selectedIndex赋值后的问题

本文介绍了一种在删除Datagrid中的某条记录后,如何自动选中相邻记录的方法,并提供了一个具体的Flash应用实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值