[Okta Webinar] Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 269
  • Last Modified:

How To Dynamically Load TreeView Control

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
DeniseGoodheart
Asked:
DeniseGoodheart
1 Solution
 
deanvanrooyenCommented:
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
 
DeniseGoodheartAuthor Commented:
Many thanks deanvanrooyen,

Denise

0

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now