- PR -

複数のコントロールが見つかりました

1
投稿者投稿内容
カゴ
会議室デビュー日: 2004/03/09
投稿数: 2
投稿日時: 2004-03-09 17:36
カゴと申します。
VB.NETのWebフォーム構築において、
動的に作ったテーブルの扱いに悩んでいます。
どなたかご存知でしたら、ご教授願います。

Aドロップダウンリストで作成したいテーブルの行数を指定し、
Aボタンをクリックする事によりAテーブルを作成し、また、
Bドロップダウンリストで作成したいテーブルの行数を指定し、
Bボタンをクリックする事によりBテーブルを作成したいと考えています。
(列数は固定)
各テーブルは
Dim i,j As Integer
Dim intCells As Integer = 2 ' セルの数
Dim intRows As Integer = 10 ' 行の数
Dim conTextBox(20) As System.Web.UI.WebControls.TextBox ' TextBoxの数
'各セルはテキストボックスにて構成されています。
For j = 0 To intRows - 1
Dim tbRow As New TableRow
For i = 0 To intCells - 1
' セルの作成
Dim tbCell As New TableCell

' コントロール(TextBox)の作成
conTextBox(j) = New System.Web.UI.WebControls.TextBox

Me.FindControl("Form1").Controls.Add(conTextBox(j))

tbCell.Controls.Add(conTextBox(j))
tbRow.Cells.Add(tbCell)
Next
Table1.Rows.Add(tbRow)
というように動的に作成します。

Aテーブル作成後にBテーブルを作成してもAテーブルは画面上に
そのまま残っていて欲しいのですが、最初にAテーブルを作成した後に、
Bボタンをクリックすると

「同じ ID '_ctl0' を持つ複数のコントロールが見つかりました。
FindControl を使うには、コントロールに一意の ID を指定する必要があります。 」

というエラーになってしまいます。
Bボタン以外のポストバック機能を持ったボタンを
クリックしても同じ現象になります。

動的にテーブル内のセルを作るときにそのセルのIDが自動的に作成され、
Aテーブルを作成するときに使ったIDとBテーブルを作成しようとした時のIDが
重なってしまい上記のエラーになるように思われますが、
このような事象についての回避策、調査方法をご存知でしたら是非教えて下さい。

よろしくお願いします。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-03-09 18:17
ControlクラスにはIDというプロパティがあります。
これに一意な値を設定してみてください。
カゴ
会議室デビュー日: 2004/03/09
投稿数: 2
投稿日時: 2004-03-09 18:55
早々のご回答ありがとうございます。
なるほど、IDを明示的に設定するのですね。
やってみます。
ホッとしました。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-03-09 19:09
いや、そうすれば解決するのかどうか分からないのでホッとされると困るんですが・・・

実際やってみて結果を教えてください。
1

スキルアップ/キャリアアップ(JOB@IT)