你好:
数据库中的字段为三个字段就够用:分别为id,name,parentid(存储对应的父级id)
我写了两个函数,你把参数传进去就可以了:
功能函数:
#region InitNode
///
/// 初始化节点
///
/// 要加载成树结构的数据源
private void InitNode(DataTable dt)
{
DataRow[] drRoot = dt.Select("id='0'");
if (drRoot != null && drRoot.Length > 0)
{
TreeNode root = new TreeNode();
root.Text = drRoot[0]["name"].ToString();
root.Tag = drRoot[0];
this.treeView1.Nodes.Add(root);
this.BuildChild(drRoot[0], root, dt);
}
}
#endregion
#region BuildChild
///
/// 加载子节点
///
/// 父节点对应的行
/// 父节点
/// 要加载成树结构的数据源
private void BuildChild(DataRow dr, TreeNode root,DataTable dt)
{
if (dr == null || root == null) return;
DataRow[] drChilds = dt.Select("parentid='" + dr["id"] + "'");
if (drChilds != null || drChilds.Length > 0)
{
foreach (DataRow drChild in drChilds)
{
TreeNode node = new TreeNode();
node.Text = drChild["name"].ToString();
node.Tag = dr;
root.Nodes.Add(node);
this.BuildChild(drChild, node, dt);
}
}
}
#endregion
函数调用:
this.InitNode(this.GetData());
测试数据源:
#region GetData
///
/// 测试数据源
///
private DataTable GetData()
{
DataTable dt = new DataTable();
dt.Columns.Add("id");
dt.Columns.Add("name");
dt.Columns.Add("parentid");
dt.Rows.Add(new object[] { "0", "中国南方集团有限公司","root"});
dt.Rows.Add(new object[] { "1", "集团办办公室", "0" });
dt.Rows.Add(new object[] { "2", "人力资源部", "0" });
dt.Rows.Add(new object[] { "3", "市场部", "0" });
dt.Rows.Add(new object[] { "301", "市场部1", "3" });
dt.Rows.Add(new object[] { "302", "市场部2", "3" });
dt.Rows.Add(new object[] { "4", "B公司", "0" });
dt.Rows.Add(new object[] { "401", "销售部", "4" });
dt.Rows.Add(new object[] { "402", "质管部", "4" });
dt.Rows.Add(new object[] { "5", "D公司", "0" });
dt.Rows.Add(new object[] { "6", "A公司", "0" });
dt.Rows.Add(new object[] { "7", "C公司", "0" });
dt.Rows.Add(new object[] { "8", "网络信息中心", "0" });
return dt;
}
#endregion
这个表很简单,就像ls说的即可,关键是这个递归的sp不好写,我写过一个,但是是给oracle用的。或者你用xml文件去实现。
建立一个三个字段的表就够了
ID(varchar,4),Name(varchar,20),ParentID(varchar,4):
0100 中国南方集团有限公司 0000
0110 集团办公室 0100
......
0140 B公司 0100
0141 销售部 0140
......
需要TreeView的代码?
protected void BindTree()
{
TreeNode node = new TreeNode(); //这里是创建一个根节点,就是图片中看到的Root
node.Text = "中国南方集团有限公司";
CreateChildTree(node, 0);
_tree_view.Nodes.Add(node);
}
protected void CreateChildTree(TreeNode _parentNode, int _parentID)
{
using (SqlConnection _conn = new SqlConnection(_connstr))
{
SqlCommand _comm = new SqlCommand();
string sql = "select * from company where rootid=@rootid";
_comm.Parameters.Add("@rootid", SqlDbType.Int).Value = _parentID;
_comm.CommandText = sql;
_comm.Connection = _conn;
_conn.Open();
using (SqlDataReader r = _comm.ExecuteReader())
{
while (r.Read())
{
TreeNode _node = new TreeNode(r["txt"].ToString());
CreateChildTree(_node, (int)r["ID"]); //递归出子节点
_parentNode.ChildNodes.Add(_node);
}
}
}
}
建立一个表就行了
格式
id 父id 名称
0 -1 中国南方集团有限公司 //最顶级节点
1 0 B公司 //说明B公司在中国南方集团有限公司下面
2 0 市场部 //市场部在中国南方集团有限公司下面
3 1 生产部 //生产部在B公司下面
然后再来个建树 就可以了
如果不会的话 liyangfd@163.com