[英]Creating table rows in codebehind
有人可以幫我了解由於我是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 =“ something”的常規表達方式; 不再起作用,因為即使已在上面創建它也看不到txtInFld1。 我得到“名稱'txtInFld1'在當前上下文中不存在”。 我懷疑這與重新提交相同的表格有關,但我不確定。
誰能解釋一下這是怎么回事,我該如何訪問在代碼隱藏中創建的新文本框的屬性?
謝謝
開始時,動態創建的控件有點難以理解。
1)您需要在ViewState中保存ID,以便在回發后保留數據。
2)然后在頁面回發時重新創建這些文本框。 否則,您將無法訪問它。
這是類似的答案(該問題使用UserControl而不是TextBox)-
您可以遞歸地瀏覽表的控件集合,直到找到子控件為止。
傳入父控件,然后輸入要查找的控件的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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.