首页 > 其他分享 >FLEX4实践—动态生成DataGrid及应用客户化itemRenderer

FLEX4实践—动态生成DataGrid及应用客户化itemRenderer

时间:2023-05-25 17:34:38浏览次数:42  
标签:itemRenderer DataGrid DATE mxml 格式 数据 FLEX4


应用场景:
1)从后台取到的数据为数组类型,但数据的列名及列个数均是动态的

2)抽取到的数据中有些是DATE类型的,如果直接显示在DataGrid中默认格式很难让用户接受,希望对特殊类型的数据(如日期)进行格式转换处理

 

下面的例子将模拟这一场景:
数据准备:gridColumns1搭配gridProvider1,gridColumns2搭配gridProvider2;两组数据的列名及列个数均不同,其中一组数据包括DATE类型数据。

 

主应用:DynamicGridTest.mxml

<?xml version="1.0" encoding="utf-8"?>
<s: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" minWidth="955" minHeight="600">
	<fx:Script>
		<!--[CDATA[
			import components.DynamicGridWin;
			import mx.managers.PopUpManager;
			private function showWin1():void{
				var newWindow:DynamicGridWin=new DynamicGridWin;
				newWindow.title="Grid1";
				newWindow.gridColumns = gridColumns1;
				newWindow.gridProvider = gridProvider1;
				PopUpManager.addPopUp(newWindow, this, true);
				PopUpManager.centerPopUp(newWindow);
			}
			private function showWin2():void{
				var newWindow:DynamicGridWin=new DynamicGridWin;
				newWindow.title="Grid2";
				newWindow.gridColumns = gridColumns2;
				newWindow.gridProvider = gridProvider2;
				PopUpManager.addPopUp(newWindow, this, true);
				PopUpManager.centerPopUp(newWindow);
			}
		]]-->
	</fx:Script>
	<fx:Declarations>
		<!-- Place non-visual elements (e.g., services, value objects) here -->
		<fx:Array id="gridColumns1">
			<fx:Object colCode='Name' colType='VARCHAR2'/>
			<fx:Object colCode='Price' colType='VARCHAR2'/>
			<fx:Object colCode='StartDate' colType='DATE'/>
		</fx:Array>
		<fx:Array id="gridProvider1">
			<fx:Object Name="Apple" Price="18" StartDate="{new Date()}"/>
			<fx:Object Name="Banana" Price="10" StartDate="{new Date(2010,1,3)}"/>
		</fx:Array>
		
		<fx:Array id="gridColumns2">
			<fx:Object colCode='Name' colType='VARCHAR2'/>
			<fx:Object colCode='Class' colType='VARCHAR2'/>
		</fx:Array>
		<fx:Array id="gridProvider2">
			<fx:Object Name="Apple" Class="1"/>
			<fx:Object Name="Banana" Class="3"/>
		</fx:Array>
	</fx:Declarations>
	<s:Button x="384" y="155" label="GridWin1" click="showWin1()"/>
	<s:Button x="532" y="155" label="GridWin2" click="showWin2()"/>
	
</s:Application>

组件DynamicGridWin.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009" 
		 xmlns:s="library://ns.adobe.com/flex/spark" 
		 xmlns:mx="library://ns.adobe.com/flex/mx" width="480" height="300" showCloseButton="true"
		 close="{PopUpManager.removePopUp(this)}"
		 creationComplete="init()">
	<fx:Declarations>
		<!-- Place non-visual elements (e.g., services, value objects) here -->
		<mx:DateFormatter id="dateFormatter" formatString="YYYY-MM-DD HH:NN:SS"/>
		<fx:Component id="dateRenderer">
			<mx:Text text="{outerDocument.dateFormatter.format(data[outerDocument.gridColumns[outerDocument.index].colCode])}"/>
		</fx:Component>
	</fx:Declarations>
	<fx:Script>
		<!--[CDATA[
			import mx.controls.dataGridClasses.DataGridColumn;
			import mx.managers.PopUpManager;
			private var _gridColumns:Array;
			private var _gridProvider:Array;
			private var _index:Number;
			
			public function set gridColumns(gridColumns:Array):void{
				this._gridColumns = gridColumns;
			}
			public function get gridColumns():Array{
				return this._gridColumns;
			}
			
			public function set gridProvider(gridProvider:Array):void{
				this._gridProvider = gridProvider;
			}
			public function get gridProvider():Array{
				return _gridProvider;
			}
			
			public function set index(index:Number):void{
				this._index = index;
			}
			public function get index():Number{
				return _index;
			}
			private function init():void{
				initGrid();
				initGridData();
			}
			private function initGrid():void{
				var cols:Array=datagrid.columns;
				for (var i:int=0; i < this.gridColumns.length; i++)
				{
					index = i;
					var dgc:DataGridColumn=new DataGridColumn(gridColumns[index].colCode);
					dgc.headerText=gridColumns[index].nodeColName;
					dgc.sortable=false;
					dgc.width= 100;
					if(gridColumns[i].colType=='DATE')
						dgc.itemRenderer = dateRenderer;
					cols.push(dgc);
				}
				datagrid.columns=cols;
			}
			
			private function initGridData():void{
				this.datagrid.dataProvider = _gridProvider;
			}
		]]-->
	</fx:Script>
	<mx:DataGrid id="datagrid" width="100%" height="100%"/>
