我在后台通过动态绑定menu的 items。可以绑定。。但绑定成功后,
只有第一个items的Menu1_MenuItemClick事件能触发。其它的都不可以。 string connStr = "server=.;database=MySite;uid=sa;pwd=123";
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                
              
                SqlConnection conn = new SqlConnection(connStr);
                SqlDataAdapter sda = new SqlDataAdapter("select distinct pKind from bKind ", conn);
                DataSet ds = new DataSet();
                sda.Fill(ds);
                for (int i = 0; i <= ds.Tables[0].Rows.Count - 1; i++)
                {
                    MenuItem PMI = new MenuItem();
                    PMI.Text = ds.Tables[0].Rows[i]["pKind"].ToString();
                    PMI.Value = "";
                    initSubMenu(PMI);
               
                }
            }
        }        public void initSubMenu(MenuItem PMI)
        {
            SqlConnection conn = new SqlConnection(connStr);
            SqlDataAdapter sda = new SqlDataAdapter("select distinct sKind from bKind where pKind='"+PMI.Text+"' ", conn);
            DataSet ds = new DataSet();
            sda.Fill(ds);
            for (int i = 0; i <= ds.Tables[0].Rows.Count - 1; i++)
            {
                MenuItem SMI = new MenuItem();
                SMI.Text = ds.Tables[0].Rows[i]["sKind"].ToString();
                SMI.Value = ds.Tables[0].Rows[i]["sKind"].ToString();
                PMI.ChildItems.Add(SMI);
            }
            Menu1.Items.Add(PMI);
        }        protected void Menu1_MenuItemClick(object sender, MenuEventArgs e)
        {
            string a1 = "";
            //MenuEventArgs arg = new MenuEventArgs(PMI);
            //Menu1_MenuItemClick(this, arg);
            string a = e.Item.Value.ToString();
            Response.Write(a);
        }

解决方案 »

  1.   

    没看到绑定事件啊……
            public void initSubMenu(MenuItem PMI)
            {
                SqlConnection conn = new SqlConnection(connStr);
                SqlDataAdapter sda = new SqlDataAdapter("select distinct sKind from bKind where pKind='"+PMI.Text+"' ", conn);
                DataSet ds = new DataSet();
                sda.Fill(ds);
                for (int i = 0; i <= ds.Tables[0].Rows.Count - 1; i++)
                {
                    MenuItem SMI = new MenuItem();
                    SMI.Text = ds.Tables[0].Rows[i]["sKind"].ToString();
                    SMI.Value = ds.Tables[0].Rows[i]["sKind"].ToString();
                    SMI.Click += new EventHanlder(Menu1_MenuItemClick);
                    PMI.ChildItems.Add(SMI);
                }
                Menu1.Items.Add(PMI);
            }
      

  2.   

    如果要绑定的话。。那为什么第一项能触发呢。而且好像SMI.Click加不上
      

  3.   

    我没用过这个Menu控件,你看看它有没有ItemCLick之类的事件
      

  4.   

    呵呵 。。好像只有一个Menu1_MenuItemClick事件。。
      

  5.   

    Menu1_MenuItemClick不是事件……是事件处理……
    你输入SMI.之后看看智能提示里有没有……
      

  6.   

    SMI.Equals;
    SMI.GetHashCode;
    SMI.GetType;
    SMI.ToString;
    只有这几个。。其它全是属性
      

  7.   

    好吧,我以上说的那些都是废话……
    刚才试了一下,貌似没问题啊……        protected void Page_Load(object sender, EventArgs e)
            {
                this.Menu1.MenuItemClick += new MenuEventHandler(Menu1_MenuItemClick);            if (!IsPostBack)
                {
                    for (int i = 0; i < 5; i++)
                    {
                        MenuItem item = new MenuItem(i.ToString(), i.ToString());
                        this.Menu1.Items.Add(item);
                        for (int j = 0; j < 5; j++)
                        {
                            item.ChildItems.Add(new MenuItem(i + "-" + j, i + "-" + j));
                        }
                    }
                }
            }        void Menu1_MenuItemClick(object sender, MenuEventArgs e)
            {
                this.ClientScript.RegisterStartupScript(typeof(string), "", "alert('" + e.Item.Value + "');", true);
            }
      

  8.   

    太郁闷了.我重新写了下....感觉好诡异.这样竟然是对的..      this.Menu1.MenuItemClick += new MenuEventHandler(Menu1_MenuItemClick);
                if (!IsPostBack)
                {                SqlConnection conn = new SqlConnection(connStr);
                    SqlDataAdapter sda = new SqlDataAdapter("select distinct pKind from bKind ", conn);
                    DataSet ds = new DataSet();
                    sda.Fill(ds);
                    for (int i = 0; i <= ds.Tables[0].Rows.Count - 1; i++)
                    {
                        MenuItem PMI = new MenuItem( ds.Tables[0].Rows[i]["pKind"].ToString(), ds.Tables[0].Rows[i]["pKind"].ToString());
                        SqlDataAdapter sda1 = new SqlDataAdapter("select distinct sKind from bKind where pKind='" + PMI.Text + "' ", conn);
                        DataSet ds1 = new DataSet();
                        sda1.Fill(ds1);
                        for (int j = 0; j <= ds1.Tables[0].Rows.Count - 1; j++)
                        {
                            string dd = ds1.Tables[0].Rows[j]["sKind"].ToString();
                            string dd1 = ds1.Tables[0].Rows[j]["sKind"].ToString();
                            PMI.ChildItems.Add(new MenuItem(dd,dd1));
                         
                         }
                        this.Menu1.Items.Add(PMI);
                    }
                  
                }