`
wgcode
  • 浏览: 591519 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

自定义DataGrid

阅读更多
package cw.controls {
	import fl.controls.DataGrid;

	import flash.events.MouseEvent;

	import fl.controls.dataGridClasses.HeaderRenderer;

	import flash.events.Event;

	import fl.controls.dataGridClasses.DataGridColumn;

	import flash.display.Sprite;

	import fl.controls.listClasses.CellRenderer;

	import flash.display.DisplayObject;

	/**
	 * @author 25swf
	 * @site www.25swf.com
	 */
	public class DataGrid25 extends DataGrid {
		private var current_moveing_header : HeaderRenderer;
		private var current_moveing_row : Sprite;
		private var drop_column_id : int = -1;
		private var current_highLine : Sprite;
		private var current_selected_row : int = -1;
		public var highLineColor : Number = 0xFF0000;
		public var highLineBold : Number = 2;

		private var m_moverow : Boolean = true;
		private var m_movecolumn : Boolean = true;

		/**
		 * 获取是否可以移动row
		 */
		public function get moverow() : Boolean {
			return m_moverow;
		}

		/**
		 * 设置是否可以移动row
		 */
		public function set moverow(_b : Boolean) : void {
			m_moverow = _b;
		}

		/**
		 * 获取是否可以移动列
		 */
		public function get movecolumn() : Boolean {
			return 	m_movecolumn;
		}

		/**
		 * 设置是否可以移动列
		 */
		public function set movecolumn(_b : Boolean) : void {
			m_movecolumn = _b;	
		}

		public function DataGrid25() {
			this.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
		}

		private function onMouseDown(e : MouseEvent) : void {
			if(e.target is HeaderRenderer && m_movecolumn) {
				var tempHeaderRender : HeaderRenderer = HeaderRenderer(e.target);
				stage.addChild(tempHeaderRender);
				tempHeaderRender.scaleX = 0.5;
				tempHeaderRender.scaleY = 0.5;
				tempHeaderRender.x = stage.mouseX + 2;
				tempHeaderRender.y = stage.mouseY + 2;
				current_moveing_header = tempHeaderRender;
				tempHeaderRender.startDrag();
				this.invalidate();
				stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
				this.addEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
			}else if(e.target is CellRenderer && m_moverow) {
				var tempCellRenderer : CellRenderer = CellRenderer(e.target);
				current_selected_row = tempCellRenderer.listData.row;
				stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
				this.addEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
				var tempDataGrid : DataGrid = new DataGrid();
				tempDataGrid.headerHeight = 0;
				tempDataGrid.width = this.width;
				tempDataGrid.height = this.rowHeight;
				tempDataGrid.columns = this.columns;
				tempDataGrid.addItem(this.getItemAt(current_selected_row));
				var tempSprite : Sprite = new Sprite();
				tempSprite.addChild(tempDataGrid);
				tempSprite.scaleX = 0.5;
				tempSprite.scaleY = 0.5;
				tempSprite.x = stage.mouseX + 2;
				tempSprite.y = stage.mouseY + 2;
				stage.addChild(tempSprite);
				tempSprite.startDrag();
				current_moveing_row = tempSprite;
			}
		}

		private function onMouseUp(e : Event = null) : void {
			if(current_moveing_header != null) {
				if(drop_column_id != -1) {
					var tempColumn : DataGridColumn = this.getColumnAt(current_moveing_header.column);
					this.removeColumnAt(current_moveing_header.column);
					this.addColumnAt(tempColumn, drop_column_id);
				}
				current_moveing_header.stopDrag();
				stage.removeChild(current_moveing_header);
				current_moveing_header = null;
				this.invalidateList();
			}
			clearHighLine();
			if(current_selected_row != -1) {
				current_selected_row = -1;
				clearRowCopy();
			}
			stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
			this.removeEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
		}

		private function onMouseOver(e : Event) : void {
			if(e.target is HeaderRenderer && current_moveing_header != null) {
				var tempHeaderRender : HeaderRenderer = HeaderRenderer(e.target);
				if(drop_column_id == tempHeaderRender.column) {
					//如果是同一个,则可以直接终止往下执行了
					return;
				}
				drop_column_id = tempHeaderRender.column;
				//清除高亮
				clearHighLine();
				//高亮列
				var mySprit : Sprite = new Sprite();
				mySprit.graphics.lineStyle(highLineBold, highLineColor);
				mySprit.graphics.drawRect(0, 0, tempHeaderRender.width, this.height);
				mySprit.x = tempHeaderRender.x;
				current_highLine = mySprit;
				this.addChild(mySprit);
			}else {
				clearHighLine();
				drop_column_id = -1;	
			}
			if(e.target is CellRenderer && current_selected_row != -1) {
				var tempCellRenderer : CellRenderer = CellRenderer(e.target);
				if(current_selected_row == tempCellRenderer.listData.row) {
					//如果是同一个,则可以直接终止往下执行了
					return;
				}
				if(current_selected_row > tempCellRenderer.listData.row) {
					this.addItemAt(this.getItemAt(current_selected_row), tempCellRenderer.listData.row);
					this.removeItemAt(current_selected_row + 1);
				}
				else {
					this.addItemAt(this.getItemAt(current_selected_row), tempCellRenderer.listData.row + 1);
					this.removeItemAt(current_selected_row);
				}
				current_selected_row = tempCellRenderer.listData.row;
			}
		}

		/**
		 * 清除高亮
		 */
		private function clearHighLine() : void {
			if(current_highLine != null && current_highLine.parent != null) {
				current_highLine.parent.removeChild(current_highLine);		
				current_highLine = null;
			}	
		}

		/**
		 * 清除ROW的复制品
		 */
		private function clearRowCopy() : void {
			if(current_moveing_row != null && current_moveing_row.parent != null) {
				current_moveing_row.parent.removeChild(current_moveing_row);		
				current_moveing_row = null;
			}	
		}
	}
}

 

分享到:
评论

相关推荐

    自定义Datagrid

    在IT领域,自定义Datagrid是一项常见的需求,尤其是在开发数据密集型应用时。Datagrid是一种用于展示和操作表格数据的控件,它允许用户以视觉上友好的方式查看和交互大量结构化的信息。本资源围绕C#语言环境下的...

    silverlight自定义DataGrid demo

    在本文中,我们将深入探讨Silverlight中的自定义DataGrid实现,以及如何利用Grid控件来构建这样一个功能。Silverlight是一种由Microsoft开发的富互联网应用程序(RIA)平台,它允许开发者创建交互性强、视觉效果丰富...

    flex 自定义 datagrid 列头带组合框进行过滤

    这个主题——"flex 自定义 datagrid 列头带组合框进行过滤",涉及到的关键知识点包括Flex组件定制、DataGrid列头的扩展以及ComboBox控件的使用。 1. Flex组件定制: 在Flex中,我们可以使用MXML和ActionScript来...

    flex 自定义dataGrid渲染器.根据数据变色

    总的来说,通过自定义DataGrid的渲染器,我们可以实现更灵活的数据显示效果。在这个例子中,我们学会了如何根据数据的值动态改变单元格的颜色,增强了用户界面的交互性和可视化效果。这种技术在数据监控、报表展示等...

    ASP.NET中自定义DataGrid分页设置的实现

    ASP.NET 中自定义 DataGrid 分页设置的实现 在 ASP.NET 中,DataGrid 是一个常用的控件,用于显示数据列表。然而,DataGrid 的分页设置是 ASP.NET 开发中最常见的问题之一。在本文中,我们将实现 DataGrid 的个性化...

    Grid(6)[自定义DataGrid-强制显示分列线(在不显示列头时)]

    "Grid(6)[自定义DataGrid-强制显示分列线(在不显示列头时)]"这个标题表明我们正在讨论一个关于数据网格(DataGrid)的自定义实现,具体是针对Flex或Flash环境中的MXML组件。这里的“Grid(6)”可能指的是该系列教程的...

    Flex 自定义Datagrid的ItemRender

    本文将深入探讨如何在Flex中自定义Datagrid的ItemRender,以实现按钮、单选、复选和日期等控件的集成。 首先,我们需要了解ItemRender的基本概念。ItemRenderer是Flex提供的一种机制,允许开发者为数据网格中的每一...

    自定义DataGrid分页块完美实现

    本话题将深入探讨如何自定义DataGrid的分页块,实现一个完美的分页效果。 DataGrid的分页功能默认提供了一些基本选项,如每页显示的记录数和页码导航。然而,这些默认设置可能无法满足所有需求,比如自定义样式、...

    Flex 自定义DataGrid,带增删改查等各种功能

    Flex 自定义DataGrid,带增删改查等各种功能.列锁定,序号等各种功能.

    自定义datagrid

    ### 自定义 DataGrid 控件详解 #### 一、引言 在软件开发过程中,数据展示是常见需求之一,而 DataGrid 控件因其直观且灵活的特点成为开发者们的首选。本文将基于给定的部分内容,深入探讨如何自定义 DataGrid ...

    WPF中自定义复杂DataGrid列样式

    WPF中DataGrid控件有时需要在一列中显示多个字段数据,并实现一定的排版,本示例即为解决此类问题提供参考。

    自定义的 DataGrid样式

    自定义DataGrid样式可以帮助开发者根据应用程序的需求调整控件的外观和交互方式,使其更符合用户界面的设计规范。下面我们将深入探讨如何自定义DataGrid样式及其相关的知识点。 1. **创建资源字典** 自定义...

    Mobile下自定义DataGrid控件源代码

    本文将深入探讨如何在移动环境下,针对.NET Compact Framework实现一个自定义的`DataGrid`控件,以实现个性化显示,包括编辑、下拉列表和选择框等功能。 首先,`NorthwindDataSet.Designer.cs`文件通常包含了对...

    flex自定义datagrid

    在Flex编程中,自定义DataGrid是常见的需求,特别是在处理大量数据并需要提供用户友好的交互体验时。本文将深入探讨如何在Flex中实现自定义的DataGrid,以支持复选框选择和分页功能。 首先,让我们了解Flex ...

    自定义DataGrid Jquery插件经典

    Jquery自定义插件经典参考,为个人在项目开发中依据需要定制开发基于html代码...一行 dataGrid = $("#dg").xpDataGrid({"bgcolor":"blue","rowWidth":50,"rowHeight":22});即可达到效果。即查学习的经典与实用的经典。

    DataGrid模板列自定义控件

    DataGrid中的模板列(DataGridTemplateColumn)允许开发者自定义单元格的显示和交互方式。通过模板列,我们可以使用DataTemplate来指定列的视觉树结构,从而展示复杂的数据模型或者嵌入自定义控件。例如,你可以创建...

    wpf DataGrid 自定义样式!

    在默认情况下,`DataGrid` 提供了基本的样式和布局,但为了满足特定的界面设计需求,我们往往需要对它进行自定义。本篇文章将详细介绍如何利用 WPF 的 `ControlTemplate` 对 `DataGrid` 进行自定义样式,以及如何为...

    C++自定义的datagrid控件

    首先,这个自定义datagrid控件可能涉及以下关键知识点: 1. **窗口消息处理**:C++中,控件的操作是基于Windows消息机制的,如WM_PAINT用于绘制,WM_SIZE用于处理窗口大小变化等。开发者需要理解并处理这些消息以...

    .NET CF自定义DataGrid格式

    自定义DataGrid单元格格式化主要通过以下几种方式实现: 1. **CellFormatting事件**:这是DataGrid控件提供的一个关键事件,当单元格即将显示时触发。在事件处理程序中,你可以访问到单元格的值、列信息和行信息,...

Global site tag (gtag.js) - Google Analytics