asp.net2.0生成树型结构

本文介绍如何使用 ASP.NET 中的 TreeView 控件来显示多层次的导航菜单。通过 C# 代码实现从数据库中读取菜单数据并构建树形结构,展示了递归添加节点的方法。

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

 一般用treeview循环遍历数据啦,

下面是主要的页面后台代码:

 

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Model;
using System.Data.SqlClient;
using System.Collections.Generic;

public partial class treeview : System.Web.UI.Page
{
    
protected void Page_Load(object sender, EventArgs e)
    
{
        List
<TreeMenu> treeMenus = (List<TreeMenu>)GetTreeMenu();
        
this.ViewState["treemenusource"= treeMenus;
        AddTree(
0, (TreeNode)null);
    }

    
//递归添加节点
    private void AddTree(int pid, TreeNode pNode)
    
{
        List
<TreeMenu> treeMenus = (List<TreeMenu>)ViewState["treemenusource"];
        List
<TreeMenu> subTreeMenu = treeMenus.FindAll(delegate(TreeMenu treemenu)
        
{
            
if (treemenu.Pid == pid)
                
return true;
            
return false;
        }
);
        
foreach (TreeMenu treemenu in subTreeMenu)
        
{
            TreeNode Node 
= new TreeNode();
            Node.Text 
= treemenu.Name;
            Node.Expanded 
= true;
            Node.NavigateUrl 
= treemenu.Url;
            Node.Target 
= "_blank";
            
if (pNode == null)
            
{
                
this.tv.Nodes.Add(Node);
            }

            
else
            
{
                pNode.ChildNodes.Add(Node);
            }

            AddTree(treemenu.Id, Node); 
        }

    }

    
//获取菜单数据
    public IList<TreeMenu> GetTreeMenu()
    
{
        IList
<TreeMenu> treeMenus = new List<TreeMenu>();
        TreeMenu treeMenu;
        SqlConnection conn 
= new SqlConnection(@"Data Source=ORMER-05DAA50B7SQLEXPRESS;Initial Catalog=count;Integrated Security=True");
        SqlCommand comm 
= new SqlCommand("SELECT [m_id],[m_name],[m_url] ,[m_pid],[m_order],[m_showname]  FROM [treemenu] order by m_order",conn);
        conn.Open();
        SqlDataReader rdr 
= comm.ExecuteReader();
        
while (rdr.Read())
        
{
            treeMenu 
= new TreeMenu(rdr.GetInt32(0), rdr.GetString(1), rdr.GetString(2), rdr.GetInt32(3), rdr.GetInt32(4), rdr.GetString(5));
            treeMenus.Add(treeMenu);
        }

        rdr.Close();
        conn.Close();
        
return treeMenus;
    }

}

前台的代码就是asp:Treeview

 

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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    
<title>无标题页</title>
</head>
<body>
    
<form id="form1" runat="server">
    
<div>
    
<asp:TreeView ID="tv" runat="server" />
    
</div>
    
</form>
</body>
</html>

TreeMenu.cs类,

 

using System;
using System.Collections.Generic;
using System.Text;

namespace Model
{
    
/// <summary>
    
/// 可序列化(用于viewstate)的菜单,
    
/// </summary>

    [Serializable]
    
public class TreeMenu
    
{
        
private int _id;
        
private string _name;
        
private string _url;
        
private int _pid;
        
private int _order;
        
private string _showname;
        
public int Id
        
{
            
get
            
{
                
return _id;
            }

            
set
            
{
                _id 
= value;
            }

        }

        
public string Name
        
{
            
get
            
{
                
return _name;
            }

            
set
            
{
                _name 
= value;
            }

        }

        
public string Url
        
{
            
get
            
{
                
return _url;
            }

            
set
            
{
                _url 
= value;
            }

        }

        
public int Pid
        
{
            
get
            
{
                
return _pid;
            }

            
set
            
{
                _pid 
= value;
            }

        }

        
public int Order
        
{
            
get
            
{
                
return _order;
            }

            
set
            
{
                _order 
= value;
            }

        }

        
public string Showname
        
{
            
get
            
{
                
return _showname;
            }

            
set
            
{
                _showname 
= value;
            }

        }

        
public TreeMenu(int id, string name, string url, int pid, int order, string showname)
        
{
            _id 
= id;
            _name 
= name;
            _url 
= url;
            _pid 
= pid;
            _order 
= order;
            _showname 
= showname;
        }

     
    }

}

treemenu.sql,表结构

 

CREATE TABLE [dbo].[treemenu](
    
[m_id] [int] IDENTITY(1,1NOT NULL,
    
[m_name] [varchar](20NULL,
    
[m_url] [varchar](120NULL,
    
[m_pid] [int] NULL,
    
[m_order] [int] NULL,
    
[m_showname] [varchar](50NULL
)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值