C# 来自数据表的Treeview

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(

您好,有一个数据表,有3个字段,我期望的树视图将如下图所示

我的数据表返回如下详细信息

我尝试了下面的代码。此处子节点未正确获取列表

 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
此处子节点未正确获取列表
您希望代码做什么?它实际上是做什么的?我想根据我拥有的数据表填充树视图,如图中所示。但我无法添加第二个孩子