</mx:TitleWindow>

 

注:DynamicGridWin.mxml中的dateRenderer就是用以处理日期格式数据的格式转换,initGrid()实现动态生成表格并根据'ColType'判断是否需要添加itemRenderer进行类型转换显示。

 

演示效果:

GridWin1:

FLEX4实践—动态生成DataGrid及应用客户化itemRenderer_function

 

GridWin2:

FLEX4实践—动态生成DataGrid及应用客户化itemRenderer_function_02

标签:itemRenderer,DataGrid,DATE,mxml,格式,数据,FLEX4
From: https://blog.51cto.com/u_16129500/6350342

相关文章

  • WPF实现两个DataGrid列表的滚动条同步
    实现目标:左右两个DataGrid对比显示,希望拖动一个列表的滚动条,就把别一个列表的滚动条移动到相应位置。 主要思路是:通过FindVisualChildren找到两个DataGrid的ScrollViewer控件,然后注册两个控件的ScrollChanged事件,只要有一个ScrollViewer的VerticalOffset值变了,就相应地修改另......
  • easyui datagrid 标题换行
     .datagrid-header-row.datagrid-cellspan{white-space:normal!important;word-wrap:normal!important;}.datagrid-header.datagrid-cell{height:auto;line-height:20px;} ......
  • 第3章 数据库操作-通过DataGridView控件进行数据库的操作
    通过DataGridView控件进行数据库的操作usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;usingS......
  • WPF入门教程系列二十四——DataGrid使用示例(1)
    WPF入门教程系列目录WPF入门教程系列二——Application介绍WPF入门教程系列三——Application介绍(续)WPF入门教程系列四——Dispatcher介绍WPF入门教程系列五——Window介绍WPF入门教程系列十一——依赖属性(一)WPF入门教程系列十五——WPF中的数据绑定(一)      ......
  • DataGridView控件的显示效率
    C#,如何提高DataGridView控件的显示效率?一次要管理100万条记录,如何才能不卡?不仅仅是虚拟模式的问题。(1)采用virtualmode,不要使用datagridview1.datasource=dt如何使用虚拟模式,参见https://blog.csdn.net/qq_30122639/article/details/53739607和https://bbs.csdn.net/topics/390......
  • C# DataGridView自定义排序
    privatevoiddgvScanFai_SortCompare(objectsender,DataGridViewSortCompareEventArgse){if(e.Column.Name=="Time"){stringcellValue1=e.CellValue1.ToString();stringcellValu......
  • SQL_DataGridView控件
    1.DataGridView控件——加载数据usingSystem;usingSystem.Data;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Data.SqlClient;namespaceTest03{publicpartialclassForm1:Form{publicForm1(){Initializ......
  • Wpf Datagrid 操作总结
    1.行选中时,.SelectedIndex可以获取行索引2.单元格选中时,获取行索引可以用以下(Grid为DataGrid的对象)DataGridCellInfoselectedCell=Grid.SelectedCells.FirstOrDefault();//没有选中Recordif(selectedCell==null||selectedCell.Column==null)return;intinde......
  • 20230425001 - DataGridView绑定了数据之后, 再添加CheckBox列的解决方案
                 DataGridViewCheckBoxColumncheckBoxColumn=newDataGridViewCheckBoxColumn();           checkBoxColumn.Name="select";           checkBoxColumn.HeaderText="选择";           dgv_M.Columns.Inse......
  • Winform DataGridView使用最佳方法
    一般使用到DataGridView控件的都是涉及到多数据显示及更改。非数据库最好使用一个类写个model:internalclassDataModel{publicintid{get;set}publicstringname{get;set}publicstringtel{get;set}…… } 然后在DataGridView数据绑定此对象重新加载数据的时候......