(原创)用重载实现 treeview 的无限分类递归调用(图)

本文介绍如何使用ASP.NET中的TreeView控件通过递归方法从数据库加载多级菜单结构。具体展示了如何通过OleDbDataAdapter获取数据,并利用TreeNode数组进行无限极递归填充TreeView。

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

表结构图

前置代码比较简单,在页面中放一个 treeview 控件和一个 linkbutton 控件就可以了。

重点来看一下后置代码:

 

后置代码
public partial class html2 : System.Web.UI.Page
{
    
//用重载实现 treeview 的无限极递归调用
    public string connString
    { 
get { return ConfigurationManager.ConnectionStrings["uMenu"].ConnectionString; } }

    
protected void LinkButton1_Click(object sender, EventArgs e)
    {
        
string sql = "select * from umenudata";
        OleDbDataAdapter da 
= new OleDbDataAdapter(sql, connString);

        DataSet ds 
= new DataSet();
        da.Fill(ds);

        TreeNode[] tn 
= getMenu(0, ds);
        
foreach (TreeNode tnn in tn)
        {
            TreeView1.Nodes.Add(tnn);
        }
    }

    
//用重载实现递归,返回符合要求的所有菜单项
    
//使用这个函数的返回值填充 TreeView 就可以了
    TreeNode[] getMenu(int pid, DataSet ds)
    {
        DataView dv 
= ds.Tables[0].DefaultView;
        dv.RowFilter 
= "PID=" + pid.ToString();
        
int i = 0;
        TreeNode[] tn 
= new TreeNode[dv.Count];

        
//一级项循环
        foreach (DataRowView drv in dv)
        {
            tn[i] 
= new TreeNode(drv["mName"].ToString(), drv["ID"].ToString());

            
//使用递归方式插入下级菜单的数组
            getMenu(int.Parse(tn[i].Value.ToString()), ds, tn[i]);

            i
++;
        }

        
return tn;
    }

    
//递归过程
    void getMenu(int pid, DataSet ds, TreeNode tn)
    {
        DataView dv 
= ds.Tables[0].DefaultView;
        dv.RowFilter 
= "PID=" + pid.ToString();

        
//当前项循环
        foreach (DataRowView drv in dv)
        {
            TreeNode tn0 
= new TreeNode(drv["mName"].ToString(), drv["ID"].ToString());

            
//插入下级项
            tn.ChildNodes.Add(tn0);

            
//递归调用
            getMenu(int.Parse(drv["ID"].ToString()), ds, tn0);
        }

    }
}

 

测试的菜单是四级结构,相信更多级别的也是这样(懒得测试了)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值