TreeView из базы данных с нулевым

У меня есть проблема с заполнением дерева в C# из базы данных. Таблица выглядит так:

| code    | description | attached to | 
---------------------------------------
| P001    | TEST001     | NULL        |
| P0001   | TEST002     | P001        |
| P002    | TEST003     | NULL        |
| P00201  | TESTXXX     | P002        |
| P00222  | TESTXXX     | P002        |
| P002020 | TESTSSS     | P00222      |

Это не работает.

protected void PopulateTreeView(TreeNodeCollection parentNode, string parentID, DataTable folders)
    {

        foreach (DataRow folder in folders.Rows)
        {
            // if (Convert.ToInt32(folder["Attached to"]) == parentID)
            if (string.IsNullOrEmpty(folder["Attached to"].ToString()))
            {

                String key = folder["code"].ToString();
                String text = folder["description"].ToString();
                TreeNodeCollection newParentNode = parentNode.Add(key, text).Nodes;
                //PopulateTreeView(newParentNode, Convert.ToInt32(folder["code"]), folders);
                PopulateTreeView(newParentNode, folder["code"].ToString(), folders);
            }
        }
    }

1 ответ

Решение

Проблема в вашем условии If. Вы должны искать строки, которые прикреплены к parentID. Вот исправленный метод с тестом:

    public void Test_PopulateTreeViews()
    {
        var rootNode = new TreeNode();
        var folders = new DataTable();

        folders.Columns.Add("code");
        folders.Columns.Add("description");
        folders.Columns.Add("Attached to");
        folders.Rows.Add("P001", "TEST001", string.Empty);
        folders.Rows.Add("P0001", "TEST002", "P001");
        folders.Rows.Add("P002", "TEST003", null);
        folders.Rows.Add("P00201", "TEST003", "P002");
        folders.Rows.Add("P00222", "TESTXXX", "P002");
        folders.Rows.Add("P002020", "TESTSSS", "P00222");

        PopulateTreeView(rootNode, string.Empty, folders);
    }

    private void PopulateTreeView(TreeNode parentNode, string parentID, DataTable folders)
    {
        foreach (DataRow folder in folders.Rows)
        {
            if (folder["Attached to"].ToString() == parentID)
            {
                String key = folder["code"].ToString();
                String text = folder["description"].ToString();

                var newParentNode = new TreeNode(key, text);
                parentNode.ChildNodes.Add(newParentNode);
                PopulateTreeView(newParentNode, folder["code"].ToString(), folders);
            }
        }
    }
});
Другие вопросы по тегам