asp.net:AJAX+LINQ+TreeView 动态填充多级节点

简介: 演示示例为一个学生信息查看菜单:先选择部门,再选择班级,最后选择学生姓名,查看学生信息; 效果图:      采用TreeView的SelectedNodeChanged事件作为一个包含用来显示学生信息的Lable的UpdatePanel的触发器,如下: [xhtml] view plai.

演示示例为一个学生信息查看菜单:先选择部门,再选择班级,最后选择学生姓名,查看学生信息;

效果图:

  效果图

 

采用TreeView的SelectedNodeChanged事件作为一个包含用来显示学生信息的Lable的UpdatePanel的触发器,如下:


[xhtml]  view plain  copy
  1. <form id="form1" runat="server">      
  2.     <div>  
  3.         <asp:ScriptManager ID="ScriptManager1" runat="server">  
  4.         </asp:ScriptManager>  
  5.         <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">  
  6.            <ContentTemplate>  
  7.                <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>  
  8.            </ContentTemplate>  
  9.             <Triggers>  
  10.                 <asp:AsyncPostBackTrigger ControlID="TreeView1"   
  11.                     EventName="SelectedNodeChanged" />  
  12.             </Triggers>  
  13.         </asp:UpdatePanel>  
  14.         <asp:TreeView ID="TreeView1" runat="server"   
  15.             onselectednodechanged="TreeView1_SelectedNodeChanged"   
  16.             ontreenodepopulate="TreeView1_TreeNodePopulate" Width="169px"   
  17.             ExpandDepth="0" ShowLines="True">  
  18.             <Nodes>  
  19.                <asp:TreeNode Text="部门->班级->学生" SelectAction="Expand" PopulateOnDemand="true" Value="请选择"></asp:TreeNode>  
  20.             </Nodes>  
  21.         </asp:TreeView>  
  22.           
  23.     </div>  
  24.     </form>  

 

其中一些涉及数据库的查询,采用LINQ的写法,再此不多作说明,其先决条件:在“服务器资源管理器”中添加连接,选择数据库,右击“解决方案资源管理器”,选择“添加新项”,选择“LINQ to sql类”,将你需要用的表从“服务器资源管理器”拖入跳出的界面中,一定要保存,好了,完整代码如下:


