C# winform treeview
如何在数据库中设计“部门表”(需要建立哪些字段),用C#语言使用treeview实现如下图所示界面:...
如何在数据库中设计“部门表”(需要建立哪些字段),用C#语言使用treeview实现如下图所示界面:
展开
推荐于2016-09-21
展开全部
你好:
数据库中的字段为三个字段就够用:分别为id,name,parentid(存储对应的父级id)
我写了两个函数,你把参数传进去就可以了:
功能函数:
#region InitNode
/// <summary>
/// 初始化节点
/// </summary>
/// <param name="dt">要加载成树结构的数据源</param>
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
/// <summary>
/// 加载子节点
/// </summary>
/// <param name="dr">父节点对应的行</param>
/// <param name="root">父节点</param>
/// <param name="dt">要加载成树结构的数据源</param>
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
/// <summary>
/// 测试数据源
/// </summary>
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
数据库中的字段为三个字段就够用:分别为id,name,parentid(存储对应的父级id)
我写了两个函数,你把参数传进去就可以了:
功能函数:
#region InitNode
/// <summary>
/// 初始化节点
/// </summary>
/// <param name="dt">要加载成树结构的数据源</param>
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
/// <summary>
/// 加载子节点
/// </summary>
/// <param name="dr">父节点对应的行</param>
/// <param name="root">父节点</param>
/// <param name="dt">要加载成树结构的数据源</param>
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
/// <summary>
/// 测试数据源
/// </summary>
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
微测检测5.10
2023-05-10 广告
2023-05-10 广告
您好!建议咨 深圳市微测检测有限公司,已建立起十余个专业实验室,企业通过微测检测就可以获得一站式的测试与认 证解决方案;(EMC、RF、MFi、BQB、QI、USB、安全、锂电池、快充、汽车电子EMC、汽车手机互 联、语音通话质量),认证遇...
点击进入详情页
本回答由微测检测5.10提供
展开全部
这个表很简单,就像ls说的即可,关键是这个递归的sp不好写,我写过一个,但是是给oracle用的。或者你用xml文件去实现。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
建立一个三个字段的表就够了
ID(varchar,4),Name(varchar,20),ParentID(varchar,4):
0100 中国南方集团有限公司 0000
0110 集团办公室 0100
......
0140 B公司 0100
0141 销售部 0140
......
需要TreeView的代码?
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);
}
}
}
}
{
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
格式
id 父id 名称
0 -1 中国南方集团有限公司 //最顶级节点
1 0 B公司 //说明B公司在中国南方集团有限公司下面
2 0 市场部 //市场部在中国南方集团有限公司下面
3 1 生产部 //生产部在B公司下面
然后再来个建树 就可以了
如果不会的话 liyangfd@163.com
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询