protected void Page_Load(object sender, EventArgs e)
{
for (int i = 0; i < list.Count; i++)
{ Button lnk1 = new Button();
lnk1.ID = "ln" + i;
lnk1.Click += new EventHandler(lnk1_Click);
}
addButtons(ticketID);
}
void lnk1_Click(object sender, EventArgs e)
{
ViewState["btnId"] = (sender as Button).ID;
string queryNo=(sender as Button).Text;
addButtons(qNo);
}
void addButtons(string buttonText)
{
if (ViewState["btnId"] == null)
return;
for (int i = 0; i < list.Count; i++)
{
TextBox txt = new TextBox();
txt.Visible = false;
txt.ID = "TXT" + i;
// now reply/block/unblock to particular advisor
Button reply = new Button();
Button block = new Button();
reply.Width = 80;
block.Width = 80;
reply.ID = "RE" + i;
reply.Click += new EventHandler(reply_Click);
block.Click += new EventHandler(block_Click);
}
}
void reply_Click(object sender, EventArgs e)
{
ViewState["btnId"] = (sender as Button).ID;
}
现在如何访问我在侧面reply_Click中的addbutton方法中创建的动态文本框,任何想法?
答案 0 :(得分:0)
使用这种方式:
this.FindControl("textbox Id")
注意:在使用此命令之前,必须将其添加到您的页面
答案 1 :(得分:0)
此示例创建5个动态文本框和按钮,并在单击其相应按钮时找到文本框。
for( int i = 0; i < 5; i++ )
{
TextBox tb = new TextBox();
tb.ID = "txt" + i;
this.Controls.Add( tb );
Button btn = new Button();
btn.ID = "btn" + i;
this.Controls.Add( btn );
btn.CommandArgument = i.ToString();
btn.Command += ( sender, e )
{
string id = "txt" + e.CommandArgument;
TextBox textBox = this.FindControl( id ) as TextBox;
};
}
请注意FindControl
不是递归的,因此请务必在您正在寻找的控件的直接父容器上调用它。
我使用匿名委托处理命令事件,但这可以放在控件创建循环之外。值得注意的是,必须通过命令参数将所有唯一信息传递给事件处理程序。
作为旁注,任何此类工作都不需要ViewState。