TreeView无刷新动态生成树.doc
### TreeView无刷新动态生成树知识点解析 #### 一、概述 在Web应用程序开发中,TreeView控件是一种非常实用的功能组件,它可以帮助开发者构建出树形结构的数据展示方式。这种方式对于展示具有层级关系的数据(如组织架构、文件系统等)尤为有效。本文将通过分析一个具体的案例——“TreeView无刷新动态生成树”,来深入了解如何利用C#和ASP.NET 2.0技术实现TreeView的无刷新加载功能。 #### 二、关键概念解析 ##### 2.1 TreeView控件 TreeView控件用于显示分层数据结构,可以方便地展示具有父子关系的数据集合。该控件支持多种事件,如`SelectedNodeChanged`等,可以通过这些事件实现对节点的选择、展开和收缩等功能。 ##### 2.2 无刷新加载 无刷新加载是指在不重新加载整个页面的情况下更新页面的部分内容。这对于改善用户体验、提高应用程序性能具有重要意义。在本案例中,通过AJAX技术实现无刷新加载。 #### 三、代码解析 ##### 3.1 页面初始化 ```csharp public partial class AdvAcordTree : System.Web.UI.Page { SysInfo sysInfo = new SysInfo(); DES des = new DES(); string patid; DataSet ds; protected void Page_Load(object sender, EventArgs e) { patid = Request["patid"]; if (ds == null) { ds = new AdvAcord().GetMenuTree(sysInfo.ActDeptId, sysInfo.StaffId); } if (!IsPostBack) { TreeInit(); } } ``` - `SysInfo` 和 `DES` 类的实例化:这两个类可能包含了获取系统信息和加密解密逻辑。 - `Page_Load` 方法:页面加载时执行的方法。其中检查了`ds`(一个`DataSet`对象)是否为空,如果为空,则调用`GetMenuTree`方法获取数据;如果不是PostBack请求,则调用`TreeInit`方法进行初始化。 ##### 3.2 树的初始化 ```csharp private void TreeInit() { this.Tvtree.Nodes.Clear(); // 添加个人模板 TreeNode node = new TreeNode("本人", "30"); node.SelectAction = TreeNodeSelectAction.Expand; node.PopulateOnDemand = true; this.Tvtree.Nodes.Add(node); // 添加本科模板 node = new TreeNode("本科", "20"); node.SelectAction = TreeNodeSelectAction.Expand; node.PopulateOnDemand = true; this.Tvtree.Nodes.Add(node); // 添加全院模板 node = new TreeNode("全院", "10"); node.SelectAction = TreeNodeSelectAction.Expand; node.PopulateOnDemand = true; this.Tvtree.Nodes.Add(node); } ``` - `Tvtree.Nodes.Clear()`:清除现有的节点。 - 创建三个根节点:“本人”、“本科”和“全院”,并设置其属性。 - `PopulateOnDemand = true` 表示子节点在需要时才加载,这样可以提高性能。 ##### 3.3 节点加载 ```csharp public void TreeShow(object sender, TreeNodeEventArgs e) { if (IsCallback) if (e.Node.ChildNodes.Count == 0) { LoadChildNode(e.Node, int.Parse(e.Node.Value)); } } private void LoadChildNode(TreeNode node, Int32 id) { DataView dv = ds.Tables[0].DefaultView; dv.RowFilter = string.Format("sharekd={0}", id); foreach (DataRowView drv in dv) { TreeNode nNew = new TreeNode(); nNew.Text = drv[GRPRCPPData.NAME_FIELD].ToString(); nNew.NavigateUrl = string.Format("AdvAcord.aspx?patid={0}&id={1}", patid, des.Encrypt(drv[GRPRCPPData.ID_FIELD].ToString())); node.ChildNodes.Add(nNew); } } ``` - `TreeShow` 方法:当节点被点击时触发,检查当前节点是否有子节点,如果没有则调用`LoadChildNode`方法加载子节点。 - `LoadChildNode` 方法:根据父节点ID查询数据,并创建相应的子节点。 - 使用`DataView`过滤数据集中的行,然后遍历结果,为每个匹配项创建一个新的`TreeNode`对象,并将其添加到父节点的子节点列表中。 #### 四、总结 通过对以上代码的详细分析,我们可以看出该案例展示了如何在ASP.NET中使用TreeView控件实现树形结构的动态加载,并通过AJAX技术实现了无刷新加载,极大地提升了用户体验。这种方法非常适合于需要频繁更新数据的应用场景,如后台管理系统中的权限管理、组织架构展示等。开发者可以根据实际需求调整和扩展此示例,以满足更多复杂的应用场景。
- yanjianqiang2012-04-20实现的很不错,但是动态效果比较僵硬,有待提高
- yangcced2012-04-14总体来说思路清晰,但响应速度有待提高
- cnhao772012-10-18还不错,功能算比较强大,但是数据一多有点弱。。。
- 粉丝: 7
- 资源: 87
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助