【转载于】tech.it168.com/KnowledgeBase/Articles/0/5/8/058be1cc2a1e95f0dd1e7f9ac71f9d70.htm
需要根据一个表中的数据来显示树形目录,数据库结构如下:》》》》》》》》》》》
构件树形目录的方法如下:
#region
构建TreeView
public bool BuildTree(TreeView tv, DataSet ds)
{
tv.Nodes.Clear();
foreach (DataRow dbRow in ds.Tables[ 0 ].Rows)
{
if (dbRow[ " FatherNumber " ].ToString() == string .Empty)
{
dbRow[ " FatherNumber " ] = DBNull.Value;
}
}
ds.Relations.Add( " NodeRelation " , ds.Tables[ 0 ].Columns[ " TypeNumber " ], ds.Tables[ 0 ].Columns[ " FatherNumber " ], false );
foreach (DataRow dbRow in ds.Tables[ 0 ].Rows)
{
if (dbRow.IsNull( " FatherNumber " ))
{
TreeNode newNode = CreateNode(dbRow[ " TypeName " ].ToString(), dbRow[ " TypeNumber " ].ToString());
tv.Nodes.Add(newNode);//父节点树
PopulateSubTree(dbRow, newNode);//子节点树
}
}
// 展开所有节点
tv.ExpandAll();
return true ;
}
private void PopulateSubTree(DataRow dbRow, TreeNode node)
{
foreach (DataRow childRow in dbRow.GetChildRows( " NodeRelation " ))
{
TreeNode childNode = CreateNode(childRow[ " TypeName " ].ToString(), childRow[ " TypeNumber " ].ToString());
node.Nodes.Add(childNode);
PopulateSubTree(childRow, childNode);
}
}
private TreeNode CreateNode(string text, string tag)//创建节点Node
{
TreeNode node = new TreeNode();
node.Text = text;
node.Tag = tag;
return node;
}
这样调用:
public bool BuildTree(TreeView tv, DataSet ds)
{
tv.Nodes.Clear();
foreach (DataRow dbRow in ds.Tables[ 0 ].Rows)
{
if (dbRow[ " FatherNumber " ].ToString() == string .Empty)
{
dbRow[ " FatherNumber " ] = DBNull.Value;
}
}
ds.Relations.Add( " NodeRelation " , ds.Tables[ 0 ].Columns[ " TypeNumber " ], ds.Tables[ 0 ].Columns[ " FatherNumber " ], false );
foreach (DataRow dbRow in ds.Tables[ 0 ].Rows)
{
if (dbRow.IsNull( " FatherNumber " ))
{
TreeNode newNode = CreateNode(dbRow[ " TypeName " ].ToString(), dbRow[ " TypeNumber " ].ToString());
tv.Nodes.Add(newNode);//父节点树
PopulateSubTree(dbRow, newNode);//子节点树
}
}
// 展开所有节点
tv.ExpandAll();
return true ;
}
private void PopulateSubTree(DataRow dbRow, TreeNode node)
{
foreach (DataRow childRow in dbRow.GetChildRows( " NodeRelation " ))
{
TreeNode childNode = CreateNode(childRow[ " TypeName " ].ToString(), childRow[ " TypeNumber " ].ToString());
node.Nodes.Add(childNode);
PopulateSubTree(childRow, childNode);
}
}
private TreeNode CreateNode(string text, string tag)//创建节点Node
{
TreeNode node = new TreeNode();
node.Text = text;
node.Tag = tag;
return node;
}
SqlConnection con
=
new
SqlConnection(
"
server=192.168.1.192;database=AUDE_KCGL;uid=sa;pwd=;
"
);
SqlDataAdapter sda = new SqlDataAdapter( " select TypeNumber,FatherNumber,TypeName from KC_ObjectType " , con);
DataSet dsTree = new DataSet();
sda.Fill(dsTree);
// 调用方法构件树形目录
BuildTree( this .treeView1, dsTree);
程序运行效果:
SqlDataAdapter sda = new SqlDataAdapter( " select TypeNumber,FatherNumber,TypeName from KC_ObjectType " , con);
DataSet dsTree = new DataSet();
sda.Fill(dsTree);
// 调用方法构件树形目录
BuildTree( this .treeView1, dsTree);