?
Solved

How To Dynamically Load TreeView Control

Posted on 2006-06-10
2
Medium Priority
?
262 Views
Last Modified: 2008-01-16
Hi,

I’m on a tight project deadline, and do not have a lot of time to look at a Web llink.  I’m using ASP.NET 2005 with VB.NET.  I need to dynamically load a TreeView control with data from two tables.  My parent table contains the years as follows:

Year
2005
2006

My child table contains the Year and Month as follows:

Year      Month      
2005      January
2005      February
2005      March
2006         Januuary
2006      February
2006      March
2006      April

The two tables are joined by year.

My TreeView control needs to look as follows:
2005
    January
    February
    March
2006
    Janurary
    February
    March
    April

Can someone provide me with code on how to do this?

Thanks,
Densie


      
0
Comment
Question by:DeniseGoodheart
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
2 Comments
 
LVL 12

Accepted Solution

by:
deanvanrooyen earned 2000 total points
ID: 16879933
hi,

i was going to do it for you in C# but I found a url that shows exactly what do do in VB.net, you basically read both tables into a dataset , add a datarelation (joins the tables) and then manualy add the node to the control... remeber that if your table also has url links for each row / node then you can add the field to the node.NavigateUrl
http://www.15seconds.com/issue/030827.htm
this is the section
//////////////////////////////////////////////////

Database Populating

In many cases, you may want to populate your tree from dynamic data. Obtaining your values from a database allows menu and input trees to change on the fly. While there are ways to convert your database results into XML and then populate the tree with the converted data, we can skip this conversion step and fill the tree directly from database using straightforward ADO.NET.

For the database example, we'll generate a list of Suppliers and the Products each makes. The Northwind example database in SQL 2000 will be our source. Here's a view of the tree we'll create, collapsed and expanded:

 *** see article for pic  - http://www.15seconds.com/issue/030827.htm

On your Web form, drag a TreeView control over and name it TreeView1. Below is the control code. Remember to include an import for System.Data, System.Data.SqlClient, and Microsoft.Web.UI.WebControls:


Dim strConn As String = "server=.;database=Northwind;integrated security=true;"

Dim objConn As New SqlConnection(strConn)

Dim objDS As New DataSet

Dim daSuppliers As New SqlDataAdapter("SELECT CompanyName,SupplierID FROM Suppliers", objConn)

Dim daProducts As New SqlDataAdapter("SELECT ProductName, ProductID, SupplierID FROM Products", objConn)

daSuppliers.Fill(objDS, "dtSuppliers")

daProducts.Fill(objDS, "dtProducts")

objConn.Close()


objDS.Relations.Add("SuppToProd", _

    objDS.Tables("dtSuppliers").Columns("SupplierID"), _

    objDS.Tables("dtProducts").Columns("SupplierID"))

 

Dim nodeSupp, nodeProd As TreeNode

Dim rowSupp, rowProd As DataRow

 For Each rowSupp In objDS.Tables("dtSuppliers").Rows

    nodeSupp = New TreeNode

    nodeSupp.Text = rowSupp("CompanyName")

    nodeSupp.ID = rowSupp("SupplierID")

    TreeView1.Nodes.Add(nodeSupp)

     For Each rowProd In rowSupp.GetChildRows("SuppToProd")

         nodeProd = New TreeNode

         nodeProd.Text = rowProd("ProductName")

         nodeProd.ID = rowProd("ProductID")

         nodeSupp.Nodes.Add(nodeProd)

     Next

  Next


  'clean up

  objDS.Dispose()

  daSuppliers.Dispose()

  daProducts.Dispose()

  objConn.Close()

  objConn.Dispose()

Place the control code in your Page Load area. Again, remember to include an import for System.Data, System.Data.SqlClient, and Microsoft.Web.UI.WebControls.

The first three lines are standard database connection objects:


Dim strConn As String = "server=.;database=Northwind;integrated security=true;"

Dim objConn As New SqlConnection(strConn)

Dim objDS As New DataSet

The important point on the next two SQL statements is that each statement includes a common relation field. In this case, SupplierID will connect the Suppliers to their Products. We will create a separate Data Adapter for each parent child relationship. In this case, there are only two, Suppliers and Products. If there were a relation under Products, like Colors available, we would create a third Data Adapter that would include the ProductID so Colors could be tied back to Products:


Dim daSuppliers As New SqlDataAdapter("SELECT CompanyName,SupplierID FROM Suppliers", objConn)

 

Dim daProducts As New SqlDataAdapter("SELECT ProductName, ProductID, SupplierID FROM Products", objConn)

Next we fill both Data Adapters then close our connection:


daSuppliers.Fill(objDS, "dtSuppliers")

daProducts.Fill(objDS, "dtProducts")

objConn.Close()

Relation: The key to the TreeView is the relation. When a DataSet has more than one DataTable, a relation can be defined. There must be a common field in both to define the Parent Child relationship. In our case, it's the SupplierID.


objDS.Relations.Add("SuppToProd", _

    objDS.Tables("dtSuppliers").Columns("SupplierID"), _

    objDS.Tables("dtProducts").Columns("SupplierID"))

If we had our third relation of Color, there would be a second relation statement tying Products to Color.

Now we create our TreeView datatypes:


Dim nodeSupp, nodeProd As TreeNode

Dim rowSupp, rowProd As DataRow

Loop through our data sets and populate the TreeView. The ID attribute at +++ is not needed for our example to function. Including it gives a convenient method of determining your database ID values during click and check events.


For Each rowSupp In objDS.Tables("dtSuppliers").Rows

    nodeSupp = New TreeNode

    nodeSupp.Text = rowSupp("CompanyName")

    nodeSupp.ID = rowSupp("SupplierID") +++

    TreeView1.Nodes.Add(nodeSupp)

     For Each rowProd In rowSupp.GetChildRows("SuppToProd")

         nodeProd = New TreeNode

         nodeProd.Text = rowProd("ProductName")

         nodeProd.ID = rowProd("ProductID")

         nodeSupp.Nodes.Add(nodeProd)

                ***

     Next

  Next

0
 

Author Comment

by:DeniseGoodheart
ID: 16922475
Many thanks deanvanrooyen,

Denise

0

Featured Post

On Demand Webinar: Networking for the Cloud Era

Did you know SD-WANs can improve network connectivity? Check out this webinar to learn how an SD-WAN simplified, one-click tool can help you migrate and manage data in the cloud.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

I recently went through the process of creating a Calendar Control of events with the basis of using a database to keep track of the dates that are selectable, one requirement was to have the selected date pop-up in a simple lightbox.  At first this…
In an ASP.NET application, I faced some technical problems. In this article, I list them out and show the solutions that I found.  I hope it will be useful. Problem: After closing a pop-up window, the parent page should be refreshed automaticall…
Michael from AdRem Software explains how to view the most utilized and worst performing nodes in your network, by accessing the Top Charts view in NetCrunch network monitor (https://www.adremsoft.com/). Top Charts is a view in which you can set seve…
If you’ve ever visited a web page and noticed a cool font that you really liked the look of, but couldn’t figure out which font it was so that you could use it for your own work, then this video is for you! In this Micro Tutorial, you'll learn yo…

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question