I am trying to grab data from the database that this application is connecting to and then show entries in a treeview.
| public void dbcall() |
| { |
| SqlConnection sqlconn = new SqlConnection("user id=USERNAME;" + "password=PASSWORD;server=SERVER;" + "database=DBNAME;" + "connection timeout=30"); |
| SqlCommand select = new SqlCommand("SELECT * from MAIN", sqlconn); |
| sqlconn.Open(); |
| SqlDataReader reader = select.ExecuteReader(); |
| DataSet ds = new DataSet(); |
| DataTable dt = new DataTable("MainTable"); |
| ds.Tables.Add(dt); |
| ds.Load(reader, LoadOption.PreserveChanges, ds.Tables[0]); |
| sqlconn.Close(); |
| foreach (DataRow dr in dt.Rows) |
| { |
| //////////// |
| } |
| } |
The data that I am getting out of the database looks like this:
ID Hostname Username Software
1 host1 user1 sw1
2 host1 user1 sw2
3 host1 user1 sw3
4 host1 user1 sw4
5 host5 user5 sw1
6 host5 user5 sw2
7 host5 user5 sw3
8 host5 user5 sw5
9 host9 user9 sw1
10 host10 user10 sw1
I need the data to be displayed in the tree as follows, though nothing that I have done so far has been able to do it:
host1>user1>sw1
sw2
sw3
sw4
host5>user5>sw1
sw2
sw3
sw5
Any help with this would be appreciated. Thanks in advance.
Bechir BejaouiPosted Aug 13, 2008, 6:30 PM
It's pretty simple: (I assume your data is in a datatable)
TreeNode rootNode = null;
Hashtable idToNode = new Hashtable(users.Rows.Count);
// first walk the list of users and create Treeview Nodes.
{
// we need 2 loops, as we can encounter a user with a parent
// and the parent isn't processed yet.
for(int i=0;i
TreeNode newNode = new TreeNode(users.Rows[i]["UserId"].ToString());
idToNode.Add(users.Rows[i]["UserId"], newNode);
if((int)users.Rows[i]["ParentId"]==0)
{
// found the root
rootNode = newNode;
}
}
// now we're going to build the tree!
{
// add the complete node structure to the treeview controlfor(int i=0;i
TreeNode nodeToAdd = (TreeNode)idToNode[users.Rows[i]["UserId"]];
// find parent
if((int)users.Rows[i]["ParentId"]!=0)
{
TreeNode parentNode = (TreeNode)idToNode[users.Rows[i]["ParentId"]];
parentNode.Nodes.Add(nodeToAdd);
}
}
myTreeView.Nodes.Add(rootNode);