これには多くの例がありますが、コントロールを見つけるために再帰を使用するという概念にはかなり響いています。コントロールがポストバックで発見されたら、それはと相互作用することができ、などASP.NETで再帰的にコントロールを見つける方法
私は空のASP持っている:私のHTMLマークアップでテーブル:
<asp:Table ID="editDataTable" runat="server">
</asp:Table>
をとをPage_Loadにテーブルが多くの行が移入され多くのコラム(私はそれを理解したことを非常に誇りに思います)。いくつかのテーブルセルの内部には、<asp:TextBox />
があります。
あなたはそれを推測しました、私はこれらのテキストボックスの価値を得る必要があります!
(私は再帰のコードを持って、それをチェックし、それが良いらしいました。)
私のテーブルには、2つの列があります。左側には「会社名、電話」などのタイトルが表示され、右側にはそれぞれのタイトルの値が表示されたテキストボックスが表示されます。したがって、ユーザーはテキストボックスを編集し(たとえば、電話番号が変更されている場合)、変更を送信することができます。
明らかに、行はユーザーによって動的に追加されます。
私が抱えている問題は次のとおりです。テーブルを作成するときにページにコントロールを追加する必要があります。
myTable.Control.Add(new TextBox());
私の場合、私のテーブルはeditDataTableと呼ばれます。だから、行を追加する私のコードでは、次のようにコントロールも追加しました。
for (int i = 0; i < rowCount; i++)
{
editDataTable.Rows.Add(tblRow[j]); // This is where I add the ROW to my sexy table
editDataTable.Controls.Add(new TextBox()); // This is where I add the control
}
あなたはあなたがテーブルにテキストボックスコントロールを追加できないことを知っているでしょう!
だから最終的には、私の質問は以下のとおりです。
- 私は私のテーブルにテキストボックスのコントロールを追加するにはどうすればよいですか?
- どこに追加しますか?
- 動的に追加されたテキストボックスのテキスト値を取得するためのアドバイスはありますか?
ここでは、好奇心旺盛だった念のために私の再帰的なコードです:あなたはTableRow.Cells
コレクションにTableCell
を追加し、TableCell.Controls
コレクションにTextBox
を追加する必要が
private void getControls(Control parent)
{
foreach (Control c in parent.Controls)
{
if (c is TextBox && c.ID == null)
{
//Stuff
}
if (c.Controls.Count > 0)
{
getControls(c);
}
}
}
ない[Control.FindControl](http://msdn.microsoft.com/en-us/libraryのファン/486wc64h.aspx)メソッドは、基本的にこれをすべてあなたのために行いますか?それとも、IDを持っていないのですか? –
Control.FindControlはすべてのコントロールから再帰しません。ページコントロールのみ。 Plus no Id's anyways –
行番号と列番号に基づいてIDを生成することができます。 – FishBasketGordo