asp.net:AJAX+LINQ+TreeView 動態填充多級節點

來源:互聯網
上載者:User

示範樣本為一個學生資訊查看菜單:先選擇部門,再選擇班級,最後選擇學生姓名,查看學生資訊;

 

 

採用TreeView的SelectedNodeChanged事件作為一個包含用來顯示學生資訊的Lable的UpdatePanel的觸發器,如下:

<form id="form1" runat="server"><br /> <div><br /> <asp:ScriptManager ID="ScriptManager1" runat="server"><br /> </asp:ScriptManager><br /> <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"><br /> <ContentTemplate><br /> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label><br /> </ContentTemplate><br /> <Triggers><br /> <asp:AsyncPostBackTrigger ControlID="TreeView1"<br /> EventName="SelectedNodeChanged" /><br /> </Triggers><br /> </asp:UpdatePanel><br /> <asp:TreeView ID="TreeView1" runat="server"<br /> onselectednodechanged="TreeView1_SelectedNodeChanged"<br /> ontreenodepopulate="TreeView1_TreeNodePopulate" Width="169px"<br /> ExpandDepth="0" ShowLines="True"><br /> <Nodes><br /> <asp:TreeNode Text="部門->班級->學生" SelectAction="Expand" PopulateOnDemand="true" Value="請選擇"></asp:TreeNode><br /> </Nodes><br /> </asp:TreeView></p><p> </div><br /> </form>

 

其中一些涉及資料庫的查詢,採用LINQ的寫法,再此不多作說明,其先決條件:在“伺服器總管”中添加串連,選擇資料庫,右擊“方案總管”,選擇“添加新項”,選擇“LINQ to sql類”,將你需要用的表從“伺服器總管”拖入跳出的介面中,一定要儲存,好了,完整代碼如下:

