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);
            }

        }
    }

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

  • 相关阅读:
    C 语言定义
    一次系统磁盘异常使用100%的处理
    supervisord 安装、配置体验
    uva 211(dfs)
    poj1651
    有一种感动叫ACM(记WJMZBMR在成都赛区开幕式上的讲话)
    nyoj-746
    Codeforces Round #308 (Div. 2)----C. Vanya and Scales
    long long 与 _int64
    石子归并问题(nyoj737)
  • 原文地址:https://www.cnblogs.com/jarod99/p/1363183.html
Copyright © 2011-2022 走看看