常用的在数据库中建立无限级树形菜单的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#二维码生成的代码分享

    下面是关于“C#二维码生成的代码分享”的完整攻略: 目录 前言 准备工作 安装QRCoder 使用QRCoder生成二维码 示例说明 前言 随着移动应用和微信公众号的普及,二维码已经成为了一个不可或缺的元素。今天,我们就来学习一下如何使用C#来生成二维码。 准备工作 在开始之前,我们需要确保以下几个条件: 你已经安装了Visual Studio 2017或更…

    C# 2023年6月7日
    00
  • C#实现的MD5加密功能与用法示例

    C#实现的MD5加密功能与用法示例 MD5简介 MD5是一种常用的密码散列函数,常用于数据加密、检验消息完整性和数字签名等。该算法由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,MD5的全称是“Message-Digest Algorithm 5”,即消息摘要算法第5版。 MD5的实现 在C#中实现MD5加密功能,可以通过引用Sy…

    C# 2023年6月7日
    00
  • C#实现定时关机小应用

    针对” C#实现定时关机小应用”,我们可以使用System.Diagnostics 命名空间中的Process类来实现。 首先,我们需要一个定时器来控制时间: using System.Windows.Forms; using System.Diagnostics; namespace ShutdownApp { public partial class M…

    C# 2023年6月1日
    00
  • C#通过GET/POST方式发送Http请求

    下面我将为你详细讲解“C#通过GET/POST方式发送HTTP请求”的完整攻略。 1. 使用HttpWebRequest类发送GET请求 发送GET请求需要使用HttpWebRequest类。下面是发送GET请求的示例代码: string url = "https://example.com/api/"; HttpWebRequest r…

    C# 2023年5月31日
    00
  • .Net6.0+Vue3实现数据简易导入功能全过程

    以下是“.Net6.0+Vue3实现数据简易导入功能全过程”的完整攻略: 步骤1:创建.NET Web API项目 在Visual Studio中创建一个新的.NET Web API项目。 步骤2:添加NuGet包 在项目中添加以下NuGet包: Microsoft.AspNetCore.Mvc.NewtonsoftJson Microsoft.Entity…

    C# 2023年5月12日
    00
  • HttpHelper类的调用方法详解

    下面是关于“HttpHelper类的调用方法详解”的完整攻略。 1. HttpHelper类的概述 HttpHelper是一个封装了Http请求的工具类,在网络编程中,常常需要使用到Http请求,如Http GET, Http POST等请求方式。在使用Http请求时,如果每次都使用原始的HttpURLConnection或HttpClient等操作,会导致…

    C# 2023年6月1日
    00
  • C# Replace替换的具体使用

    下面是关于 C# Replace 方法的详细讲解: 什么是 C# Replace 方法? C# Replace 方法是一个字符串方法,用于替换字符串中出现的指定字符或子字符串。它属于 System.String 类,并且是一个静态方法,可以直接通过字符串变量名调用。 Replace 方法的基本使用 Replace 方法最基本的使用形式如下: string r…

    C# 2023年6月7日
    00
  • ASP.NET MVC4异步聊天室的示例代码

    下面是详细讲解“ASP.NET MVC4异步聊天室的示例代码”的完整攻略: 1. 背景介绍 ASP.NET MVC4异步聊天室是一个基于MVC模式的网页聊天室,可以实现多个用户之间的在线聊天。MVC架构分为模型层、视图层和控制器层,异步聊天室的核心在于采用SignalR框架进行实时通信。 2. 程序设计 2.1 模型层 模型层主要实现用户的消息传输,包括输入…

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