这个demo是对上一个DataGrid demo的修改,目的是为了实现控制checkBox itemrender全选所有项,然后删除所有项。
在 上一个版本中,我在ICheckBox.as的set data function中根据当前value选中checkbox并且将选中的value push到selectedItems array中,这里有一个问题是grid不会初始化被scrollbar 隐藏的项 (谢谢lianyedie找到问题),所以会导致一个问题,没有显示部分的选中的item没有被正确加入到selectedItems array中。这个版本中我主要简化了iCheckBox.as, 不在setvlaue中设置选中项(同时也防止了重复插入选中项的问题)。
Demo内容:
1. 点击check box选中item,或点击全选,选中所有项。
2. 点击删除选中项,选中项的 status将变成 Deleted.
iCheckBox.as
package
{
import flash.events.Event;
import mx.controls.CheckBox;
import mx.core.Application;
public class iCheckBox extends CheckBox
{
private var currentData:Object; //保存当前一行值的对象
public function iCheckBox()
{
super();
this.addEventListener(Event.CHANGE,changeHandle)
}
override public function set data(value:Object):void{
this.selected = value.action.toString() == "true"?true:false;
this.currentData = value; //保存整行的引用
}
//点击check box时,根据状况向selectedItems array中添加当前行的引用,或者从array中移除
private function changeHandle(e:Event):void{
var itemArray:Array = Application.application.selectedItems
this.currentData.action = this.selected.toString()
if(this.selected){
itemArray.push(this.currentData)
}else{
for(var i:int = 0; i<itemArray.length; i++){
if(itemArray[i] == this.currentData){
itemArray.splice(i,1)
}
}
}
}
}
}
GridDemo.mxml
//从dataProvider中将选中的项放入 selectedItems array
private function initSelectedItems():void{
for(var i:int=0; i <idata.length; i++){
if(idata[i].action.toString() == "true"){
this.selectedItems.push(idata[i])
}
}
}
源文件下载
0 评论:
发表评论