zoukankan      html  css  js  c++  java
  • (原创)用重载实现 treeview 的无限分类递归调用(图)

    表结构图

    前置代码比较简单,在页面中放一个 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);
            }

        }
    }

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

  • 相关阅读:
    站立会议第四天
    站立会议第三天
    站立会议第二天
    站立会议第一天
    团队项目估算
    团队计划会议
    《人月神话》阅读笔记01
    《构建之法》阅读笔记06
    微软买书问题
    找水王2
  • 原文地址:https://www.cnblogs.com/jarod99/p/1363183.html
Copyright © 2011-2022 走看看