Flex 动态生成DataGrid列 & 参数传递

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="init()">
	<mx:Script>
		<![CDATA[
			import mx.collections.ArrayCollection;
			import mx.controls.Alert;
			import mx.controls.ComboBox;
			import mx.controls.DataGrid;
			import mx.controls.dataGridClasses.DataGridColumn;
			import mx.events.ListEvent;
			[Bindable]
			//  自定义数据源   
			private var dgDataArr:Array = [{name: "Jon", job: "officer",addnew:'aaaa',age:""},
				{name: "James", job: "seller",addnew:'bbbb',age:""},
				{name: "Jodon", job: "manager",addnew:'cccc',age:""},
				{name: "Jon", job: "officer",addnew:'aaaa',age:""},
				{name: "Jon", job: "officer",addnew:'aaaa',age:""},
				{name: "Jon", job: "officer",addnew:'aaaa',age:""},
				{name: "Jon", job: "officer",addnew:'aaaa',age:"20"},
			];
			
			var dataGrid:DataGrid = new DataGrid();
			
			private function init():void
			{
				var dgData:ArrayCollection = new ArrayCollection(dgDataArr);
				dgData.filterFunction
				// 自定义DataGrid控件
				dataGrid.x = 10; // X轴坐标
				dataGrid.y = 20; // Y轴坐标
				dataGrid.editable = false; // 数据项是否能编辑
				dataGrid.percentWidth  = 100; // 控件宽度
				dataGrid.percentHeight = 100; // 控件高度
				dataGrid.setStyle("fontSize", 14);
				dataGrid.styleName
				dataGrid.dataProvider = dgData; // 设置数据源
				
				// 添加监听事件类型与触发函数
				dataGrid.addEventListener(ListEvent.ITEM_CLICK, 
		        function(event:ListEvent):void{itemClickHandler(event,'你好')}); 
				
				addChild(dataGrid); // 添加dataGrid控件
				
				var columns:Array = new Array();
				var col:DataGridColumn;
				for ( var i:* in dgDataArr[0] ) {
					col = new DataGridColumn(i);
					columns.push(col);
				}
				dataGrid.columns = columns;
				
			}
			private function itemClickHandler(e:ListEvent,str:String):void
			{
				Alert.show(this.dataGrid.selectedItem.name.toString()+"--"+str);
			}
		]]>
	</mx:Script>
</mx:Application>


 

前台参考片段

 private function executeSelectHandler(event:ResultEvent):void{
	this.closeLoading();
	var colunmsNamesArr:ArrayCollection = event.result.colunmsNames as ArrayCollection;
	var dataList:ArrayCollection = event.result.dataList as ArrayCollection;
		    	
		    	
	/**动态构造列**/
	var dgc:DataGridColumn=new DataGridColumn();
	var dgcolumns:Array = new Array();
	if(colunmsNamesArr != null && colunmsNamesArr.length > 0){
		for (var i:int=0;i<colunmsNamesArr.length;i++){
			dgc = new DataGridColumn();
			dgc.dataField = colunmsNamesArr[i];
			dgcolumns.push(dgc);
		}
	}
	dg.columns = dgcolumns;
	dg.editable = false;
	dg.dataProvider = dataList;
	dg.validateNow();	    
}


后台数据构造片段

public Map<String, List<?>> executeSelect(String sql) throws SQLException{
		Map<String, List<?>> rsMap = new HashMap<String, List<?>>();
		rsMap.put("colunmsNames", null);
		rsMap.put("dataList", null);

		//动态列
		List<String> colunmsNames = new ArrayList<String>();

		Connection conn = getDBConnection();
		Statement statement = conn.createStatement();
		ResultSet rs;
		try {
			rs = statement.executeQuery(sql);
			ResultSetMetaData metaData = rs.getMetaData();
			while (rs.next()) {
				for(int i=1;i<metaData.getColumnCount() + 1;i++){
					colunmsNames.add(metaData.getColumnName(i).toString());
				}
				rsMap.put("colunmsNames", colunmsNames);
				break;
			}

			List<Object> listEntity = new ArrayList<Object>();
			//动态数据
			List<Object[]> dataListObj = PaginationUtilsSqlList.initialize(sql, this.genericBaseDAO, "dg");
			List<String> colunmsNamesArr = (List<String>) rsMap.get("colunmsNames");
			for (int i = 0; i < dataListObj.size(); i++) {
				Object[] sourceData = dataListObj.get(i);
				Map<String, String> map = new HashMap<String, String>();
				for (int j = 0; j < colunmsNamesArr.size(); j++) {
					map.put(colunmsNamesArr.get(j),sourceData[j] == null ?"": sourceData[j].toString());
				}
				listEntity.add(map);
			}
			rs.close();
			rsMap.put("dataList", listEntity);
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			conn.close();
		}
		return rsMap;
	}
/**
	 * 获取 数据库连接
	 * @param sql
	 * @return
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 */
	private Connection getDBConnection(){

		Connection conn = null;

		try{
			Class.forName(driverClassName);
		}catch(ClassNotFoundException e){
			e.printStackTrace();
		}
		try{
			conn = DriverManager.getConnection(url,username,password);
		}catch(SQLException e){
			e.printStackTrace();
		}
		return conn; 
	}







  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
WPF DataGrid 动态指的是在运行时根据数据源的变化来动态添加或移除。 在WPF中,可以使用DataGrid控件来展示数据。通常,我们可以在XAML中使用静态定义的来显示数据。然而,有时我们需要根据数据的不同特性来动态创建。 要实现动态的WPF DataGrid,我们需要在代码中处理数据源的变化并相应地动态添加或删除。首先,我们需要确定数据源的类型及结构,并监听数据源的变化。当数据源发生变化时,我们可以清空DataGrid集合,然后重新创建并添加新的动态创建需要以下步骤: 1. 监听数据源的变化,例如使用ObservableCollection作为数据源,并注册其CollectionChanged事件。 2. 在事件处理程序中,判断变化的类型,如果是添加或删除操作,则清空DataGrid集合。 3. 遍历数据源的每个元素,获取其属性信息,并创建对应的DataGrid。 4. 将创建的添加到DataGrid集合中。 在动态创建时,可以根据数据源的属性信息来确定的类型、宽度、标题等。例如,可以根据数据源的属性类型来选择不同的类型,如文本、复选框或日期等。 需要注意的是,动态的性能可能受到影响,特别是在数据源包含大量数据或频繁发生变化时。因此,我们应该谨慎使用动态,并根据实际需求进行性能优化。一种优化方法是使用虚拟化技术,仅加载可见的行和,以提升性能。 总而言之,通过在代码中监听数据源的变化,我们可以实现WPF DataGrid动态。这种方法允许我们根据数据源的变化来自动创建或删除,以适应不同的数据展示需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值