日期:2014-05-18  浏览次数:20627 次

给button添加事件没反应??
给两个panel动态添加button并设置属性和事件,第一个panel成功,第二个事件没响应。两个panel都放在updatepanel里面。代码如下:
C# code

  protected void Page_Load(object sender, EventArgs e)
   {
  sda = new SqlDataAdapter("select faci_id, faci_name from facilities where display='1'", conn);
        sda.Fill(ds, "facilities");
  for (int i = 0; i < ds.Tables["facilities"].Rows.Count; i++)
        {
            myButton = new Button();
            myButton.Width = 85;
            myButton.Text = ds.Tables["facilities"].Rows[i][1].ToString();
            myButton.ID = ds.Tables["facilities"].Rows[i][0].ToString();
            myButton.Click += new EventHandler(myButton_Click);
            this.Panel1.Controls.Add(myButton);
        }
   }

 protected void myButton_Click(object sender,EventArgs e)
    {
        Button myBtn = (Button)sender;
        selectButton(myBtn.Text.ToString().Trim());
         Label1.Text = "您点击了" +myBtn.Text.ToString()+ "这个按钮";
    }

    private void selectButton(string myButtonText)
    {
        ds.Tables.Clear();
        string sql = "SELECT * FROM faci_orders INNER JOIN facilities ON faci_orders.faci_id = "+
        "facilities.faci_id WHERE (facilities.faci_name = '" + myButtonText + "')";
        sda = new SqlDataAdapter(sql,conn);
        sda.Fill(ds,"faci_orders");


       //动态添加命令按钮并添加属性事件
        for (int i = 0; i < ds.Tables["faci_orders"].Rows.Count; i++)
        {
            myButton = new Button();
            myButton.Text = ds.Tables["faci_orders"].Rows[i]["order_name"].ToString();
            myButton.ID = ds.Tables["faci_orders"].Rows[i]["order_id"].ToString();
            //设置按钮大小以及委托事件
            myButton.Width = 85;
            myButton.Height = 30;
            myButton.Click += new EventHandler(orderBtn_Click);
            Panel2.Controls.Add(myButton);
        }
    }

    protected void orderBtn_Click(object sender,EventArgs e)
    { 
    //根据所点击按钮传送指令
        Button myOrderBtn = (Button)sender;
        Label2.Text =“你点击了按钮:"+ myOrderBtn.Text.ToString();//没反应了??
    }



------解决方案--------------------
是不是二个按钮加载到一起了。没用动态加载过。帮你顶一下
------解决方案--------------------
把page_load里面的东西放ispostback里面试一下
------解决方案--------------------
引用:
如果你的控件要能成功触发事件,必须在Load阶段加载,如果在Load阶段之后(例如另一个控件的事件中)加载,那么此控件的事件无法正常触发。

------解决方案--------------------
Page_Load中myButton = new Button()和selectButton函数 中 myButton = new Button(),两个对象名称不能一样。

你换个其他的名称。


------解决方案--------------------
探讨
引用:
如果你的控件要能成功触发事件,必须在Load阶段加载,如果在Load阶段之后(例如另一个控件的事件中)加载,那么此控件的事件无法正常触发。

------解决方案--------------------
如8.9楼所说.把page_load放进!IsPostBack里,因为你触发第一个事件的时候,会创建按钮,并引起回发并注册事件,可能会被Page_Load里动态控件所覆盖,因为同名
------解决方案--------------------
在页面加载时就生成所有的按钮,等需要时visible = true下不可以吗
------解决方案--------------------
探讨
在页面加载时就生成所有的按钮,等需要时visible = true下不可以吗

------解决方案--------------------
属性-》事件丢失,重新绑定即可
------解决方案--------------------
你用的啥啊?VS2005还是VS2003?也没有这样注册事件的啊。要是好用就麻烦了