C# 来自数据表的Treeview
您好,有一个数据表,有3个字段,我期望的树视图将如下图所示 我的数据表返回如下详细信息 我尝试了下面的代码。此处子节点未正确获取列表C# 来自数据表的Treeview,c#,winforms,treeview,C#,Winforms,Treeview,您好,有一个数据表,有3个字段,我期望的树视图将如下图所示 我的数据表返回如下详细信息 我尝试了下面的代码。此处子节点未正确获取列表 public void BuildTree(DataTable dt, TreeView trv, Boolean expandAll) { trv.Nodes.Clear(); TreeNode node = default(TreeNode); TreeNode subNode = default(
public void BuildTree(DataTable dt, TreeView trv, Boolean expandAll)
{
trv.Nodes.Clear();
TreeNode node = default(TreeNode);
TreeNode subNode = default(TreeNode);
foreach (DataRow row in dt.Rows)
{
node = Searchnode(row[0].ToString(), trv);
if (node != null)
{
subNode = new TreeNode(row[1].ToString());
node.Nodes.Add(subNode);
}
else
{
node = new TreeNode(row[0].ToString());
subNode = new TreeNode(row[1].ToString());
node.Nodes.Add(subNode);
trv.Nodes.Add(node);
}
}
if (expandAll)
{
trv.ExpandAll();
}
}
private TreeNode Searchnode(string nodetext, TreeView trv)
{
foreach (TreeNode node in trv.Nodes)
{
if (node.Text == nodetext)
{
return node;
}
}
return null;
}
我想datatable以前是按CustomerName、DeliverySchedule、Name排序的 初始化测试数据:
private void InitializeDataTable() {
dt = new DataTable();
dt.Columns.Add("DeliverySchedule");
dt.Columns.Add("Name");
dt.Columns.Add("CustomerName");
AddRow("Daily", "Test", "Team Venkat");
AddRow("Daily", "TestB", "Team Venkat");
AddRow("Weekly", "OtherName", "Team Venkat");
AddRow("Weekly", "OtherName2", "Team Venkat");
AddRow("Daily", "Test", "Team2");
AddRow("Weekly", "Test", "Team2");
}
private void AddRow(string schedule, string name, string customer) {
DataRow row = dt.NewRow();
row[0] = schedule;
row[1] = name;
row[2] = customer;
dt.Rows.Add(row);
}
使用三级循环从DataTable加载树:
private void LoadBtn_Click(object sender, EventArgs e) {
int i = 0;
treeView1.Nodes.Clear();
while (i < dt.Rows.Count) {
DataRow row = dt.Rows[i];
string customer = row.Field<string>(2);
TreeNode customerNode = treeView1.Nodes.Add(customer);
while (i < dt.Rows.Count && row.Field<string>(2) == customer) {
string schedule = row.Field<string>(0);
TreeNode scheduleNode = customerNode.Nodes.Add(schedule);
while (i < dt.Rows.Count && row.Field<string>(2) == customer && schedule == row.Field<string>(0)) {
string report = row.Field<string>(1);
scheduleNode.Nodes.Add(report);
if (++i < dt.Rows.Count)
row = dt.Rows[i];
}
}
}
}
private void LoadBtn\u单击(对象发送方,事件参数e){
int i=0;
treeView1.Nodes.Clear();
而(i
此处子节点未正确获取列表
您希望代码做什么?它实际上是做什么的?我想根据我拥有的数据表填充树视图,如图中所示。但我无法添加第二个孩子