日期:2014-05-16  浏览次数:20440 次

从数据库读取数据并在Tree上分组呈现
最近有一项目,需要从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)
		{
			retu