Reputation: 443
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
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