簡體   English   中英

在代碼隱藏中創建表行

[英]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)-

https://stackoverflow.com/a/14449305/296861

您可以遞歸地瀏覽表的控件集合,直到找到子控件為止。

傳入父控件,然后輸入要查找的控件的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM