常用的在数据库中建立无限级树形菜单的asp.net代码

建立无限级树形菜单是Web开发的常见需求之一。在ASP.NET框架下,我们可以使用数据库的递归查询,加上C#语言的代码逻辑来实现这个功能。下面是需要遵循的步骤和示例说明:

第一步:建立数据库表

应该建立一个名为Menus的表,包含以下字段:

  • Id(菜单ID,主键,自增)
  • Name(菜单名,varchar类型)
  • ParentId(父菜单ID,int类型)

字段内容示例如下:

CREATE TABLE Menus
(
Id int PRIMARY KEY IDENTITY(1,1),
Name varchar(50) NOT NULL,
ParentId int NOT NULL
)

第二步:插入数据

插入几条数据作为示例,在本例中使用如下数据:

INSERT INTO Menus (Name, ParentId) VALUES ('Menu 1', 0)
INSERT INTO Menus (Name, ParentId) VALUES ('Menu 1-1', 1)
INSERT INTO Menus (Name, ParentId) VALUES ('Menu 1-2', 1)
INSERT INTO Menus (Name, ParentId) VALUES ('Menu 2', 0)
INSERT INTO Menus (Name, ParentId) VALUES ('Menu 2-1', 4)
INSERT INTO Menus (Name, ParentId) VALUES ('Menu 2-1-1', 5)
INSERT INTO Menus (Name, ParentId) VALUES ('Menu 2-1-2', 5)

第三步:添加引用

在项目中添加以下引用:

using System.Data.SqlClient;
using System.Data;

第四步:写逻辑代码

使用递归查询来检索整个菜单树:

private void BindTreeView(TreeNode treeNode, int parentId)
{
    DataTable dt = GetDataTable(parentId);
    foreach (DataRow dr in dt.Rows)
    {
        TreeNode subTreeNode = new TreeNode(dr["Name"].ToString(), dr["Id"].ToString());
        treeNode.ChildNodes.Add(subTreeNode);
        BindTreeView(subTreeNode, Convert.ToInt32(dr["Id"]));
    }
}

private DataTable GetDataTable(int parentId)
{
    using (SqlConnection con = new SqlConnection("ConnectionString"))
    {
        using (SqlCommand cmd = new SqlCommand("SELECT * FROM Menus WHERE ParentId = @ParentId", con))
        {
            cmd.Parameters.AddWithValue("@ParentId", parentId);
            using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
            {
                DataTable dt = new DataTable();
                sda.Fill(dt);
                return dt;
            }
        }
    }
}

第五步:执行代码

将以下代码添加到aspx文件中的Page_Load事件中:

if (!Page.IsPostBack)
{
    DataTable dt = GetDataTable(0);
    foreach (DataRow dr in dt.Rows)
    {
        TreeNode treeNode = new TreeNode(dr["Name"].ToString(), dr["Id"].ToString());
        BindTreeView(treeNode, Convert.ToInt32(dr["Id"]));
        TreeView1.Nodes.Add(treeNode);
    }
}

示例说明

以下是根据示例数据生成的菜单:

- Menu 1
  |- Menu 1-1
  |- Menu 1-2
- Menu 2
  |- Menu 2-1
    |- Menu 2-1-1
    |- Menu 2-1-2

另一个示例

如果您需要一个具有“下级数量标记”的树形菜单,您可以将以下代码添加到.BindTreeView方法的foreach循环中:

int childCount = GetChildCount(Convert.ToInt32(dr["Id"]));
if (childCount > 0)
{
    bool expanded = true;
    if (treeNode.Expanded.HasValue)
    {
        expanded = treeNode.Expanded.Value;
    }
    treeNode.Text += $" ({childCount})";
    treeNode.Expand(expanded);
}

此处使用了以下方法来获取子级的数量:

