views:

813

answers:

4

Hey all,

I am trying to build a nested/threaded comment system in ASP.NET. I don't know how the PHP guys do it. Its much harder than first imagined.

I am trying my damnedest get Hierarchical data to output to the user, but its not working.

I have a table with text, a itemID and a parentID.

I want to display the information in a tree view format, but asp.net's standard control just doesn't work...

Can anyone point me in the right direction of how to output this into a treeview. I have tried nesting repeaters, straight out html building from codebehind and the treeview control.

I still haven't found a solution... Can anyone help me out?

A: 

As I understand it, if you have a database table with hierarchical data, you have two options: create your own custom data source, or programmatically bind the treeview to the database table.

I don't have code for you, but you could use following these steps:

  1. declare treeview control within asp.net page
  2. populate a DataTable (via a SqlDataAdapter) with your heirarchical data (SELECT itemID, parentID FROM...)
  3. use that same DataTable to create a DataView of top-level items (parentID will be null)
  4. for each row of the DataView, recursively add treeview items by filtering another DataView where each DataViewRow's parentID is equal to the row you're looping through in step 4

pretty much all of this is done using TreeView.Nodes.Add(theNewNode), where theNewNode is an instance of the TreeNode object

I know this all sounds very confusing, but I've done it in the past. I found great info in Stephen Walther ASP.NET Unleashed book, which has entire sections devoted to accomplishing this.

alex
A: 

I will look into the book, I have a copy I can access online, but I am looking to build my own treeview control.

The current control requires that you have links....

I am not looking for a treeview which requires links. I am looking for a treeview that allows you to edit the content of the node completely...

Thats why I want to build on my self. Any suggestions?

Scott
+1  A: 

Quickly, by head (could not check in VS2k8 now), I would do it something like this using Linq to SQL

private void BuildTree()
{
   List<Item> items = from item in dataContext.Items
                      select item;

   List<Item> rootItems = items.FindAll(p => p.ParentID == null );

   foreach ( Item item in rootItems )
   {
      TreeViewNode tvi = new TreeViewNode(item.text);
      BuildChildNodes(tvi, items, item.ID);
      YourTreeNodeName.Nodes.Add(tvi);
   }   
}

private void BuildChildNodes(TreeViewNode parentNode, List<Item> items, long parentID)
{
   List<Item> children = items.FindAll ( p => p.ParentID = parentID );
   foreach( Item item in children)
   {
      TreeViewNode tvi = new TreeViewNode(item.text);
      parentNode.Nodes.Add(tvi);
      BuildChildNodes(tvi, items, item.ID);         
   }
}
Henk
A: 

That was it, thank you.

That worked perfectly even though, I wasn't using a tree view.

Scott