using System;<br />using System.Configuration;<br />using System.Data;<br />using System.Linq;<br />using System.Web;<br />using System.Web.Security;<br />using System.Web.UI;<br />using System.Web.UI.HtmlControls;<br />using System.Web.UI.WebControls;<br />using System.Web.UI.WebControls.WebParts;<br />using System.Xml.Linq;<br />using System.Text;//StringBuilder所在命名空間</p><p>public partial class _Default : System.Web.UI.Page<br />{<br /> protected void Page_Load(object sender, EventArgs e)<br /> {</p><p> }</p><p> protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)<br /> {<br /> JWInfoDataContext db = new JWInfoDataContext();</p><p> //LNNQ寫法<br /> var result = (from stuIn in db.學生資訊<br /> where stuIn.學號.ToString() == this.TreeView1.SelectedNode.Value.ToString()<br /> select stuIn).First();<br /> if (result != null)<br /> {<br /> StringBuilder strStuInfo = new StringBuilder();<br /> strStuInfo.AppendLine("學號:" + result.學號.ToString());<br /> strStuInfo.AppendLine("<br />姓名:" + result.姓名.ToString());<br /> strStuInfo.AppendLine("<br />性別:" + result.性別.ToString());<br /> strStuInfo.AppendLine("<br />班級編號:" + result.班級編號.ToString());<br /> Label1.Text = strStuInfo.ToString();<br /> }<br /> else<br /> {<br /> Label1.Text = "沒有資料!";<br /> }<br /> }</p><p> protected void TreeView1_TreeNodePopulate(object sender, TreeNodeEventArgs e)<br /> {<br /> //擷取根節點深度,****注意***設定TreeView的ExpandDepth="0",即預設根節點深度為0<br /> switch (e.Node.Depth)<br /> {<br /> case 0://填充一級節點<br /> PopulateDept(e.Node);<br /> break;<br /> case 1://填充二級節點<br /> PopulateClassID(e.Node);<br /> break;<br /> case 2://三級<br /> PopulateStu(e.Node);<br /> break;<br /> default:<br /> break;<br /> }<br /> }</p><p> /// <summary><br /> /// 填充一級節點的代碼<br /> /// </summary><br /> /// <param name="node"></param><br /> private void PopulateDept(TreeNode node)<br /> {<br /> DataTable dt = RunQuery("PopulateDept", null);</p><p> if (dt.Rows.Count > 0)<br /> {<br /> foreach (DataRow row in dt.Rows)<br /> {<br /> //建立一級節點<br /> TreeNode newNode = new TreeNode();<br /> newNode.Text = row["部門名稱"].ToString();<br /> newNode.Value = row["部門編號"].ToString();</p><p> //指示為動態填充節點<br /> newNode.PopulateOnDemand = true;</p><p> //設定選擇節點時激發TreeNodeExpanded 事件<br /> newNode.SelectAction = TreeNodeSelectAction.Expand;</p><p> //將子節點加入父節點中<br /> node.ChildNodes.Add(newNode);<br /> }<br /> }<br /> }</p><p> /// <summary><br /> /// 填充二級節點<br /> /// </summary><br /> /// <param name="node"></param><br /> private void PopulateClassID(TreeNode node)<br /> {<br /> DataTable dt = RunQuery("PopulateClassID", node.Value);</p><p> if (dt.Rows.Count > 0)<br /> {<br /> foreach (DataRow row in dt.Rows)<br /> {<br /> TreeNode newNode = new TreeNode();<br /> newNode.Text = row["班級名稱"].ToString();<br /> newNode.Value = row["班級編號"].ToString();</p><p> newNode.PopulateOnDemand = true;</p><p> newNode.SelectAction = TreeNodeSelectAction.Expand;</p><p> node.ChildNodes.Add(newNode);<br /> }<br /> }<br /> }</p><p> /// <summary><br /> /// 填充末節點(學生列表)<br /> /// </summary><br /> /// <param name="node"></param><br /> private void PopulateStu(TreeNode node)<br /> {<br /> DataTable dt = RunQuery("PopulateStu", node.Value);</p><p> if (dt.Rows.Count > 0)<br /> {<br /> foreach (DataRow row in dt.Rows)<br /> {<br /> TreeNode newNode = new TreeNode();<br /> newNode.Text = row["姓名"].ToString();<br /> newNode.Value = row["學號"].ToString();</p><p> //不設定動態填充節點<br /> newNode.PopulateOnDemand = false;</p><p> //設定選擇該級節點時引發 SelectedNodeChanged 事件<br /> newNode.SelectAction = TreeNodeSelectAction.Select;</p><p> node.ChildNodes.Add(newNode);<br /> }<br /> }<br /> }</p><p> /// <summary><br /> /// 取得節點資訊<br /> /// </summary><br /> /// <param name="QueryString">填充節點等級說明</param><br /> /// <param name="nodeValue">篩選條件</param><br /> /// <returns>查詢結果</returns><br /> private DataTable RunQuery(string QueryString, string nodeValue)<br /> {<br /> DataTable mytable = new DataTable();</p><p> if (QueryString == "PopulateDept")<br /> {<br /> mytable.Columns.Add("部門編號", typeof(string));<br /> mytable.Columns.Add("部門名稱", typeof(string));</p><p> //LINQ實體操作類,產生的<br /> JWInfoDataContext db = new JWInfoDataContext();</p><p> var result = from dept in db.部門<br /> select new { dept.部門編號, dept.部門名稱 };</p><p> foreach (var item in result)<br /> {<br /> DataRow newRow = mytable.NewRow();<br /> newRow["部門編號"] = item.部門編號.ToString();<br /> newRow["部門名稱"] = item.部門名稱.ToString();<br /> mytable.Rows.Add(newRow);<br /> }<br /> }<br /> else if (QueryString == "PopulateClassID")<br /> {<br /> mytable.Columns.Add("班級編號", typeof(string));<br /> mytable.Columns.Add("班級名稱", typeof(string));</p><p> JWInfoDataContext db = new JWInfoDataContext();<br /> var reuslt = from Class in db.班級<br /> where Class.部門編號 == nodeValue<br /> select new { Class.班級編號, Class.班級名稱 };</p><p> foreach (var item in reuslt)<br /> {<br /> DataRow row = mytable.NewRow();<br /> row["班級編號"] = item.班級編號.ToString();<br /> row["班級名稱"] = item.班級名稱.ToString();<br /> mytable.Rows.Add(row);<br /> }<br /> }</p><p> else if (QueryString == "PopulateStu")<br /> {<br /> mytable.Columns.Add("學號", typeof(string));<br /> mytable.Columns.Add("姓名", typeof(string));</p><p> JWInfoDataContext db = new JWInfoDataContext();</p><p> var result = from stu in db.學生資訊<br /> where stu.班級編號 == nodeValue<br /> select new { stu.學號, stu.姓名 };</p><p> foreach (var item in result)<br /> {<br /> DataRow row = mytable.NewRow();<br /> row["學號"] = item.學號.ToString();<br /> row["姓名"] = item.姓名.ToString();<br /> mytable.Rows.Add(row);<br /> }<br /> }<br /> return mytable;<br /> }<br />}<br />

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.