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

从数据库读取数据并在Tree上分组呈现

    博客分类:
  • Flex
阅读更多
最近有一项目,需要从mysql数据库读取数据,到Flex中呈现在Tree上,原来一直用读取xml,现在不想用xml了,直接读取数据后分析呈现。

如果是单层数据还好办,直接用XMLListCollection简要分析完就可以了,现在涉及到要分组显示,即相同职务的员工并到一组去
即:

设计师组:  id   employeeName  employeeGroup .....
                     12     张三          设计师组
                     13     李四          设计师组
                     14     王二麻子      设计师组
烫染师组: 
                     15     黑娃          烫染师组
                     16     张山          烫染师组
                     17     王三麻子      烫染师组



//项目的最终效果



import mx.collections.ArrayCollection;
import mx.collections.XMLListCollection;
import mx.containers.Panel;
import mx.controls.Tree;
import mx.core.ClassFactory;
import mx.events.ListEvent;


//这里写的是hard data
//实际操作时   从数据库读取数据
private var companyEmployee:Array=[
	{employeeGroup:"理疗师组", employeeID:1, employeeName:"张强", employeeRegPlace:"总部店"}, 
	{employeeGroup:"烫染师组", employeeID:11, employeeName:"罗超", employeeRegPlace:"总部店"}, 
	{employeeGroup:"设计师组", employeeID:12, employeeName:"当当", employeeRegPlace:"总部店"}, 
	{employeeGroup:"前台收银", employeeID:3, employeeName:"伟伟", employeeRegPlace:"总部店"}, 
	{employeeGroup:"伙伴员组", employeeID:7, employeeName:"罗兵", employeeRegPlace:"总部店"}, 
	{employeeGroup:"烫染师组", employeeID:8, employeeName:"超超", employeeRegPlace:"城南店"}];
private var company:Array=[
	{companyName:"总部店", id:"1"}, 
	{companyName:"城南店", id:"2"}];


private function init():void
{
	/****
	 * 相同组的员工可能不止一人
	 * 理疗师组------分析数据并归组
	 * **/
	AnalyzeEmployeeGroup();
}


private var AnalyzedACOData:ArrayCollection=new ArrayCollection()

private function AnalyzeEmployeeGroup():void
{
	for (var k:int=0; k < companyEmployee.length; k++)
	{
		var obj:Object=new Object();
		var obj2:Object=new Object()
		var childrenACO:ArrayCollection=new ArrayCollection();
		if (k == 0)
		{
			obj.employeeGroup=companyEmployee[k].employeeGroup;
			childrenACO.addItem(companyEmployee[k])
			obj.children=childrenACO;
			AnalyzedACOData.addItem(obj)
		}
		else
		{
			//判断companyEmployee[k].employeeGroup是否在数组中,如果存在,
			//取得其索引,加入children
			//否则  新加入数组
			var returnNum:Number=findIsDataInArrays(companyEmployee[k].employeeGroup);
			//找到有
			if (returnNum != -1)
			{
				//索引值
				var idx:Number=findDataInArraysOrder(companyEmployee[k].employeeGroup);
				var oldObj:Object=AnalyzedACOData.getItemAt(idx);
				ArrayCollection(oldObj.children).addItem(companyEmployee[k])
			}
			else
			{
				//没有找到
				obj.employeeGroup=companyEmployee[k].employeeGroup;
				childrenACO.addItem(companyEmployee[k])
				obj.children=childrenACO;
				AnalyzedACOData.addItem(obj);
			}
		}
	}
	customTreeData()
}

private function findIsDataInArrays(input:String):Number
{
	for (var i:int=0; i < AnalyzedACOData.length; i++)
	{
		if (AnalyzedACOData[i].employeeGroup === input)
		{
			return i;
		}
	}
	return -1;
}

private function findDataInArraysOrder(input:String):Number
{
	for (var i:int=0; i < AnalyzedACOData.length; i++)
	{
		if (AnalyzedACOData[i].employeeGroup === input)
		{
			return i;
			break;
		}
	}
	return -1;
}


private var dataManageTreeDataXML:XMLListCollection

