您的位置:首页 > 其它

无须迭代两个循环完成树结构构建

2006-09-09 11:35 281 查看
该算法思想是 第一步循环完成TreeNode构建 第二次循环完成层次结构构建 数据存储采用一般层次结构存储方式 一次调用数据库完成所有所需数据 采用数组索引存储树节点与ParentSQN避免了查找性能上的缺点 表格:

DepartmentID uniqueidentifier,
DepartmentSQN int,
DepartmentName nvarchar(32),
ParentID uniqueidentifier 存储过程:

CREATE PROCEDURE dbo.Department_SelectCore
AS
SET NOCOUNT ON
SELECT DepartmentID, DepartmentSQN, DepartmentName, ParentID ,
(SELECT DepartmentSQN FROM Department Parent WHERE (Parent.DepartmentID = Department.ParentID)) AS
ParentSQN
FROM Department
ORDER BY DepartmentSQN
RETURN 数据调用代码:

[DataObject(true)]
public class DepartmentDataObject
数结构构建代码:

protected void BuildTree()
{
_DepartmentTreeView.Nodes.Clear();
DataSet ds = DepartmentDataObject.ReadCore();
int Count = ds.Tables[0].Rows.Count;
TreeNode[] Nodes = new TreeNode[Count + 1];
Nullable<int>[] ParentSQNs = new Nullable<int>[Count + 1];
foreach (DataRow dr in ds.Tables[0].Rows)
{
Nodes[((int)dr["DepartmentSQN"])] = new TreeNode((string)dr["DepartmentName"], ((Guid)dr["DepartmentID"]).ToString());
try
{
ParentSQNs[(int)dr["DepartmentSQN"]] = (int)dr["ParentSQN"];
}
catch
{
ParentSQNs[(int)dr["DepartmentSQN"]] = null;
}
}
for (int i = 1; i < Count + 1; i++)
{
if (ParentSQNs[i].HasValue)
{
Nodes[ParentSQNs[i].Value].ChildNodes.Add(Nodes[i]);
}
else
{
_DepartmentTreeView.Nodes.Add(Nodes[i]);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: