`
diding
  • 浏览: 81268 次
  • 性别: Icon_minigender_1
  • 来自: 四川
社区版块
存档分类
最新评论

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

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

图例:


例子:
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)
	}

  • src.rar (6.5 KB)
  • 描述: 源代码
  • 下载次数: 1008
  • 大小: 7.2 KB
分享到:
评论
4 楼 terryang 2011-08-09  
你的EditDataGridManager在哪啊    
3 楼 marcucuckoo 2010-09-26  
博主,谢谢,太好了
2 楼 diding 2009-03-10  
其实也差不多,个人习好;
我比较喜欢全用AS来构架,阅读起来顺眼,呵呵
PS:
用AS定义的module通常会比mxml的module少10KB左右(但是有些类和组件会在runtime时提示找不到(我用module加载module时发现的,这就是为什么会小提源故吧,),这样,只需在main.as 定义一下就可以了,(常见的有datagrid,NumericStepper,TabNavigator,comboBox和DividedBox等)
1 楼 chenguo 2009-03-09  
Thanks!还有一个问题想问你:注意到你的组件全是用.as文件写好的,那么如果是用.mxml写好的,有什么不同吗,是不是效率问题?我自己也不太明白,望指教。

相关推荐

    Flex自定义右键菜单

    在Flex开发中,自定义右键菜单是一项常见的需求,它能为用户界面提供更丰富的交互体验。Flex是一款基于ActionScript 3.0的开源框架,主要用于构建富互联网应用程序(RIA)。在这里,我们将深入探讨如何在Flex中实现...

    flex datagrid 前台 分页

    通过分析和学习这些内容,开发者可以更好地理解和实现Flex DataGrid的前台分页功能。 总的来说,前台分页是一种提高用户体验的策略,但同时也需要谨慎处理以避免内存和性能问题。正确实现前台分页,可以使Flex ...

    Flex dataGrid 全选、反选

    本文将详细讨论如何在Flex DataGrid中实现全选和反选功能,并结合`checkBox`来优化这一过程。 首先,我们要理解DataGrid的结构。DataGrid由多个列组成,每一列可能包含不同类型的控件,如文本、图像或复选框。在...

    flex DataGrid 表头分组

    当我们处理的数据需要进行分类或者分组时,Flex DataGrid 提供了表头分组的功能,这使得数据的展示更加有条理和易于理解。本文将详细探讨Flex DataGrid的表头分组特性及其实现方式。 首先,表头分组允许我们将数据...

    Flex Datagrid checkbox实现

    在Flex应用中,Datagrid经常被用于处理和展示大量的结构化数据。在标题“Flex Datagrid checkbox实现”中,讨论的核心是Datagrid中集成复选框(checkbox)的功能。 在Flex Datagrid中实现复选框功能,主要是通过...

    flex datagrid 嵌套checkbox实现全选

    在Flex开发中,数据网格(DataGrid)是用于展示数据集合的强大组件,它允许用户以表格形式查看和操作数据。本示例关注的是在DataGrid中嵌套复选框(Checkbox),并实现全选功能。这在需要用户批量选择或操作数据的...

    WPF分页DataGrid(二)列右键菜单实现

    在"WPF分页DataGrid"中介绍了如何实现分页功能,本文中介绍如果实现右键菜单。点击菜单项Age,将Age列隐藏,再点击则显示;并实现移动列后,同步显示。 详见:...

    flex datagrid

    Flex DataGrid 是 Adobe Flex 中一个重要的组件,用于展示结构化数据。它以表格形式呈现,非常适合用来显示多列数据,并提供了排序、选择、编辑等多种功能。在这个教程中,我们将深入探讨 DataGrid 的基本使用和一些...

    flex datagrid 实现合计功能控件包

    flex datagrid 实现合计功能控件包 带源码,demo fxp是flex4的工程文件,导入到工作空间即可 直接导入项目即可。 更多访问我的blog www.dplayer.net

    flex datagrid 表格 合计

    1. **DataGrid组件**:DataGrid是Flex中用于展示结构化数据的组件,它可以显示多列数据,并支持排序、选择和编辑等功能。在创建DataGrid时,我们需要指定数据源(通常是ArrayCollection或XMLListCollection)。 2. ...

    将Flex DataGrid数据导出到Excel中

    在Flex客户端,你需要遍历DataGrid的所有行和列,收集其显示的数据。你可以通过遍历DataGrid的items属性来获取所有数据项,然后访问每个item的children来获取单元格值。记得只提取可见的和有数据的单元格,因为...

    flex DataGrid xml 动态数据列表实例

    `DataGrid`是Flex提供的一个可自定义的、可滚动的数据容器,它允许用户以网格形式查看和操作数据。这种组件特别适用于展示大量结构化的信息,例如数据库记录或者报表数据。`DataGrid`可以自动调整列宽,并支持排序、...

    FLEX datagrid应用实例

    通过这些实例,初学者可以了解并掌握Flex DataGrid的基础用法和高级特性,从而在实际项目中灵活运用。无论是在展示大量结构化数据,还是在实现复杂的数据操作场景,DataGrid都是Flex开发者的重要工具。在不断探索和...

    FLEX的datagrid合计、平均值

    在Flex开发中,Datagrid组件是用于展示数据集的一个强大工具,它允许用户以表格的形式查看和操作数据。本文将深入探讨如何在Flex的Datagrid中实现数据的合计与平均值计算,帮助开发者更好地理解和应用这些功能。 ...

    Flex DataGrid 分页

    Flex DataGrid 分页是Adobe Flex开发中一个关键的用户界面组件功能,用于处理大量数据时提高性能和用户体验。在Web应用程序中,一次性加载所有数据可能导致页面加载缓慢,消耗大量内存,而分页则能有效地解决这个...

    Flex DataGrid CheckBox 一个简单的全选

    在Flex开发中,DataGrid组件是一个非常常用的控件,它用于展示数据集合,并提供交互式操作,如排序、选择等。本示例聚焦于DataGrid中的CheckBox集成,特别是实现一个全选的功能。以下是对这个主题的详细解释: 一、...

    flex DataGrid改变指定行的背景颜色

    在Flex开发中,DataGrid控件是用于展示数据表格的常用组件,它可以高效地呈现大量结构化信息。在某些情况下,我们可能需要根据特定条件改变DataGrid中的某一行或几行的背景颜色,以突出显示或者区分不同的数据状态。...

    flex datagrid 标题栏添加 checkbox 和 数据行 checkbox 连动

    总的来说,实现Flex DataGrid标题栏添加复选框并使其与数据行的复选框联动,涉及到自定义HeaderRenderer和CellRenderer,以及对数据源和事件处理的深入理解。这需要开发者具备良好的Flex编程基础和组件定制能力。...

Global site tag (gtag.js) - Google Analytics