无须迭代两个循环完成树结构构建
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]);
}
}
}
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]);
}
}
}
相关文章推荐
- for循环利用可迭代对象与迭代器完成工作的本质
- Scala:用传名参数构建并理解循环结构
- 完成一个程序,打印一个树状的目录结构。子目录与父目录之间有两个空格的缩进
- 完成两个结构相同的表之间数据的复制
- Turbo-prolog程序设计中的显式循环与迭代结构
- 第三单元 循环结构 3.1 模仿案例1--从1加到100用while循环完成
- [转]在计算机程序中,完成重复的任务有两种方式:递归和迭代(循环)。
- Java_20_循环结构_While循环_Do-while循环(执行顺序:初始化、布尔表达式条件判断、循环体、迭代)
- java、Dom4j、循环迭代递归解析XML,不论是否是叶子节点、有复合结构
- 浅析PHP中for与foreach两个循环结构遍历数组的区别
- 迭代模式:(用于树形结构的构建)
- 两个队列实现一个栈(两个队列循环)
- iOS C语言 分支结构 循环结构
- 【C语言】用函数指针变量完成:输入两个整数,让用户选择函数,选择1输出较大的数,选择2输出较小的数
- Android编译完成后的代码结构
- 从零开始学Scala系列(三)之初识循环分支结构
- 比较两个数据库的表结构差异
- 实验 4 在分支循环结构中调用自定义函数 为了倡导居民节约用电,某省电力公司执行“阶梯电价
- 使用Servlet+jsp构建MVC体系结构的Web应用
- 02-线性结构1 两个有序链表序列的合并 (15分)