windows 形成具有动态子项的树视图
windows form treeview with dynamic child
我正在使用 C# 编写 windows 表单,以使用数据库中的数据构建树视图。有一个存储过程给出了以下信息的列表
id - 节点id
description - 要在树视图中显示的值
isEndNode - 如果是结束节点则为 0; 1 如果此节点有子节点
如果 isEndNode 为 1,那么我必须使用当前节点的 ID 调用相同的存储过程以接收其下的子节点列表。
我已经建立了一种机制来调用存储过程并获取项目列表,但我不确定如何填充树结构。我在想我会将第一个列表显示为父节点,当用户单击 + 号展开时,我将调用存储过程并将新项目作为子节点添加到当前节点。我不确定如何告诉节点它是父节点而不是结束节点。有人建造过这样的东西吗?请帮忙
我已经为您创建了一个示例,您可以在其中了解如何在您的示例中进行操作。
在数据库中创建了 table 名员工
最初员工的姓名将放在 TreeView 中
姓名展开后可以看到年龄和电话号码
public Form1()
{
InitializeComponent();
initTreeView(); //TreeView without any nodes in it
}
void initTreeView()
{
SqlConnection con = new SqlConnection();
con.ConnectionString = _ConnectionString;
con.Open();
using (SqlCommand comm = new SqlCommand("Select Name From Employees", con))
using (SqlDataReader read = comm.ExecuteReader())
while (read.Read())
{
TreeNode tn = new TreeNode(read["Name"].ToString());
tn.Nodes.Add(new TreeNode());
treeView1.Nodes.Add(tn);
}
treeView1.BeforeExpand += treeView1_BeforeExpand;
}
void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
{
TreeNode tNode = e.Node;
string empName = tNode.Text;
tNode.Nodes.Clear();
SqlConnection con = new SqlConnection();
con.ConnectionString = _ConnectionString;
con.Open();
using (SqlCommand comm = new SqlCommand("Select Age, PhoneNumber From Employees Where Name = @empName", con))
{
comm.Parameters.AddWithValue("@empName", empName);
using (SqlDataReader read = comm.ExecuteReader())
if (read.Read())
{
TreeNode nodeAge = new TreeNode(read["Age"].ToString());
TreeNode nodePhone = new TreeNode(read["PhoneNumber"].ToString());
tNode.Nodes.AddRange(new TreeNode[] { nodeAge, nodePhone });
}
}
}
我正在使用 C# 编写 windows 表单,以使用数据库中的数据构建树视图。有一个存储过程给出了以下信息的列表
id - 节点id description - 要在树视图中显示的值 isEndNode - 如果是结束节点则为 0; 1 如果此节点有子节点
如果 isEndNode 为 1,那么我必须使用当前节点的 ID 调用相同的存储过程以接收其下的子节点列表。
我已经建立了一种机制来调用存储过程并获取项目列表,但我不确定如何填充树结构。我在想我会将第一个列表显示为父节点,当用户单击 + 号展开时,我将调用存储过程并将新项目作为子节点添加到当前节点。我不确定如何告诉节点它是父节点而不是结束节点。有人建造过这样的东西吗?请帮忙
我已经为您创建了一个示例,您可以在其中了解如何在您的示例中进行操作。
在数据库中创建了 table 名员工
最初员工的姓名将放在 TreeView 中
姓名展开后可以看到年龄和电话号码
public Form1()
{
InitializeComponent();
initTreeView(); //TreeView without any nodes in it
}
void initTreeView()
{
SqlConnection con = new SqlConnection();
con.ConnectionString = _ConnectionString;
con.Open();
using (SqlCommand comm = new SqlCommand("Select Name From Employees", con))
using (SqlDataReader read = comm.ExecuteReader())
while (read.Read())
{
TreeNode tn = new TreeNode(read["Name"].ToString());
tn.Nodes.Add(new TreeNode());
treeView1.Nodes.Add(tn);
}
treeView1.BeforeExpand += treeView1_BeforeExpand;
}
void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
{
TreeNode tNode = e.Node;
string empName = tNode.Text;
tNode.Nodes.Clear();
SqlConnection con = new SqlConnection();
con.ConnectionString = _ConnectionString;
con.Open();
using (SqlCommand comm = new SqlCommand("Select Age, PhoneNumber From Employees Where Name = @empName", con))
{
comm.Parameters.AddWithValue("@empName", empName);
using (SqlDataReader read = comm.ExecuteReader())
if (read.Read())
{
TreeNode nodeAge = new TreeNode(read["Age"].ToString());
TreeNode nodePhone = new TreeNode(read["PhoneNumber"].ToString());
tNode.Nodes.AddRange(new TreeNode[] { nodeAge, nodePhone });
}
}
}