ASP.NET中实现动态TreeView,与数据库进行交互,有两种模式,第一为://文件Tree.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Tree.aspx.cs" Inherits="Tree" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Untitled Page</title> <%--<link href="Styles.css" mce_href="Styles.css" rel="stylesheet" type="text/css" />--%> </head> <body> <form id="form1" runat="server"> <div> <asp:Label ID="lblInfo" runat="server" EnableViewState="False"></asp:Label> <br /> <br /> <asp:TreeView ID="TreeView1" runat="server" ShowLines="true" OnSelectedNodeChanged="TreeView1_SelectedNodeChanged"> </asp:TreeView> <%-- <asp:SqlDataSource ID="sourceCategories" runat="server" ConnectionString="<%$ ConnectionStrings:Northwind %>" ProviderName="System.Data.SqlClient" SelectCommand="SELECT * FROM Categories"></asp:SqlDataSource> <asp:SqlDataSource ID="sourceProducts" runat="server" ConnectionString="<%$ ConnectionStrings:Northwind %>" ProviderName="System.Data.SqlClient" SelectCommand="SELECT * FROM Products"> </asp:SqlDataSource>--%> </div> </form> </body> </html> //CS文件 using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Web.Configuration; using System.Data.SqlClient; public partial class Tree : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { DataSet ds = GetProductsAndCategories(); // Loop through the category records. foreach (DataRow row in ds.Tables["Categories"].Rows) { // Use the constructor that requires just text // and a non-displayed value. TreeNode nodeCategory = new TreeNode( row["CategoryName"].ToString(), row["CategoryID"].ToString()); TreeView1.Nodes.Add(nodeCategory); // Get the children (products) for this parent (category). DataRow[] childRows = row.GetChildRows(ds.Relations[0]); // Loop through all the products in this category. foreach (DataRow childRow in childRows) { TreeNode nodeProduct = new TreeNode( childRow["ProductName"].ToString(), childRow["ProductID"].ToString()); nodeCategory.ChildNodes.Add(nodeProduct); } // Keep all categories collapsed (initially). nodeCategory.Collapse(); } } } private DataSet GetProductsAndCategories() { string connectionString = WebConfigurationManager.ConnectionStrings["Northwind"].ConnectionString; SqlConnection con = new SqlConnection(connectionString); string sqlCat = "SELECT CategoryID, CategoryName FROM Categories"; string sqlProd = "SELECT ProductID, ProductName, CategoryID FROM Products"; SqlDataAdapter da = new SqlDataAdapter(sqlCat, con); DataSet ds = new DataSet(); try { con.Open(); // Fill the DataSet with the Categories table. da.Fill(ds, "Categories"); // Change the command text and retrieve the Products table. // You could also use another DataAdapter object for this task. da.SelectCommand.CommandText = sqlProd; da.Fill(ds, "Products"); } finally { con.Close(); } // Define the relationship between Categories and Products. DataRelation relat = new DataRelation("CatProds", ds.Tables["Categories"].Columns["CategoryID"], ds.Tables["Products"].Columns["CategoryID"]); // Add the relationship to the DataSet. ds.Relations.Add(relat); return ds; } protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e) { if (TreeView1.SelectedNode == null) return; if (TreeView1.SelectedNode.Depth == 0) { lblInfo.Text = "You selected Category ID: "; } else if (TreeView1.SelectedNode.Depth == 1) { lblInfo.Text = "You selected Product ID: "; } lblInfo.Text += TreeView1.SelectedNode.Value; } } webconfig文件内 <connectionStrings> <add name="northwind" connectionString="Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI"/> </connectionStrings> 第二种使用数据库填充TreeView的方法为: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="TreeViewDbOnDemand.aspx.cs" Inherits="TreeViewDbOnDemand" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Untitled Page</title> <link href="Styles.css" mce_href="Styles.css" rel="stylesheet" type="text/css" /> </head> <body> <form id="form1" runat="server"> <div> <asp:Label ID="lblInfo" runat="server" EnableViewState="False"></asp:Label> <br /> <br /> <asp:TreeView ID="TreeView1" runat="server" ShowLines="true" OnSelectedNodeChanged="TreeView1_SelectedNodeChanged" OnTreeNodePopulate="TreeView1_TreeNodePopulate"> </asp:TreeView> <%-- <!-- <asp:SqlDataSource ID="sourceCategories" runat="server" ConnectionString="<%$ ConnectionStrings:Northwind %>" ProviderName="System.Data.SqlClient" SelectCommand="SELECT * FROM Categories"></asp:SqlDataSource> <asp:SqlDataSource ID="sourceProducts" runat="server" ConnectionString="<%$ ConnectionStrings:Northwind %>" ProviderName="System.Data.SqlClient" SelectCommand="SELECT * FROM Products"> </asp:SqlDataSource> -->--%> </div> </form> </body> </html> using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Web.Configuration; using System.Data.SqlClient; public partial class TreeViewDbOnDemand : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { DataTable dtCategories = GetCategories(); // Loop through the category records. foreach (DataRow row in dtCategories.Rows) { TreeNode nodeCategory = new TreeNode( row["CategoryName"].ToString(), row["CategoryID"].ToString()); // Use the populate-on-demand feature for this // node's children. nodeCategory.PopulateOnDemand = true; // Make sure the node is collapsed at first, // so it's no populated immediately. nodeCategory.Collapse(); TreeView1.Nodes.Add(nodeCategory); } } } private DataTable GetCategories() { string connectionString =WebConfigurationManager.ConnectionStrings["Northwind"].ConnectionString; SqlConnection con = new SqlConnection(connectionString); string sqlCat = "SELECT CategoryID, CategoryName FROM Categories"; SqlDataAdapter da = new SqlDataAdapter(sqlCat, con); DataSet ds = new DataSet(); try { con.Open(); // Fill the DataSet with the Categories table. da.Fill(ds, "Categories"); } finally { con.Close(); } return ds.Tables["Categories"]; } private DataTable GetProducts(int categoryID) { string connectionString = WebConfigurationManager.ConnectionStrings["Northwind"].ConnectionString; SqlConnection con = new SqlConnection(connectionString); string sqlProd = "SELECT ProductID, ProductName, CategoryID FROM Products WHERE CategoryID=@CategoryID"; SqlDataAdapter da = new SqlDataAdapter(sqlProd, con); da.SelectCommand.Parameters.AddWithValue("@CategoryID", categoryID); DataSet ds = new DataSet(); try { con.Open(); // Fill the DataSet with the Categories table. da.Fill(ds, "Products"); } finally { con.Close(); } return ds.Tables["Products"]; } protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e) { if (TreeView1.SelectedNode == null) return; if (TreeView1.SelectedNode.Depth == 0) { lblInfo.Text = "You selected Category ID: "; } else if (TreeView1.SelectedNode.Depth == 1) { lblInfo.Text = "You selected Product ID: "; } lblInfo.Text += TreeView1.SelectedNode.Value; } protected void TreeView1_TreeNodePopulate(object sender, TreeNodeEventArgs e) { // The only on-populate nodes are categories. // However, if there were several types you would check // the TreeNode.Depth to determine what type of node // is being expanded. int categoryID = Int32.Parse(e.Node.Value); DataTable dtProducts = GetProducts(categoryID); // Loop through the product records. foreach (DataRow row in dtProducts.Rows) { // Use the constructor that requires just text // and a non-displayed value. TreeNode nodeProduct = new TreeNode( row["ProductName"].ToString(), row["ProductID"].ToString()); e.Node.ChildNodes.Add(nodeProduct); } } } //webconfig <connectionStrings> <add name="northwind" connectionString="Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI"/> </connectionStrings> 留为大家参考。