有人可以帮我理解这里需要做什么,因为我是C#的新手。
我有一个带有两个按钮和几个文本框的表单。
首先,用户在其中一个文本框中输入一个数字,然后按下其中一个按钮。这样的形式也是空的:
<asp:Table id="tblInputs" runat="server" Border="1" Width="100%">
</asp:Table>
因此,当用户点击第一个按钮时,后面的代码将向该表添加尽可能多的行,即文本框中的输入,如下所示:
for (int i = 0; i < numOfInputFields; i++)
{
TableRow row = new TableRow ();
TableCell cell_inputA = new TableCell ();
TableCell cell_inputB = new TableCell ();
TextBox txtBox_input = new TextBox ();
txtBox_input.ID = "txtInFld" + (i + 1);
txtBox_input.Text = txtBox_input.ID;
cell_inputA.Text = "Input " + (i + 1);
cell_inputB.Controls.Add (txtBox_input);
row.Cells.Add (cell_inputA);
row.Cells.Add (cell_inputB);
tblInputs.Rows.Add (row);
}
现在到目前为止,这样可以正常工作,并且可以很好地创建列和行。
我现在的问题是,由于文本框的ID是在上面的代码隐藏中创建的,我如何从其他代码隐藏函数中访问它们。
在我提到的帖子的顶部,我有一个相同形式的另一个按钮,只是更改了一个新创建的文本框中的文本值,但它不起作用。
说txtInFld1.Text =“某事”的常规方式;不再工作,因为即使它已经在上面创建,它也看不到txtInFld1。我得到“名称'txtInFld1'在当前上下文中不存在”。我怀疑它与重新提交相同的表格有关,但我不确定。
任何人都可以解释这里发生了什么,以及如何访问在代码隐藏中创建的新文本框的属性?
由于
答案 0 :(得分:0)
动态创建的控件在开始时有点难以理解。
1)您需要在ViewState中保存ID以在回发后保留数据。
2)然后在回发页面时重新创建这些文本框。否则,您将无法访问它。
以下是类似的答案(该问题使用UserControl而不是TextBox) -
答案 1 :(得分:0)
您可以递归地挖掘表格的控件集合,直到找到子控件。
传入父控件,然后传入您要查找的控件的ID。
干杯, 〜Codewolfe
private System.Web.UI.Control FindControlRecursive(Control root, string id)
{
if (root.ID == id)
{
return root;
}
foreach (Control c in root.Controls)
{
Control t = FindControlRecursive(c, id);
if (t != null)
{
return t;
}
}
return null;
}