private function customTreeData():void
{
	//tree呈现的数据
	dataManageTreeDataXML=new XMLListCollection();
	
	var insertDataXML:XML=<folder label="录入数据"/>;
	var viewAdminDataXML:XML=<folder label="查看管理"/>;
	
	//控制菜单一   公司员工
	var employeeXML:XML=new XML(<folder label="公司员工"></folder>);
	for (var i:int=0; i < AnalyzedACOData.length; i++)
	{
		var xmlStr:String="<folder label=" + "\"" + AnalyzedACOData[i].employeeGroup + "\"" + "/>";
		var tempXML:XML=XML(xmlStr);
		employeeXML.appendChild(tempXML)
		//取得 Children
		var childrenArr:*=(AnalyzedACOData[i].children);
		for (var j:int=0; j < childrenArr.length; j++)
		{
			var infoForEmployeeStr:String="<folder label=" + "\"" + childrenArr[j].employeeName + "\"" + "employeeID=" + "\"" + childrenArr[j].employeeID + "\"" + "/>"
			var sub_dataXML:XML=XML(infoForEmployeeStr);
			//加入操作菜单
			sub_dataXML.appendChild(insertDataXML)
			sub_dataXML.appendChild(viewAdminDataXML);
			
			tempXML.appendChild(sub_dataXML)
		}
		
	}
	dataManageTreeDataXML.addItem(employeeXML);
	
	//控制菜单二
	var companyXML:XML=new XML(<folder label="公司各店"></folder>);
	for (var k:int=0; k < company.length; k++)
	{
		var xmlForCompanyInfoStr:String="<folder label=" + "\"" + company[k].companyName + "\"" + "id=" + "\"" + company[k].id + "\"" + "/>"
		var tempForCompanyXML:XML=XML(xmlForCompanyInfoStr);
		//加入操作菜单
		tempForCompanyXML.appendChild(insertDataXML)
		tempForCompanyXML.appendChild(viewAdminDataXML);
		
		companyXML.appendChild(tempForCompanyXML)
	}
	dataManageTreeDataXML.addItem(companyXML);
	
	
	
	
	trace("===" + dataManageTreeDataXML)
	createTree()
}


[Embed(source="/assets/plus.gif")]
private var PLUS:Class;
[Embed(source="/assets/minus.gif")]
private var MINUS:Class;

private function createTree():void
{
	var panel:Panel=new Panel();
	panel.width=150
	panel.percentHeight=100;
	this.addElement(panel);
	
	
	var MyTree:Tree=new Tree();
	MyTree.horizontalScrollPolicy="auto"
	//MyTree.allowChangeHorizontalScroll=true
	MyTree.percentHeight=100;
	MyTree.percentWidth=100
	//MyTree.minWidth=150;
	MyTree.labelField="@label";
	MyTree.showRoot=true;
	MyTree.setStyle("borderAlpha", "0.6")
	
	//MyTree.expandItem(treeData, true);
	MyTree.setStyle("lineColor", 0xff00ff);
	MyTree.setStyle("folderOpenIcon", null);
	MyTree.setStyle("folderClosedIcon", null);
	MyTree.setStyle("defaultLeafIcon", null);
	MyTree.setStyle("disclosureClosedIcon", PLUS);
	MyTree.setStyle("disclosureOpenIcon", MINUS);
	
	MyTree.itemRenderer=new ClassFactory(TreeItemLinesRenderer)
	MyTree.allowMultipleSelection=false
	MyTree.allowDragSelection=false
	
	
	MyTree.addEventListener(ListEvent.CHANGE, treeChanged);
	panel.addChild(MyTree);
	MyTree.dataProvider=dataManageTreeDataXML;
	var nodeList:XMLListCollection=MyTree.dataProvider as XMLListCollection;
	MyTree.validateNow();
	MyTree.expandItem(nodeList[0], true)
}

public function treeChanged(event:ListEvent):void
{
	var selectedNode:XML=Tree(event.target).selectedItem as XML;
	trace(selectedNode.parent())
	trace(selectedNode.@label)
	//trace(selectedNode.parent().@id)
	//执行analyzeID()
}


  • 大小: 7.1 KB
  • 大小: 16.6 KB
分享到:
评论
1 楼 stona126 2011-09-20  
TreeItemLinesRenderer  哪里来的????