private int GetChildCount(int id)
{
    using (SqlConnection con = new SqlConnection("ConnectionString"))
    {
        using (SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM Menus WHERE ParentId = @Id", con))
        {
            cmd.Parameters.AddWithValue("@Id", id);
            con.Open();
            return Convert.ToInt32(cmd.ExecuteScalar());
        }
    }
}

示例说明:

- Menu 1 (2)
  |- Menu 1-1 (0)
  |- Menu 1-2 (0)
- Menu 2 (1)
  |- Menu 2-1 (2)
    |- Menu 2-1-1 (0)
    |- Menu 2-1-2 (0)

以上就是建立无限级树形菜单的asp.net代码攻略,希望对您有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:常用的在数据库中建立无限级树形菜单的asp.net代码 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • C#文件非占用读取与帮助类FileHelper

    C#的FileHelper类库提供了许多方便的方法来处理文件读写操作,FileHelper类库中的File类封装了很多文件读写的方法,同时还提供了非占用读取文件的方法,可以有效防止文件被占用而无法进行读取或写入操作。 非占用读取文件 在进行文件读写操作时,有时候文件可能被其他应用程序或者进程占用而无法进行读写操作。FileHelper类库提供了一种解决方法:…

    C# 2023年6月1日
    00
  • C#中dotnetcharting的用法实例详解

    C#中dotnetcharting的用法实例详解 简介 DotNetCharting 是基于 .NET 平台的一个强大的图表绘制组件。它可以帮助开发人员快速地在自己的 Web 应用程序中添加各种类型的图表,如 2D 和 3D 图表、仪表盘、实时图表和地图。DotNetCharting 对于那些需要快速建立强大图表的开发人员来说,是一个非常有用的工具。 安装 …

    C# 2023年6月1日
    00
  • C#修改MAC地址类的实例

    首先我们需要明确一下”C#修改MAC地址类的实例”到底指什么。MAC地址是指网络适配器(网卡)上的物理地址,每张网卡都有唯一的MAC地址,它的作用是在局域网中进行唯一标识和寻址。而”C#修改MAC地址类的实例”指的是通过C#编程语言编写一个可以修改MAC地址的类,并实例化这个类,这样我们就可以在程序中使用这个类来修改MAC地址。 下面是具体的攻略: 1. 了…

    C# 2023年6月7日
    00
  • c# 实现简单的串口通讯

    下面是详细讲解“c#实现简单的串口通讯”的完整攻略。 硬件准备 在进行串口通讯前,我们需要准备一些硬件设备,包括: 确保计算机中带有串口或者USB转串口的转接器。 一根串口线。 串口通讯设备(例如:单片机)。 环境配置 在进行串口通讯前,需要在电脑上安装串口通讯库,使用.NET的串口类即可实现串口通讯。在Visual Studio中,可以在工具箱中找到串口控…

    C# 2023年5月15日
    00
  • ASP.NET的实用技巧详细介绍

    ASP.NET的实用技巧详细介绍 什么是ASP.NET ASP.NET 是一种用于构建 Web 应用程序的框架,它是从 ASP 框架发展而来的,是一个服务器端的 Web 应用程序框架,由微软公司开发。ASP.NET 支持多种编程语言,如 VB.NET 、C#,在 Windows 平台上运行,可以自由地创建 Web 服务和动态网页应用程序。 ASP.NET的实…

    C# 2023年6月3日
    00
  • asp.net core常见的4种数据加密算法

    ASP.NET Core常见的4种数据加密算法 在ASP.NET Core中,为了保证敏感信息的安全性,常常需要使用加密算法进行数据加密。因此,本文将介绍ASP.NET Core常见的4种数据加密算法,并给出相应的示例说明。 1. AES算法 AES即高级加密标准算法(Advanced Encryption Standard),是公认的最安全的加密算法之一。…

    C# 2023年6月3日
    00
  • asp.net 生成静态页时的进度条显示

    为了实现在 ASP.NET 生成静态页时显示进度条,需要实现以下步骤: 添加一个 WebForm 页面,用于显示进度条并更新进度。这个页面可以使用 AJAX 技术,在不刷新整个页面的情况下更新进度条。 在生成静态页的代码中,添加一个事件来通知页面更新进度。这个事件可以使用委托来定义,让生成静态页的代码在执行过程中调用委托,传递当前的进度值给页面。 在生成静态…

    C# 2023年6月1日
    00
  • C#连接SQL Server数据库的实例讲解

    下面是关于C#连接SQL Server数据库的完整攻略: 一、准备工作 首先需要在本地安装好SQL Server数据库,并开启相关服务。然后需要安装SqlServer.DatClient包,可以通过NuGet Package Manager搜索安装。 二、连接数据库 连接数据库的过程: using System.Data.SqlClient; namespa…

    C# 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部