<%@ Page Theme="Default" %> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Populating TreeView Nodes from a SQL Database</title> </head> <script language="C#" runat="server"> void GetProductCategories (TreeNode node) { CategoryList categories = WarehouseDB.GetProductCategories(); foreach (Category c in categories) { TreeNode newNode = new TreeNode(c.Name, c.Id); newNode.SelectAction = TreeNodeSelectAction.Expand; newNode.PopulateOnDemand = true; node.ChildNodes.Add(newNode); } } void GetProductsForCategory (TreeNode node) { String categoryId = node.Value; ProductList products = WarehouseDB.GetProductsForCategory(categoryId); foreach (Product p in products) { TreeNode newNode = new TreeNode(p.Name, p.Id); node.ChildNodes.Add(newNode); } } void PopulateNode (Object source, TreeNodeEventArgs e) { switch (e.Node.Depth) { case 0 : GetProductCategories(e.Node); break; case 1 : GetProductsForCategory(e.Node); break; } } </script> <body> <div> <h2>Populating TreeView Nodes from a SQL Database</h2> <form action="treeview11_database_cs.aspx" runat="server"> <asp:TreeView ID="TreeView1" OnTreeNodePopulate="PopulateNode" SkinId="Simple" Width="250" ExpandDepth="0" runat="server"> <Nodes> <asp:TreeNode Text="Inventory" SelectAction="Expand" PopulateOnDemand="true"/> </Nodes> </asp:TreeView> </form> </div> </body> </html>
using System;
using System.Data;
using System.Collections;
using System.Configuration;
using System.Data.SqlClient; using System.Web.UI;
using System.Web.UI.WebControls;
public class WarehouseDB {
public static CategoryList GetProductCategories() {
CategoryList categories = new CategoryList();
String connStr = ConfigurationManager.ConnectionStrings["GrocerToGo"].ConnectionString;
SqlDataSource mySource = new SqlDataSource(connStr, "GetCategories");
mySource.SelectCommandType = SqlDataSourceCommandType.StoredProcedure;
IEnumerable result = mySource.Select(DataSourceSelectArguments.Empty);
foreach (DataRowView row in result) {
categories.Add(new Category(
row["CategoryId"].ToString(),
row["CategoryName"].ToString())
);
}
return categories;
}
public static ProductList GetProductsForCategory(String categoryId) {
ProductList products = new ProductList();
String connStr = ConfigurationManager.ConnectionStrings["GrocerToGo"].ConnectionString;
SqlDataSource mySource = new SqlDataSource(connStr, "GetProductsForCategory");
mySource.SelectCommandType = SqlDataSourceCommandType.StoredProcedure;
mySource.SelectParameters.Add(new Parameter("catId", TypeCode.Int32, categoryId));
IEnumerable result = mySource.Select(DataSourceSelectArguments.Empty);
foreach (DataRowView row in result) {
products.Add(new Product(
row["ProductId"].ToString(),
row["ProductName"].ToString())
);
}
return products;
}
}
public class Category {
public String Id;
public String Name;
public Category (String id, String name) {
this.Id = id;
this.Name = name;
}
}
public class CategoryList : ArrayList {
public new Category this[int i] {
get {
return (Category)base[i];
}
set {
base[i] = value;
}
}
}
public class Product {
public String Id;
public String Name;
public Product (String id, String name) {
this.Id = id;
this.Name = name;
}
}
public class ProductList : ArrayList {
public new Product this[int i] {
get {
return (Product)base[i];
}
set {
base[i] = value;
}
}
}