Gmorken
Gmorken

Reputation: 443

TreeView from database with null

I have som problem populating a treeview in c# from database. The table looks like this:

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

This does not work.

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

Upvotes: 0

Views: 66

Answers (1)

Igos
Igos

Reputation: 211

The problem is with your If condition. You should search for rows that are attached to parentID. Here is corrected method with test:

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

Upvotes: 1

Related Questions