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

        }
    }

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

  • 相关阅读:
    今天的温度还是有点高.....
    [React] 点击---图片90°旋转
    javascript onclick事件可以调用两个方法吗?
    vue 页面回退mounted函数不执行的问题及解决方法
    vue static和assets的区别
    js实现复制|剪切指定内容到粘贴板--clipboard
    纯前端html导出pdf--分页+不分页--html2canvas+jsPDF
    git常用命令行
    浅谈“观察者模式”那点小事儿
    [Linq] ORM
  • 原文地址:https://www.cnblogs.com/jarod99/p/1363183.html
Copyright © 2011-2022 走看看