来自DataTable的Treeview

时间:2017-09-07 12:14:12

标签: c# winforms treeview

你有一个包含3个字段的数据表,我的预期树视图将在下面的图像中显示。

Expected Result

我的数据表会返回这样的详细信息。

Data table result

我尝试了以下代码。这里子节点没有正确列出

 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;
    }

1 个答案:

答案 0 :(得分:1)

我认为该数据表是按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];
                }
            }
        }
    }