一个关于treeview的交互与验证的程序 Default.aspx <%@ Page Title="Home Page" Language="C#" Debug="true" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent"> </asp:Content> <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent"> <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <asp:TreeView ID="TreeView1" runat="server" onselectednodechanged="TreeView1_SelectedNodeChanged"> <Nodes> </Nodes> </asp:TreeView> <asp:Panel ID="Panel1" runat="server"> Name: <asp:Label ID="city" runat="server" Enabled="true" Text=""></asp:Label> <br /> Parent name: <asp:Label ID="country" runat="server" Enabled="true" Text=""></asp:Label> <br /> </asp:Panel> <asp:Button ID="edit" runat="server" Text="Edit" οnclick="edit_Click" /> <br /> <asp:Panel ID="Panel2" runat="server" Visible="false"> Name: <asp:TextBox ID="son" runat="server" Width="76px"></asp:TextBox> <br /> Parent Name: <asp:Label ID="parent11" runat="server" Text=""></asp:Label> <asp:Label ID="error" runat="server" Text="" ForeColor="Red"></asp:Label> <br /> <asp:HiddenField ID="level" runat="server" /> <br /> </asp:Panel> <br /> </ContentTemplate> <Triggers> <asp:PostBackTrigger ControlID="edit" /> </Triggers> </asp:UpdatePanel> </asp:Content> Default.aspx.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data.SqlClient; using System.Data; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { BindDataBase(); TreeView1.ShowLines = true; //whether or not display the line beetween p&s TreeView1.ExpandDepth = 1; //the number of layers for showing at first } } public void BindDataBase() { SqlConnection con = new SqlConnection(); //create the first connection with table cat1 con.ConnectionString = "server=.//KIDD;User ID=sa;Password=19860914;database=db_02"; SqlDataAdapter adpt = new SqlDataAdapter("select * from cat1", con); DataSet ds = new DataSet(); adpt.Fill(ds, "cat1"); SqlConnection con1 = new SqlConnection(); // create the second connection with table cat2 con1.ConnectionString = "server=.//KIDD;User ID=sa;Password=19860914;database=db_02"; SqlDataAdapter adpt1 = new SqlDataAdapter("select * from cat2", con1); DataSet ds1 = new DataSet(); adpt1.Fill(ds1, "cat2"); TreeNode tree1 = new TreeNode("country&city"); this.TreeView1.Nodes.Add(tree1); for (int i = 0; i < ds.Tables["cat1"].Rows.Count; i++) //out_loop, fill second level node(country) { String cat1 = ds.Tables["cat1"].Rows[i][0].ToString(); TreeNode tree2 = new TreeNode(ds.Tables["cat1"].Rows[i][1].ToString()); tree1.ChildNodes.Add(tree2); for (int j = 0; j < ds1.Tables["cat2"].Rows.Count; j++) //in_loop, fill third level node(city) { String cat2 = ds1.Tables["cat2"].Rows[j][2].ToString(); if (cat1 == cat2) //use cat2 to fill matched cat1 { TreeNode tree3 = new TreeNode(ds1.Tables["cat2"].Rows[j][1].ToString()); tree2.ChildNodes.Add(tree3); } } } } protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e) { if (Panel1.Visible != false) { String son1 = Convert.ToString(TreeView1.SelectedNode.Value); // get a node's value String parent1 = Convert.ToString(TreeView1.SelectedNode.Parent.Value); // get selected node's parent's value city.Text = son1; country.Text = parent1; } else { String parent111 = Convert.ToString(TreeView1.SelectedNode.Value); // get selected node's parent's value Int64 level1 = Convert.ToInt64(level.Value); //get the value of label(level), and convert it as Int64 Int64 level2 = Convert.ToInt64(TreeView1.SelectedNode.Depth); parent11.Visible = true; error.Text = ""; if (level1 > level2) //compare two node's depth { parent11.Text = parent111; } else { parent11.Visible = false; error.Text = "Error!!! Can not choose this one as the parent!!!"; } } } protected void SqlDataSource1_Selecting(object sender, SqlDataSourceSelectingEventArgs e) { } protected void edit_Click(object sender, EventArgs e) { Panel2.Visible = true; String son1 = Convert.ToString(TreeView1.SelectedNode.Value); // get a node's value String parent1 = Convert.ToString(TreeView1.SelectedNode.Parent.Value); // get selected node's parent's value son.Text = son1; parent11.Text = parent1; city.Visible = false; country.Visible = false; Panel1.Visible = false; String levela = Convert.ToString(TreeView1.SelectedNode.Depth); //get the selected node's depth and convert it as String type level.Value = levela; // use the lable "level" to transfer value } }