回 帖 发 新 帖 刷新版面

主题:求助 无限级菜单

想在VS2005下做个数据库无限级菜单,当处于终极时,才附加委托事件,请高手帮忙!
代码类似:
ToolStripMenuItem[] Parent = new ToolStripMenuItem[2];
Parent[0] = new ToolStripMenuItem("系统管理", null, null, "System");
Parent[1] = new ToolStripMenuItem("产品管理", null, new System.EventHandler(Menu_Click), "Product");
ToolStripMenuItem[] Child = new ToolStripMenuItem[2];
Child[0] = new ToolStripMenuItem("系统设置", null, null, "Set");
Child[1] = new ToolStripMenuItem("会员管理", null, new System.EventHandler(Menu_Click), "Member");
ToolStripMenuItem[] Third = new ToolStripMenuItem[2];
Third[0] = new ToolStripMenuItem("配置文件", null, new System.EventHandler(Menu_Click), "Set");
Third[1] = new ToolStripMenuItem("配置文件", null, new System.EventHandler(Menu_Click), "Set");
Child[0].DropDownItems.AddRange(Third);
Parent[0].DropDownItems.AddRange(Child);
MainMenu.Items.AddRange(Parent);

回复列表 (共3个回复)

沙发

你思路不是有了么。。。
哪里有问题么

板凳

已经自己解决,希望对其他人也有帮助,代码比较简单,当时自己脑子僵住了,看来基础很重要啊。

private DataTable MenuTable
        {
            get
            {
                if (objConn.State != ConnectionState.Open)
                {
                    objConn.Open();
                }
                string Sql = "Select * From taga_menu_info";
                OleDbDataAdapter objSda = new OleDbDataAdapter(Sql, objConn);
                DataSet ds = new DataSet();
                objSda.Fill(ds);
                objConn.Close();
                return ds.Tables[0];
            }
        }

        private void TreeMenu(ToolStripMenuItem menuItem,string index)
        {
            DataRow[] rows = MenuTable.Select("ParentId=" + index);
            int len = rows.Length;
            ///当无下级菜单时,添加共用事件Menu_Click
            if (len == 0)
            {
                menuItem.Click += new EventHandler(Menu_Click);
            }
            ToolStripMenuItem item = null;
            if (menuItem == null)
            {
                for (int i = 0; i < len; i++)
                {
                    item = new ToolStripMenuItem(rows[i][1].ToString(), null, null, rows[i][2].ToString());
                    MainMenu.Items.Add(item);
                    TreeMenu(item, rows[i][0].ToString());
                }
            }
            else
            {
                for (int i = 0; i < len; i++)
                {
                    item = new ToolStripMenuItem(rows[i][1].ToString(), null, null, rows[i][2].ToString());
                    menuItem.DropDownItems.Add(item);
                    TreeMenu(item, rows[i][0].ToString());
                }
            }

3 楼

还是这样效率高
private DataTable MenuTable = null;


Page_Load里面
MenuTable = MenuCollect();
TreeMenu(null, "0");



private DataTable MenuCollect()
{
    if (objConn.State != ConnectionState.Open)
    {
        objConn.Open();
    }
    string Sql = "Select * From taga_menu_info";
    OleDbDataAdapter objSda = new OleDbDataAdapter(Sql, objConn);
    DataSet ds = new DataSet();
    objSda.Fill(ds);
    objConn.Close();
    return ds.Tables[0];
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册