[c-sharp]  view plain  copy
  1. using System;  
  2. using System.Configuration;  
  3. using System.Data;  
  4. using System.Linq;  
  5. using System.Web;  
  6. using System.Web.Security;  
  7. using System.Web.UI;  
  8. using System.Web.UI.HtmlControls;  
  9. using System.Web.UI.WebControls;  
  10. using System.Web.UI.WebControls.WebParts;  
  11. using System.Xml.Linq;  
  12. using System.Text;//StringBuilder所在命名空间  
  13.   
  14. public partial class _Default : System.Web.UI.Page  
  15. {  
  16.     protected void Page_Load(object sender, EventArgs e)  
  17.     {  
  18.           
  19.     }  
  20.   
  21.     protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)  
  22.     {  
  23.         JWInfoDataContext db = new JWInfoDataContext();  
  24.   
  25.         //LNNQ写法  
  26.         var result = (from stuIn in db.学生信息  
  27.                       where stuIn.学号.ToString() == this.TreeView1.SelectedNode.Value.ToString()  
  28.                       select stuIn).First();  
  29.         if (result != null)  
  30.         {  
  31.             StringBuilder strStuInfo = new StringBuilder();  
  32.             strStuInfo.AppendLine("学号:" + result.学号.ToString());  
  33.             strStuInfo.AppendLine("<br />姓名:" + result.姓名.ToString());  
  34.             strStuInfo.AppendLine("<br />性别:" + result.性别.ToString());  
  35.             strStuInfo.AppendLine("<br />班级编号:" + result.班级编号.ToString());  
  36.             Label1.Text = strStuInfo.ToString();  
  37.         }  
  38.         else  
  39.         {  
  40.             Label1.Text = "没有数据!";  
  41.         }  
  42.     }  
  43.   
  44.     protected void TreeView1_TreeNodePopulate(object sender, TreeNodeEventArgs e)  
  45.     {  
  46.         //获取根节点深度,****注意***设置TreeView的ExpandDepth="0",即默认根节点深度为0  
  47.         switch (e.Node.Depth)  
  48.         {  
  49.             case 0://填充一级节点  
  50.                 PopulateDept(e.Node);  
  51.                 break;  
  52.             case 1://填充二级节点  
  53.                 PopulateClassID(e.Node);  
  54.                 break;  
  55.             case 2://三级  
  56.                 PopulateStu(e.Node);  
  57.                 break;  
  58.             default:  
  59.                 break;  
  60.         }  
  61.     }  
  62.   
  63.     /// <summary>  
  64.     /// 填充一级节点的代码  
  65.     /// </summary>  
  66.     /// <param name="node"></param>  
  67.     private void PopulateDept(TreeNode node)  
  68.     {  
  69.         DataTable dt = RunQuery("PopulateDept"null);  
  70.   
  71.         if (dt.Rows.Count > 0)  
  72.         {  
  73.             foreach (DataRow row in dt.Rows)  
  74.             {  
  75.                 //创建一级节点  
  76.                 TreeNode newNode = new TreeNode();  
  77.                 newNode.Text = row["部门名称"].ToString();  
  78.                 newNode.Value = row["部门编号"].ToString();  
  79.   
  80.                 //指示为动态填充节点  
  81.                 newNode.PopulateOnDemand = true;  
  82.   
  83.                 //设置选择节点时激发TreeNodeExpanded 事件  
  84.                 newNode.SelectAction = TreeNodeSelectAction.Expand;  
  85.   
  86.                 //将子节点加入父节点中  
  87.                 node.ChildNodes.Add(newNode);  
  88.             }  
  89.         }  
  90.     }  
  91.   
  92.     /// <summary>  
  93.     /// 填充二级节点  
  94.     /// </summary>  
  95.     /// <param name="node"></param>  
  96.     private void PopulateClassID(TreeNode node)  
  97.     {  
  98.         DataTable dt = RunQuery("PopulateClassID", node.Value);  
  99.   
  100.         if (dt.Rows.Count > 0)  
  101.         {  
  102.             foreach (DataRow row in dt.Rows)  
  103.             {  
  104.                 TreeNode newNode = new TreeNode();  
  105.                 newNode.Text = row["班级名称"].ToString();  
  106.                 newNode.Value = row["班级编号"].ToString();  
  107.   
  108.                 newNode.PopulateOnDemand = true;  
  109.   
  110.                 newNode.SelectAction = TreeNodeSelectAction.Expand;  
  111.   
  112.                 node.ChildNodes.Add(newNode);  
  113.             }  
  114.         }  
  115.     }  
  116.   
  117.     /// <summary>  
  118.     /// 填充末节点(学生列表)  
  119.     /// </summary>  
  120.     /// <param name="node"></param>  
  121.     private void PopulateStu(TreeNode node)  
  122.     {  
  123.         DataTable dt = RunQuery("PopulateStu", node.Value);  
  124.   
  125.         if (dt.Rows.Count > 0)  
  126.         {  
  127.             foreach (DataRow row in dt.Rows)  
  128.             {  
  129.                 TreeNode newNode = new TreeNode();  
  130.                 newNode.Text = row["姓名"].ToString();  
  131.                 newNode.Value = row["学号"].ToString();  
  132.   
  133.                 //不设置动态填充节点  
  134.                 newNode.PopulateOnDemand = false;  
  135.   
  136.                 //设置选择该级节点时引发 SelectedNodeChanged 事件  
  137.                 newNode.SelectAction = TreeNodeSelectAction.Select;  
  138.   
  139.                 node.ChildNodes.Add(newNode);  
  140.             }  
  141.         }  
  142.     }  
  143.   
  144.     /// <summary>  
  145.     /// 取得节点信息  
  146.     /// </summary>  
  147.     /// <param name="QueryString">填充节点等级说明</param>  
  148.     /// <param name="nodeValue">筛选条件</param>  
  149.     /// <returns>查询结果</returns>  
  150.     private DataTable RunQuery(string QueryString, string nodeValue)  
  151.     {  
  152.         DataTable mytable = new DataTable();  
  153.   
  154.         if (QueryString == "PopulateDept")  
  155.         {  
  156.             mytable.Columns.Add("部门编号"typeof(string));  
  157.             mytable.Columns.Add("部门名称"typeof(string));  
  158.   
  159.             //LINQ实体操作类,生成的  
  160.             JWInfoDataContext db = new JWInfoDataContext();  
  161.   
  162.             var result = from dept in db.部门  
  163.                          select new { dept.部门编号, dept.部门名称 };  
  164.   
  165.             foreach (var item in result)  
  166.             {  
  167.                 DataRow newRow = mytable.NewRow();  
  168.                 newRow["部门编号"] = item.部门编号.ToString();  
  169.                 newRow["部门名称"] = item.部门名称.ToString();  
  170.                 mytable.Rows.Add(newRow);  
  171.             }  
  172.         }  
  173.         else if (QueryString == "PopulateClassID")  
  174.         {  
  175.             mytable.Columns.Add("班级编号"typeof(string));  
  176.             mytable.Columns.Add("班级名称"typeof(string));  
  177.   
  178.             JWInfoDataContext db = new JWInfoDataContext();  
  179.             var reuslt = from Class in db.班级  
  180.                          where Class.部门编号 == nodeValue  
  181.                          select new { Class.班级编号, Class.班级名称 };  
  182.   
  183.             foreach (var item in reuslt)  
  184.             {  
  185.                 DataRow row = mytable.NewRow();  
  186.                 row["班级编号"] = item.班级编号.ToString();  
  187.                 row["班级名称"] = item.班级名称.ToString();  
  188.                 mytable.Rows.Add(row);  
  189.             }  
  190.         }  
  191.   
  192.         else if (QueryString == "PopulateStu")  
  193.         {  
  194.             mytable.Columns.Add("学号"typeof(string));  
  195.             mytable.Columns.Add("姓名"typeof(string));  
  196.   
  197.             JWInfoDataContext db = new JWInfoDataContext();  
  198.   
  199.             var result = from stu in db.学生信息  
  200.                          where stu.班级编号 == nodeValue  
  201.                          select new { stu.学号, stu.姓名 };  
  202.   
  203.             foreach (var item in result)  
  204.             {  
  205.                 DataRow row = mytable.NewRow();  
  206.                 row["学号"] = item.学号.ToString();  
  207.                 row["姓名"] = item.姓名.ToString();  
  208.                 mytable.Rows.Add(row);  
  209.             }  
  210.         }  
  211.         return mytable;  
  212.     }  
  213. }  

 



