我正在使用c#动态创建一个表格,我正在为每个单元格添加按钮。我需要为每个按钮分配按钮ID,以便我以后识别它们。我使用了以下代码。
bt.ID = rowIndex + c.ToString(); //bt.ID = "newID";
但是当我稍后尝试访问此按钮时,它会给我一个错误。
Button seatButton = (Button)this.FindControl("a1");
seatButton.BackColor = Color.Red; //Gives an error here
seatButton.Enabled = false; //Gives an error here
我认为问题在于更改按钮ID。我需要知道这个错误的原因和治愈方法..
答案 0 :(得分:3)
此处seatButton
必须在声明中为空:
Button seatButton = (Button)this.FindControl("a1");
您可以先查找控件的占位符,然后获取按钮控件,或者递归搜索所有页面控件,而不只是执行this.FindControl
。
方法I:使用ContentPlaceHolder方式。
ContentPlaceHolder contentPH = (ContentPlaceHolder)this.Master.FindControl("MyContentPlaceHolder");
Button seatButton = (Button)contentPH.FindControl("a1");
方法II :: 以递归方式搜索页面控件。
从代码的适当部分调用getControl方法一次
GetControl(Page.Controls);
//和方法如下:
private void GetControl( ControlCollection controls )
{
foreach (Control ctrl in controls)
{
if(ctrl.ID == "a1")
{
seatButton = (Button)ctrl;
}
if( ctrl.Controls != null)
// call recursively this method to search nested control for the button
GetControl(ctrl.Controls);
}
}