【问题标题】:Treeview from DataTable来自数据表的树视图
【发布时间】:2017-09-07 12:14:11
【问题描述】:

您好,有一个包含 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;
    }

【问题讨论】:

  • Here child node not getting listing properly想要代码做什么?它实际上做了什么?
  • 我想根据我拥有的数据表填充图像中的树视图。但我无法添加第二个孩子

标签: c# winforms treeview


【解决方案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];
                }
            }
        }
    }

【讨论】:

    猜你喜欢
    • 2018-08-18
    • 2011-10-08
    • 2020-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    相关资源
    最近更新 更多