テーブルに未定義の行数をロードするページを作成しようとしています。各行には 2 つの列が含まれ、1 つの列は文字列、もう 1 つの列は TextBox です。送信ボタンをクリックすると、各 TextBox に入力された値を取得できるようにしたいと考えています。
私ができる前半は、明らかに実際のコードでは、これは foreach ループにあり、テキストボックス ID には一意の値が割り当てられ、後で再現して呼び出すことができます。
TableCell myCell = new TableCell();
myCell.Text = "StudentID";
TableCell nextCell = new TableCell();
TextBox mytext = new TextBox();
mytext.ID = "TxtBox1";
nextCell.Controls.Add(mytext);
TableRow myRow = new TableRow();
myRow.Cells.Add(myCell);
myRow.Cells.Add(nextCell);
TableStuUploads.Rows.Add(myRow);
送信ボタンをクリックすると、このコードを実行しようとします(一時コードATM、概念実証のもののみ):
TextBox tmptext = (TextBox)FindControl("TxtBox1");
Label1.Text = tmptext.Text;
しかし、それは tmptext を null に設定し、次の行で null ポインター例外を取得します。それで、私は試しました
TextBox tmptext = (TextBox)TableStuUploads.FindControl("TxtBox1");
Label1.Text = tmptext.Text;
同じエラー。それから私は試しました
foreach (Control x in TableStuUploads.Controls)
{
if (x.GetType().ToString().Equals("System.Web.UI.WebControls.TextBox"))
{
Label1.Text = ((TextBox)x).Text;
}
}
しかし、これをデバッグすると、TableStuUploads.Controls のカウントが 0 になっていることがわかります。
これらの動的に作成されたコントロールにどのように対処すればよいですか? 私は周りを検索しましたが、私が得た答えは、私がすでに試した3つの解決策につながりました。どこが間違っているのですか?