【问题标题】:Populate treeview with dynamic subnodes使用动态子节点填充树视图
【发布时间】:2014-08-13 08:27:06
【问题描述】:

我有两列的表格:

+-------------+------------+  
| Level       | Desc       |  
+-------------+------------+  
| 1           | a          |  
+-------------+------------+    
| 2           | b          |  
+-------------+------------+ 
| 2           | c          | 
+-------------+------------+    
| 1           | d          |  
+-------------+------------+ 
| 2           | e          | 
+-------------+------------+    
| 2           | f          |  
+-------------+------------+ 
| 3           | g          | 
+-------------+------------+    
| 1           | h          |  
+-------------+------------+ 
| 1           | i          | 
+-------------+------------+ 
| 2           | j          |  
+-------------+------------+ 
| 2           | k          | 
+-------------+------------+ 

我需要根据级别列在树视图中创建此数据的显示 应该是这样的:

- 1 a
   -- 2 b
   -- 2 c
 -1 d
   -- 2 e
   -- 2 f
      -- 3 g
 -1 h
 -1 i 
   -- 2 j 
   -- 2 k

因此,级别列代表节点。 1级是主节点,2级是1级的子节点,3级是2级的子节点,4级是3级的子节点…… 我知道当有固定数量的节点和子节点时如何填充树视图,但在这种情况下不知道如何填充 1 个节点包含 3、4 个或更多子节点的位置。

【问题讨论】:

  • 这张桌子你怎么拿?
  • 具有两列(int,string)的DataTable
  • 我已经纠正了一个小错误。

标签: c# treeview


【解决方案1】:

希望对你有帮助,我试过你的例子,它成功了

    private void PopulateTreeView_Load(object sender, EventArgs e)
    {
        DataTable table = new DataTable();
        table.Columns.Add("Level");
        table.Columns.Add("Data");

        table.Rows.Add(1, "a");
        table.Rows.Add(2, "b");
        table.Rows.Add(2, "c");
        table.Rows.Add(1, "d");
        table.Rows.Add(2, "e");
        table.Rows.Add(2, "f");
        table.Rows.Add(3, "g");
        table.Rows.Add(4, "z");
        table.Rows.Add(5, "x");
        table.Rows.Add(2, "h");
        table.Rows.Add(3, "i");
        table.Rows.Add(1, "j");
        table.Rows.Add(2, "k"); 

        TreeNode lastNode = new TreeNode();    

        for (int i = 0; i < table.Rows.Count; i++)
        {
            TreeNode newNode = new TreeNode((string)table.Rows[i]["Data"]);                

            if (i == 0)
                treeView.Nodes.Add(newNode);
            else
            {
                int currentLevel = Convert.ToInt32(table.Rows[i]["Level"]);
                int lastLevel = Convert.ToInt32(table.Rows[i-1]["Level"]);

                if (currentLevel < lastLevel)
                {
                    if (currentLevel == 1)
                        treeView.Nodes.Add(newNode);
                    else
                    {
                        TreeNode currentNode = lastNode.Parent;

                        for (int j = 0; j < lastLevel - currentLevel; j++)
                            currentNode = currentNode.Parent;

                        currentNode.Nodes.Add(newNode);
                    }
                }
                else if (currentLevel == lastLevel)
                {
                     if (lastLevel == 1)
                        treeView.Nodes.Add(newNode);
                     else
                        lastNode.Parent.Nodes.Add(newNode);                                    
                }
                else
                {
                    lastNode.Nodes.Add(newNode);
                }
            }

            lastNode = newNode;
        }           
    }

【讨论】:

  • 正是我需要的!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-12
  • 2014-09-06
  • 2012-06-04
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 2016-08-01
相关资源
最近更新 更多