原文发布时间为:2010-01-18


本文作者:vinoYang


本文来自云栖社区合作伙伴CSDN博客,了解相关信息可以关注CSDN博客。

目录
相关文章
|
6月前
|
SQL 开发框架 .NET
|
6月前
|
XML SQL 开发框架
|
6天前
|
XML 开发框架 .NET
.NET 9 中 LINQ 新增功能实操
.NET 9 中 LINQ 新增功能实操
|
6月前
|
开发框架 前端开发 JavaScript
ASP.NET AJAX使用方法概述(三)
ASP.NET AJAX使用方法概述(三)
51 1
|
1月前
|
开发框架 .NET 开发工具
.NET 9 中 LINQ 新增的功能
.NET 9 中 LINQ 新增的功能
|
6月前
|
开发框架 缓存 前端开发
安装ASP.NET AJAX (一安装)
安装ASP.NET AJAX (一安装)
100 0
|
6月前
|
XML 开发框架 .NET
C# .NET面试系列八:ADO.NET、XML、HTTP、AJAX、WebService
## 第二部分:ADO.NET、XML、HTTP、AJAX、WebService #### 1. .NET 和 C# 有什么区别? .NET(通用语言运行时): ```c# 定义:.NET 是一个软件开发框架,提供了一个通用的运行时环境,用于在不同的编程语言中执行代码。 作用:它为多语言支持提供了一个统一的平台,允许不同的语言共享类库和其他资源。.NET 包括 Common Language Runtime (CLR)、基础类库(BCL)和其他工具。 ``` C#(C Sharp): ```c# 定义: C# 是一种由微软设计的面向对象的编程语言,专门为.NET 平台开发而创建。 作
309 2
|
6月前
|
开发框架 安全 .NET
C# .NET面试系列三:集合、异常、泛型、LINQ、委托、EF!
<h2>集合、异常、泛型、LINQ、委托、EF! #### 1. IList 接口与 List 的区别是什么? IList 接口和 List 类是C#中集合的两个相关但不同的概念。下面是它们的主要区别: <b>IList 接口</b> IList 接口是C#中定义的一个泛型接口,位于 System.Collections 命名空间。它派生自 ICollection 接口,定义了一个可以通过索引访问的有序集合。 ```c# IList 接口包含一系列索引化的属性和方法,允许按索引访问、插入、移除元素等。 由于是接口,它只定义了成员的契约,而不提供具体的实现。类似于 IEnumera
347 2
|
6月前
|
开发框架 .NET
|
6月前
|
开发框架 .NET C#