最近在做一个信息管理系统的后台,打算用树型结构显示导航列表,用一般的遍历实现不了这样无限级别的导航,所以使用递归.
一.数据库表结构大致是这样:
ID Name(导航名) ParentID(对应父级)
1 后台管理 0
2 人员管理 1
3 系统人员 2
4 员工管理 3
5 单位管理 1
6 基础资料 0
7 客户管理 6
8 商品管理 6
……
还有很多属性,这里就不列举出来了,在日后将推出权限方面的文章再提及其他属性,为了思路清晰,实现树绑定仅这些列足够.
预期效果:
- 后台管理
- 人员管理
系统人员
员工管理
- 单位管理
- 基础资料
- 客户管理
- 商品管理
(针对列举的数据只有3层,我们要做的是无限级别)
二.初期准备:新建Asp.net页面,从导航控件盒拖入TreeView控件
三.思路:
遍历找出没有父级的节点A,如果有下级节点则将下级节点B添加到A的子集,如果B也拥有下级节点C,则将C添加到B的子集,……从这规律我们可以推导出需要遍历的地方以及参数包括 当前节点ID,当前节点实体.以下是代码:
//得到导航列表
private List<Model.Sys_Navigation> NavList = new BLL.Sys_Navigation().GetList();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//执行绑定
CreateTree();
}
}
#region 递归绑定树控件
private void CreateTree()
{
foreach (Model.Sys_Navigation model in NavList.Where(p => p.ParentID == 0))
{
TreeNode ParentNode = new TreeNode(model.Name, model.ID.ToString());
TreeView1.Nodes.Add(ParentNode);
GetChildNodes(ParentNode);
}
}
private void GetChildNodes(TreeNode ParentNode)
{
foreach (Model.Sys_Navigation model in NavList.Where(p => p.ParentID == MyConvert.toInt32(ParentNode.Value)))
{
TreeNode ChildNode = new TreeNode(model.Name, model.ID.ToString());
if (NavList.Exists(p => p.ParentID == model.ID)) GetChildNodes(ChildNode);
ParentNode.ChildNodes.Add(ChildNode);
}
}
#endregion
代码已经测试通过,为何不能本地上传图片呢,555..只有文字,十分空洞.
分享到:
相关推荐
在VB.NET编程中,TreeView控件是一个非常常用且功能强大的组件,它用于显示层次结构的数据,比如文件系统、组织结构或者数据库记录等。本篇文章将深入探讨如何在VB.NET中进行TreeView节点的添加和删除操作。 一、...
接下来,我们需要为TreeView填充数据。有两种主要方法:静态数据绑定和动态数据绑定。在本实例中,我们更可能使用动态数据绑定,因为它能更好地适应不断变化的数据源。 1. **动态数据绑定**:可以通过在代码后面...
5. **UI层**:在ASP.NET或WinForms界面中,添加TreeView控件,然后调用业务逻辑层的方法填充TreeView。设置TreeView控件的DataSource属性为你在业务逻辑层创建的TreeNode集合,然后调用DataBind()方法来实际绑定数据...
例如,以下是一个简化的C#示例代码片段,展示了如何使用递归填充TreeView: ```csharp void RecursiveAddNodes(TreeNode parentNode, List<NodeModel> nodes) { foreach (var node in nodes.Where(n => n.ParentId...
通过拖放操作,可以在设计时配置TreeView控件,但更常见的是在运行时动态生成和填充数据。 2. 动态生成: 在实际应用中,数据源可能包含未知数量的层级,这就需要动态生成TreeView的节点。动态生成允许根据数据库...
这里使用了ADO.NET中的`SqlDataAdapter`类来填充数据集。值得注意的是,查询语句 `"select * from TreeMenu"` 假设存在一个名为`TreeMenu`的表,其中包含节点数据。 **`BindCategoryTreeVew()` 方法** ```csharp ...
标题中的".net + mysql 动态生成TreeView"指的是使用.NET框架(这里特指VS2005)与MySQL数据库结合,动态创建一个TreeView控件的过程。TreeView控件是ASP.NET中用于显示层次结构数据的一种可视化组件,常用于网站...
在ASP.NET的后台代码中,你需要编写逻辑来填充TreeView控件。这通常涉及到递归函数,因为无限级分类的本质就是递归。 ```csharp protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { ...
### ASP.NET TreeView树型菜单操作实例解析 在ASP.NET Web应用程序中,`TreeView`控件是一种非常实用的工具,用于展示层次结构的数据,如目录、分类或组织结构。本文将详细解析一个已完成代码调试的ASP.NET `...
在ASP.NET页面中,可以通过XML数据源或自定义代码来填充TreeView。 对于Oracle数据库的查询,我们可以使用ADO.NET或者Entity Framework来执行SQL语句。在多表嵌套查询中,可能涉及JOIN操作,例如INNER JOIN、LEFT ...
- 动态绑定意味着在运行时从数据库或其他数据源加载数据并填充TreeView控件。 - 这种方法的好处是可以在不重新编译应用程序的情况下更新数据。 ### 实现步骤详解 #### 3. **获取数据** - 数据是从数据库中获取...
综上所述,"ASP.NET动态生成树(treeView)"涉及到了ASP.NET控件的使用、数据库交互、权限控制、页面布局等多个方面的知识。通过MasterPage.master.cs中的代码,开发者可以构建出符合用户权限的动态导航树,提供灵活且...
通过上述步骤,我们可以使用递归方法动态生成一个功能完整的`TreeView`控件,包括自动填充节点数据以及展开折叠时动态更换图标等功能。这种方法不仅简化了编码过程,而且提高了代码的可维护性和扩展性。希望本文对...
总结来说,这个压缩包提供的示例可能会教给你如何使用C#和ASP.NET中的递归方法来处理无限级别的TreeView,无论是单表还是多表的数据结构。理解并掌握这种技术对于构建可扩展的、层次结构丰富的Web应用程序至关重要。...
在IT领域,尤其是在Web开发中,使用ASP.NET...总的来说,"Tree使用递归显示"是一个涉及数据结构、数据库操作、ASP.NET控件使用和递归算法的综合问题,理解和掌握这些知识点对于开发高效且用户友好的Web应用至关重要。
4. **递归填充TreeView** 在OA办公系统中,通常需要根据权限和组织结构动态生成导航菜单。可以编写一个递归方法,从根节点开始,根据数据库中的部门或角色信息逐级填充节点。递归过程中,对于每个父节点,都需要...
本文将详细介绍使用 `.NET` 中 `System.Runtime.Serialization.Formatters.Binary` 命名空间下的工具来实现这一过程。 #### 序列化概述 序列化是将对象的状态转换为可以存储或传输的形式的过程。在大多数情况下,...
在.NET框架中,树控件...总之,.NET初学者在学习过程中应掌握树控件的使用,如创建、操作节点和处理事件,同时理解并能应用递归算法,如求阶乘。通过实践和探索,可以提升编程能力,为后续的.NET开发奠定坚实基础。
无限级分类目录树的关键在于数据结构的正确表示和控件的递归填充。在ASP.NET中,可以利用Linq to SQL、Entity Framework等ORM工具从数据库获取层级数据,然后利用控件提供的API来构建层次结构。在处理大量数据时,...
本篇将详细讲解如何使用数据库快速更新Treeview控件,涉及到的主要技术包括VB.NET、ADO.NET以及数据绑定。 首先,了解VB.NET的基本语法是必要的,它是Visual Basic的.NET版本,提供了丰富的控件库和面向对象编程的...