给两个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(),两个对象名称不能一样。
你换个其他的名称。
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
如8.9楼所说.把page_load放进!IsPostBack里,因为你触发第一个事件的时候,会创建按钮,并引起回发并注册事件,可能会被Page_Load里动态控件所覆盖,因为同名
------解决方案--------------------------------------------------------
在页面加载时就生成所有的按钮,等需要时visible = true下不可以吗
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
属性-》事件丢失,重新绑定即可
------解决方案--------------------------------------------------------
你用的啥啊?VS2005还是VS2003?也没有这样注册事件的啊。要是好用就麻烦了