`

Flex grid 复杂表头

    博客分类:
  • Flex
阅读更多

Flex grid 复杂表头

第一种 最简单的两重表头

code 如下:

 

<?xml version="1.0"?>
<mx:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx" initialize="init()">
	
	<fx:Script>
		<![CDATA[
			import mx.collections.ArrayCollection;
			
			[Bindable]
			private var dpFlat:ArrayCollection = new ArrayCollection([
				{Region:"Southwest", Territory:"Arizona", 
					Territory_Rep:"Barbara Jennings", Actual:38865, Estimate:40000}, 
				{Region:"Southwest", Territory:"Arizona", 
					Territory_Rep:"Dana Binn", Actual:29885, Estimate:30000},  
				{Region:"Southwest", Territory:"Central California", 
					Territory_Rep:"Joe Smith", Actual:29134, Estimate:30000},  
				{Region:"Southwest", Territory:"Nevada", 
					Territory_Rep:"Bethany Pittman", Actual:52888, Estimate:45000},  
				{Region:"Southwest", Territory:"Northern California", 
					Territory_Rep:"Lauren Ipsum", Actual:38805, Estimate:40000}, 
				{Region:"Southwest", Territory:"Northern California", 
					Territory_Rep:"T.R. Smith", Actual:55498, Estimate:40000},  
				{Region:"Southwest", Territory:"Southern California", 
					Territory_Rep:"Alice Treu", Actual:44985, Estimate:45000}, 
				{Region:"Southwest", Territory:"Southern California", 
					Territory_Rep:"Jane Grove", Actual:44913, Estimate:45000}
			]);
			
		private function init()
		 {
			 
		 }
		]]>
	</fx:Script>
	
	<mx:Panel title="AdvancedDataGrid Control Example"
			  height="75%" width="75%" layout="horizontal"
			  paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10">
		
		<mx:AdvancedDataGrid id="myADG" 
							 width="100%" height="100%" 
							 initialize="gc.refresh();">        
			<mx:dataProvider>
				<mx:GroupingCollection2 id="gc" source="{dpFlat}">
					<mx:grouping>
						<mx:Grouping>
							<mx:GroupingField name="Region"/>
							<mx:GroupingField name="Territory"/>
						</mx:Grouping>
					</mx:grouping>
				</mx:GroupingCollection2>
			</mx:dataProvider>        
			
			<mx:groupedColumns>
				<mx:AdvancedDataGridColumn dataField="Region"/>
				
				<mx:AdvancedDataGridColumnGroup  id="headerText" headerText="Territory">
					<mx:AdvancedDataGridColumn dataField="Territory"/>
					<mx:AdvancedDataGridColumn dataField="Territory_Rep"
											   headerText="Territory Rep"/>
				</mx:AdvancedDataGridColumnGroup>
				<mx:AdvancedDataGridColumnGroup  id ="Actual" headerText="Actual">
					<mx:AdvancedDataGridColumn dataField="Actual"/>
					<mx:AdvancedDataGridColumn dataField="Estimate"/>
				</mx:AdvancedDataGridColumnGroup>
				
			</mx:groupedColumns>
		</mx:AdvancedDataGrid>
	</mx:Panel>
	
</mx:Application>

 

第二种 复杂表头

定制ClassFactory。。。重写展现方式

Code

 

<?xml version="1.0"?>
<mx:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx" initialize="init()">
	
	<fx:Script>
		<![CDATA[
			
			import mx.collections.ArrayCollection;
			
			[Bindable]
			private var dpFlat:ArrayCollection = new ArrayCollection([
				{Region:"Southwest", Territory:"Arizona", 
					Territory_Rep:"Barbara Jennings", Actual:38865, Estimate:40000}, 
				{Region:"Southwest", Territory:"Arizona", 
					Territory_Rep:"Dana Binn", Actual:29885, Estimate:30000},  
				{Region:"Southwest", Territory:"Central California", 
					Territory_Rep:"Joe Smith", Actual:29134, Estimate:30000},  
				{Region:"Southwest", Territory:"Nevada", 
					Territory_Rep:"Bethany Pittman", Actual:52888, Estimate:45000},  
				{Region:"Southwest", Territory:"Northern California", 
					Territory_Rep:"Lauren Ipsum", Actual:38805, Estimate:40000}, 
				{Region:"Southwest", Territory:"Northern California", 
					Territory_Rep:"T.R. Smith", Actual:55498, Estimate:40000},  
				{Region:"Southwest", Territory:"Southern California", 
					Territory_Rep:"Alice Treu", Actual:44985, Estimate:45000}, 
				{Region:"Southwest", Territory:"Southern California", 
					Territory_Rep:"Jane Grove", Actual:44913, Estimate:45000}
			]);
			
		private function init()
		 {
			var classFactory = new ClassFactory(HeaderRenderer);
			classFactory.properties = {type: 'region1', defaultExpandCollapseImage: 'region1', headerLevel1: 'region1', headerLevel2: 'region2', headerLevel3:'region3'};
			region.headerRenderer = classFactory;
			
			
			classFactory = new ClassFactory(TestGridHeader);
			classFactory.properties = {fullName: 'Test', shortName: 'Test', mouseOverTitle: 'Test Territory', hasAccess: true};
			test1.headerRenderer = classFactory;
			
//			programViewGridColumns.push(programHierarchyColumn);
		 }
		]]>
	</fx:Script>
	
	<mx:Panel title="AdvancedDataGrid Control Example"
			  height="75%" width="75%" layout="horizontal"
			  paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10">
		
		<mx:AdvancedDataGrid id="myADG"  sortableColumns="false" styleName="datagridsummary" verticalScrollPolicy="auto" resizableColumns="false" draggableColumns="false"
							 width="100%" height="100%" 
							 initialize="gc.refresh();">        
			<mx:dataProvider>
				<mx:GroupingCollection2 id="gc" source="{dpFlat}">
					<mx:grouping>
						<mx:Grouping>
							<mx:GroupingField name="Region"/>
							<mx:GroupingField name="Territory"/>
						</mx:Grouping>
					</mx:grouping>
				</mx:GroupingCollection2>
			</mx:dataProvider>        
			
			<mx:groupedColumns>
				<mx:AdvancedDataGridColumn id ='region' dataField="Region" width="300"/>
				
				<mx:AdvancedDataGridColumnGroup  id="headerText" headerText="Territory" >
					<mx:AdvancedDataGridColumn id="test1" dataField="Territory" width="100" />
					<mx:AdvancedDataGridColumn dataField="Territory_Rep"
											   headerText="Territory Rep" width="100"/>
				</mx:AdvancedDataGridColumnGroup>
				<mx:AdvancedDataGridColumnGroup  id ="Actual" headerText="Actual">
					<mx:AdvancedDataGridColumn dataField="Actual" width="100"/>
					<mx:AdvancedDataGridColumn dataField="Estimate" width="100"/>
				</mx:AdvancedDataGridColumnGroup>
				
			</mx:groupedColumns>
		</mx:AdvancedDataGrid>
	</mx:Panel>
	
</mx:Application>

classfactory 如下:

HeaderRenderer

 

<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:mx="library://ns.adobe.com/flex/mx" width="100%" height="100%" horizontalAlign="center" verticalAlign="top" horizontalScrollPolicy="off" verticalScrollPolicy="off" paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" verticalGap="0" horizontalGap="0">
	<fx:Declarations>
		<!-- Place non-visual elements (e.g., services, value objects) here -->
	</fx:Declarations>
	<fx:Style source="./assets/css/main.css"/>
	<fx:Script>
		<![CDATA[
			import mx.controls.Alert;
			[Bindable]
			public var type:String;
			[Bindable]
			public var defaultExpandCollapseImage:String;
			[Bindable]
			public var headerLevel1:String;
			[Bindable]
			public var headerLevel2:String;
			[Bindable]
			public var headerLevel3:String;
		]]>
	</fx:Script>
	<mx:VBox width="100%">
		<mx:HBox width="100%" height="100%">
			<mx:Image source="{'./assets/images/plus.gif'}" toolTip="'Expand All'" click=""/>
			<mx:Label text="{headerLevel1}" styleName="gridHeader" textDecoration="none"/>
		</mx:HBox>
		<mx:HBox width="100%" height="100%" paddingLeft="20">
			<mx:Image source="{'./assets/images/sub_dot.gif'}"/>
			<mx:Label text="{headerLevel2}" alpha="0.5" textDecoration="none"/>
		</mx:HBox>
		<mx:HBox width="100%" height="100%" paddingLeft="20" id="level3Header">
			<mx:Image source="{'./assets/images/sub_dot.gif'}" visible="true"/>
			<mx:Image source="{'./assets/images/sub_dot.gif'}"/>
			<mx:Label text="{headerLevel3}" alpha="0.5" textDecoration="none"/>
		</mx:HBox>
	</mx:VBox>
</mx:HBox>

 

TestGridHeader

 

package 
{
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.text.AntiAliasType;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
	import flash.text.TextFormat;
	
	import mx.containers.VBox;
	import mx.controls.Alert;
	import mx.controls.ToolTip;
	import mx.controls.listClasses.IListItemRenderer;
	import mx.core.FlexGlobals;
	import mx.messaging.AbstractConsumer;

	public class TestGridHeader extends VBox implements IListItemRenderer {
		[Bindable]public var fullName:String;
		[Bindable]public var shortName:String;
		[Bindable]public var mouseOverTitle:String;
		[Bindable]public var hasAccess:Boolean = true;
		[Bindable]public var wrapText:Boolean = false;
		private var _lbl:TextField;
		
		override protected function createChildren():void {
			super.createChildren();
			var _txtFormat:TextFormat = new TextFormat();
			_txtFormat.font = "myPlainFont";
			_txtFormat.size = 11;
			_txtFormat.bold = true;
			_txtFormat.color = 0x020264;
			_txtFormat.align = "left";
			
			_lbl = new TextField();
			_lbl.alpha = 1
			_lbl.wordWrap = wrapText;
			_lbl.autoSize = TextFieldAutoSize.LEFT;
			_lbl.embedFonts = true;
			_lbl.antiAliasType = AntiAliasType.ADVANCED;
			_lbl.defaultTextFormat = _txtFormat;
			_lbl.rotation = 270;
			_lbl.mouseEnabled = false;
			_lbl.width = 60;
			_lbl.height = 100;
			
			var sprite:Sprite = new Sprite();
			sprite.buttonMode = true;//Mouse Hand Cursor
			sprite.addChild(_lbl);
			
			rawChildren.addChild(sprite);
			this.toolTip = mouseOverTitle;
		}
		override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
			super.updateDisplayList(unscaledWidth,unscaledHeight);
			if(shortName != null && shortName != "") {
				_lbl.textColor = 0xffffff;
				_lbl.text = shortName;
				_lbl.y = 25;
				_lbl.x = (width - _lbl.width)/2;
				_lbl.textColor = 0x020264;
			}
		}
	}
}



 

 

分享到:
评论

相关推荐

    flex 多层表头advancegrid 导出excel

    在Flex开发中,有时我们需要将数据展示在复杂的表格中,比如多层表头的AdvanceGrid。这类需求在数据统计、分析或报告展示等场景中非常常见。 AdvanceGrid是一款功能强大的Flex组件,它允许我们创建自定义布局和多层...

    Flex Data Grid Exporter

    Flex Data Grid Exporter 是一个专门用于Flex应用程序的数据网格导出工具。它允许用户将数据网格中的数据导出为常见的文件格式,例如CSV(逗号分隔值),以便于数据分析、存储或进一步处理。这个组件在Flex开发中...

    Flex dataGrid 表头添加按钮

    老外做的功能有点复杂,我整理了其中一个简单的效果,在表头上加一个按钮。扩展的话可以实现数据过滤,或者下拉动态隐藏指定列(灵感都来自extjs呵呵)。 也可以在此下载:...

    extjs 双表头

    双表头在ExtJS中可以通过`Ext.grid.header.Container`和`Ext.grid.column.Column`组件的组合来实现。首先,创建一个`headerContainer`,然后在这个容器中添加两个或多个`column`,这些`column`可以设置不同的标题和...

    两个表头固定的示例

    表头和表格主体分别作为子元素,表头使用`align-self: flex-start`使其固定在顶部。 3. **CSS Grid**:CSS Grid布局也可以实现类似的效果。创建一个网格容器,将表头和主体视为独立的行,使用`grid-template-rows`...

    datagrid 4种解决table对齐

    在`Datagrid`的容器上设置`display: flex`,然后使用`align-items`和`justify-content`属性,可以轻松实现表头和列的水平和垂直对齐。例如,`align-items: center`使内容垂直居中,`justify-content: space-between`...

    html行列表头锁定

    最后,`datatables`或`floatThead`等插件提供了更强大的功能,如自动计算表头大小、处理复杂数组数据等。它们通过JavaScript库封装了上述逻辑,简化了开发过程。 总结来说,"html行列表头锁定"涉及到HTML表格结构、...

    FLEX 表格合并

    这个是针对与flex 的表格合并,包括表头合并,有好几种呈现方式,上面只是一种。

    table 锁表头

    可以利用这些特性创建一个包含表头和表体的容器,然后通过Flex或Grid布局来实现表头的固定。这种方法在现代浏览器中效果很好,但可能不支持所有老旧浏览器。 4. **第三方库**: 有一些成熟的JavaScript库,如...

    实现固定表头表格的总结

    在这种情况下,我们可以使用CSS的`display: flex`和`display: grid`属性,配合JavaScript来实现固定表头。这种方式允许更多的定制和兼容性,但实现起来相对复杂。 最后,“js”文件可能包含了处理动态数据加载、...

    html table 固定表头和列

    为了确保兼容性,可能需要使用JavaScript或者更复杂的CSS技巧,如使用`display: flex;`和`display: grid;`来实现类似的效果。 总结,"html table 固定表头和列"是提高用户界面可读性和用户体验的关键技术,主要通过...

    Flex高级表格分组与列锁定

    在Flex开发中,高级表格(Advanced Data Grid)是Adobe Flex框架提供的一种强大的数据展示组件,它允许开发者以灵活的方式展示复杂的数据集。本教程将深入探讨如何实现表格的标题分组、列锁定以及相关的样式设置。 ...

    Flex中如何动态生成DataGrid以及动态生成表头

    在Flex开发中,有时我们需要根据应用的需求动态地创建DataGrid组件以及它的表头。这是因为静态地定义所有列可能不适用于所有场景,特别是当数据来源未知或者需要根据用户输入来定制时。以下是一个关于如何在Flex中...

    表头拉伸导航条渐变修改

    2. CSS Grid:如果表头和表格主体使用了CSS Grid布局,那么可以通过`grid-template-columns`等属性实现自动扩展和收缩。 3. JavaScript/jQuery:对于更复杂的需求,可能需要借助JavaScript或者jQuery来监听窗口的...

    Extjs动态GRID

    使用`flex`属性,可以指定列的相对宽度,使得Grid在不同屏幕尺寸下保持良好的布局。 5. 表头菜单: EXTJS Grid支持自定义表头菜单,用户可以通过右键点击表头来选择排序、隐藏列等操作。开发者可以自定义这个菜单,...

    flex 合并单元格

    了解这些原理和技巧,你可以在Flex应用程序中创建更复杂的用户界面,以满足不同的数据展示需求。如果使用了像MecGridLib这样的第三方库,记得查看其文档以获取更多特定于库的合并方法和优化建议。

    固定table的thead表头

    - 对于更复杂的交互或浏览器兼容性问题,可能需要借助JavaScript或jQuery插件如`fixedHeaderTable`、`floatThead`等,它们可以自动处理表头固定的问题。 5. **响应式设计**: - 考虑到不同的设备和屏幕尺寸,表头...

    complexgrid

    复杂表头(Complex Grid)是数据展示的一个高级形式,尤其适用于处理具有多级分类或多层次关系的数据。在Flex 4.6中,DataGrid组件被用来显示和操作表格数据,但默认功能可能无法满足所有复杂布局的需求。因此,...

    表头、第一列固定的表格

    随着现代浏览器对CSS Flexbox和Grid布局的支持,也有新的方法来实现固定表头和第一列。这两种布局模式允许更灵活的控制元素的排列和对齐。例如,使用Flexbox,可以在容器上设置`display: flex`,然后对子元素进行...

    HTML表头可以随表单内容横向滚动,内容可横可纵滚动

    要实现表头固定不动,我们首先将表头和表体分别放在两个独立的`&lt;div&gt;`中,并为这两个`div`设置不同的CSS样式。描述中的"HTML div"就是指这种用法。 1. **固定表头**: 创建一个`&lt;div&gt;`用于包裹表头部分,将其CSS...

Global site tag (gtag.js) - Google Analytics