Flex Datagrid 行列增加和删除(支持右键)

目前能实现的功能:
1.支持编辑表头;
2.删除添加自动更新序号;
3.支持右键操作DataGrid表;
4.支持dg表返回xml字符串

图例:
[img]/upload/attachment/81571/0993f79b-435e-31c5-a6b3-b8bfde3e5704.png[/img]

例子:
MXML:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute"
creationComplete="init();">
<mx:Script source="main.as"/>
<mx:Style>
Application{
font-size:12px;
}
</mx:Style>
</mx:Application>


main.as

// ActionScript file
import flash.events.ContextMenuEvent;
import flash.events.MouseEvent;
import flash.ui.ContextMenu;
import flash.ui.ContextMenuItem;

import mx.collections.ArrayCollection;
import mx.containers.HBox;
import mx.containers.VBox;
import mx.controls.Alert;
import mx.controls.Button;
import mx.controls.DataGrid;
import mx.controls.dataGridClasses.DataGridColumn;
import mx.core.ClassFactory;
import mx.events.DataGridEvent;
import mx.events.FlexEvent;
import mx.managers.PopUpManager;

import net.diding.dgRender.DgHeaderTextRender;
import net.diding.manager.EditDataGridManager;
import net.diding.window.InsertDGColumnWindow;
import net.diding.window.InsertDGRowWindow;



private var MyDataDG:DataGrid;
private var mainVBox:VBox;
private var editDgManager:EditDataGridManager;
private var myContextMenu:ContextMenu=new ContextMenu();

private function init():void
{
mainVBox=new VBox();
mainVBox.percentHeight=100;
mainVBox.percentWidth=100;
this.addChild(mainVBox)

createDataGrid(mainVBox)

var controlBox:HBox=new HBox();
controlBox.percentWidth=100;
mainVBox.addChild(controlBox);


var ViewBtn:Button=new Button();
ViewBtn.label="查看XML数据";
controlBox.addChild(ViewBtn);
ViewBtn.addEventListener(MouseEvent.CLICK, ViewHandler)
}

private function createDataGrid(MainVBox:VBox):void
{
MyDataDG=new DataGrid();

editDgManager=new EditDataGridManager();
editDgManager.taget=MyDataDG;

MyDataDG.editable=true;
MyDataDG.sortableColumns=false
MyDataDG.percentWidth=100;
MyDataDG.setStyle("verticalAlign", "middle")
MyDataDG.columns=myGridcolumns();
MainVBox.addChild(MyDataDG);
ShowList();
}

private function addDataGridMenuItems():void
{
myContextMenu.hideBuiltInItems();
var MenuList:Array=["删除行", "删除列", "插入行", "插入列"];
var separatorBeforeArray:Array=[true, false, true, false];

for (var j:int=0; j < MenuList.length; j++){
var item:ContextMenuItem=new ContextMenuItem(MenuList[j], separatorBeforeArray[j]);
item.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, MenuItemSelectHandler);
myContextMenu.customItems.push(item);
}
}

private function MenuItemSelectHandler(event:ContextMenuEvent):void{
var CaptionString:String=event.target.caption;
trace(CaptionString);
switch (CaptionString)
{
case "删除行":
editDgManager.DelRow();
break;

case "删除列":
editDgManager.DelColumn();
break;

case "插入行":
var InsertRowWindow:InsertDGRowWindow=InsertDGRowWindow(PopUpManager.createPopUp(this,InsertDGRowWindow, false));
InsertRowWindow.title="-->插入行设置";
InsertRowWindow.getWinArg(editDgManager)
break;

case "插入列":
var InsertColWindow:InsertDGColumnWindow=InsertDGColumnWindow(PopUpManager.createPopUp(this,InsertDGColumnWindow, false));
InsertColWindow.title="-->插入列设置";
InsertColWindow.getWinArg(editDgManager)
break;

}
}
//此项数据可以动态创建
private var HeadArray:Array=["姓名", "学号", "性别"];
private var arDatas:ArrayCollection;
private function myGridcolumns():Array
{
var cols:Array=MyDataDG.columns;
//锁定的order
var ID_DC:DataGridColumn=new DataGridColumn();
ID_DC.editable=false;
ID_DC.draggable=false;
ID_DC.headerText="序号"
ID_DC.dataField="ID";
ID_DC.setStyle("textAlign", "center");
ID_DC.width=45;
cols.push(ID_DC)
//根据headerArray建立DataGridColumn
for (var m:int=0; m < HeadArray.length; m++)
{
var ShowID_DC:DataGridColumn=new DataGridColumn();
ShowID_DC.editable=true;
ShowID_DC.draggable=false;
ShowID_DC.headerText=HeadArray[m];
ShowID_DC.dataField=HeadArray[m];
ShowID_DC.headerRenderer=new ClassFactory(DgHeaderTextRender);
ShowID_DC.setStyle("textAlign", "center");
cols.push(ShowID_DC)
}
return cols;
}

private function ShowList():void
{
arDatas=new ArrayCollection();
arDatas.removeAll();
for (var i:int=0; i < HeadArray.length; i++)
{
var names:String=HeadArray[i];
var obj:Object=new Object();
var show_num:Number=Number(i + 1);
if (show_num < 10)
{
obj.ID="No.0" + show_num;
}else{
obj.ID="No." + show_num;
}
obj.names=HeadArray[i];
arDatas.addItem(obj)

}

editDgManager.arData=arDatas;
MyDataDG.dataProvider=arDatas;

MyDataDG.addEventListener(DataGridEvent.ITEM_FOCUS_OUT, clearMenuHandler);
MyDataDG.addEventListener(DataGridEvent.ITEM_FOCUS_IN, setMenuHandler);
}

private function setMenuHandler(event:DataGridEvent):void
{
editDgManager.SelColumnIndex=event.columnIndex;
MyDataDG.contextMenu=myContextMenu;
addDataGridMenuItems();

}

private function clearMenuHandler(event:DataGridEvent):void
{
MyDataDG.contextMenu=null;
}

private function ViewHandler(event:MouseEvent):void{
var xmlStr:String=editDgManager.ViewXML();
Alert.show(xmlStr)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值