ASP.NET 读数据库绑定到 TreeView 递归方式

本文介绍了一个使用ASP.NET和C#实现的树形菜单系统。该系统通过从数据库中获取菜单数据,并采用递归方法将数据绑定到TreeView控件上,实现了动态生成树形结构的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:TreeView ID="treeMenu" runat="server"></asp:TreeView>
    </div>
    </form>
</body>
</html>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;

public partial class _Default : System.Web.UI.Page
{
    private readonly string ConnString = @"server=localhost;database=Tree;uid=sa;pwd=123456";
    private DataTable dt = null;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            dt = new DataTable();
            GetMenuToDataTable("select * from sysMenuTree", dt);
            BindTree(dt, null, "0");
        }
    }

    private void BindTree(DataTable dtSource, TreeNode parentNode, string parentID)
    {
        DataRow[] rows = dtSource.Select(string.Format("ParentID={0}", parentID));
        foreach (DataRow row in rows)
        {
            TreeNode node = new TreeNode();
            node.Text = row["sText"].ToString();
            node.Value = row["sValue"].ToString();
            BindTree(dtSource, node, row["NoteId"].ToString());
            if (parentNode == null)
            {
                treeMenu.Nodes.Add(node);
            }
            else
            {
                parentNode.ChildNodes.Add(node);
            }
        }
    }

    private DataTable GetMenuToDataTable(string query, DataTable dt)
    {
        using (SqlConnection conn = new SqlConnection(ConnString))
        {
            SqlCommand cmd = new SqlCommand(query, conn);
            SqlDataAdapter ada = new SqlDataAdapter(cmd);
            ada.Fill(dt);
        }
        return dt;
    }
}
CREATE TABLE [sysMenuTree](
[NoteId] [decimal](18, 0) NOT NULL,
[ParentId] [decimal](18, 0) NULL,
[sText] [nvarchar](50) NULL,
[sValue] [nvarchar](50) NULL,
[sURL] [nvarchar](50) NULL,
[sTarget] [nvarchar](50) NULL,
[Chger] [nvarchar](50) NULL,
[ChgTime] [nvarchar](50) NULL)

create database Tree

insert into sysMenuTree values(3,0,N'目录',N'目录','','','','')
insert into sysMenuTree values(4,0,N'目录',N'目录','','','','')
insert into sysMenuTree values(5,0,N'目录',N'目录','','','','')
insert into sysMenuTree values(6,3,N'项目.1',N'项目.1','','','','')
insert into sysMenuTree values(7,3,N'项目.2',N'项目.2','','','','')
insert into sysMenuTree values(8,4,N'项目.1',N'项目.1','','','','')
insert into sysMenuTree values(9,4,N'项目.2',N'项目.2','','','','')
insert into sysMenuTree values(10,4,N'项目.3',N'项目.3','','','','')
insert into sysMenuTree values(11,5,N'项目.1',N'项目.1','','','','')
insert into sysMenuTree values(12,5,N'项目.2',N'项目.2','','','','')

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值