相关推荐

    从数据库中读取数据并显示在RichTextBox

    ### 从数据库中读取数据并显示在RichTextBox #### 概述 本文将详细介绍如何在C#应用程序中实现从数据库读取数据,并将其显示在`RichTextBox`控件中的过程。这一技术常用于需要展示从数据库获取的信息的应用场景,如...

    easyui-tree多级菜单并动态与数据库交互

    在本项目中,我们主要探讨的是如何利用EasyUI框架创建一个具有多级菜单功能的树形结构,并且能够与后台数据库进行动态交互。EasyUI是一个基于jQuery的UI库,提供了丰富的组件,包括我们这里用到的树形控件(tree)。...

    从数据库读取图片文件

    当我们谈论“从数据库读取图片文件”时,通常涉及的是将图片作为BLOB(Binary Large Object)类型存储在数据库中,然后通过应用程序或API从数据库检索并显示这些图片。这一过程涉及到多个关键知识点,让我们逐一深入...

    基于JDBC从数据库中读取数据,在百度地图批量标注地点例程

    基于JDBC从数据库中读取数据,在百度地图批量标注地点例程

    从数据库中读取数据自动生成XML

    在本篇文章中,我们将讨论如何从数据库中读取数据自动生成XML文件。XML(Extensible Markup Language)是一种标记语言,用于存储和传输数据。它广泛应用于各种领域,包括网络开发、数据交换、配置文件等。 从数据库...

    图片上传至数据库及从数据库读取图片

    在IT领域,图片上传至数据库以及从数据库读取图片是一个常见的需求,特别是在开发涉及用户交互、内容管理和数据存储的应用程序时。以下是对这个主题的详细解释。 首先,我们需要理解为什么要把图片存储到数据库中。...

    Delphi从数据库读取数据并求平均值.rar

    本示例"Delphi从数据库读取数据并求平均值"就是这样一个典型的数据库操作实践,主要涉及到以下几个知识点: 1. **ADO(ActiveX Data Objects)组件**:Delphi通常使用ADO组件来连接和操作数据库。ADO是一种标准的...

    从access数据库读取数据写入xsl

    从access数据库读取写入xls表格,可以借鉴参考,对xls操作和access读写有学习借鉴的地方,写xls有几种方法,我的是一张表全部封装为一个range一次写入,速度很快,如果一个单元格一个单元格的写的话非常慢。

    图片存入数据库从数据库中读取图片.txt

    综上所述,图片存入数据库和从数据库中读取图片的过程,不仅涉及对图片数据的二进制处理,还涵盖了数据库操作的关键技术,包括连接管理、命令执行、结果集读取以及异常处理等。掌握这些技术点对于开发人员来说至关...

    c#程序,从数据库中读取数据并用excel导出

    这是我做的一个将数据用excel导出代码,前半段代码可以忽略,是查询语句,最后一段才是导出excel。

    C#读取数据库中表格数据

    在C#编程环境中,我们可以利用ADO.NET框架来高效地与SQL数据库进行交互,实现如标题所述的“C#读取数据库中表格数据”的功能。本篇文章将深入探讨如何用C#按秒读取SQL数据库中的表格数据,并展示这些数据。 首先,...

    一个动态从数据库读取数据加载树菜单的类

    能从数据库中根据编码级次动态读取数据加载树菜单,非常灵活!

    C#将文件保存到数据库中或者从数据库中读取文件

    C#将文件保存到数据库中或者从数据库中读取文件 本文主要介绍了使用 C# 将文件保存到数据库中或者从数据库中读取文件的方法。下面将详细介绍该知识点。 一、保存文件到数据库中 在实际开发中,我们经常需要将文件...

    Django读取Mysql数据并显示在前端的实例

    在本实例中,我们将探讨如何使用Django框架从MySQL数据库中读取数据并将其呈现到前端页面上。Django是一个强大的Python Web开发框架,而MySQL则是一种广泛使用的关系型数据库管理系统。结合两者,我们可以构建动态的...

    JDBC读取数据库元数据,自动生成JAVA实体类

    JDBC读取数据库元数据,生成JAVA实体类

    VC6.0 MFC 数据库读入数据显示在对话框.rar

    这个压缩包文件“VC6.0 MFC 数据库读入数据显示在对话框.rar”显然涉及到如何使用MFC来从数据库读取数据,并在对话框中显示这些数据。以下是对这个主题的详细讲解: 首先,我们需要理解MFC中的CDatabase和...

    android读取sqlite数据库的数据并用listview显示

    至此,我们完成了从SQLite数据库读取数据并显示在ListView上的整个流程。当数据库中的数据发生变化时,只需刷新Adapter即可更新ListView的显示。这个示例对于理解Android中SQLite与ListView的交互非常有帮助,可以...

    wincc数据库读取

    ### WinCC数据库读取知识点详解 #### 一、WinCC简介 WinCC(Windows Control Center)是西门子公司开发的一款广泛应用于工业自动化领域的图形化监控系统。它支持各种硬件设备的连接,能够实现数据采集、可视化展示...

    C#根据数据库数据画数据曲线

    在这个场景中,我们使用C#语言结合Access数据库来动态获取数据,并实现在用户界面控件上实时展示数据变化的曲线图。下面我们将深入探讨这个过程涉及的关键知识点。 1. **C#与数据库交互**: - ADO.NET:C#通过ADO...

    windows服务器读取aspen数据库数据

    7. **数据整合**:在Windows服务中,可能会有一个中心调度器负责协调从Aspen和Oracle数据库的读取任务,然后将这些数据整合到SQL数据库中。这需要对并发控制、错误处理和数据一致性有深入理解。 8. **安全性和性能*...

Global site tag (gtag.js) - Google Analytics