Bolik‘s AIO Blog
All In One Team Blog
posts - 65,  comments - 125,  trackbacks - 0

 

该算法思想是

        第一步循环完成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
{
  [DataObjectMethod(DataObjectMethodType.Select, 
true)]
  
public static DataSet ReadCore()
  
{
    Database db 
= DatabaseFactory.CreateDatabase("WorkItemTrack");
    
string sqlCommand = "Department_SelectCore"
    DbCommand dbCommand 
= db.GetStoredProcCommand(sqlCommand);
    db.AddReturnValueParameter(dbCommand);
    
return db.ExecuteDataSet(dbCommand);
  }

}

数结构构建代码:

 

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]);
    }

  }

}
posted @ 2006-09-09 11:35 Bolik 阅读(1068) 评论(11) 编辑

网络有风险(我的版权声明)

该博客的任何内容都可以随意使用,就算不署名也无所谓 既然我把它贴出来就是为了与大家交流的,至于利益等等都无关紧要了 如果关联到个人或公司的切身利益的话就不要贴出来了 我们是应该要版权,但我们所学的种种知识,学校的,网络的,甚至是社会的,谁给我们要过版权呢? 中国人有一个不太好的习惯,引用从来想付出代价,不过前人就是为后人铺路的,哪管那么多 网络是不安全的,如果有外泄的风险那请缄言
昵称:Bolik
园龄:6年
粉丝:3
关注:0

<2006年9月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

搜索

 
 

常用链接

最新随笔

随笔分类(85)

随笔档案(65)

文章档案(1)

相册

积分与排名

  • 积分 - 55542
  • 排名 - 1897

最新评论

阅读排行榜

评论排行榜

推荐排行榜