- PR -

動的なテーブルのテキストボックスの値の取得

1
投稿者投稿内容
ぐるぐる
会議室デビュー日: 2005/05/09
投稿数: 4
投稿日時: 2005-07-06 16:29
いつも拝見させていただいております、まだまだ初心者の者です。
すいませんが、アドバイスいただけないでしょうか?
もうかれこれ1週間近く悩んでいます。

開発環境:ASP.NET、WINDOWS XP

script部分で動的なテーブルを作りテキストボックスをhtmlに表示させています。
それをhtmlで表示させ、ユーザーが値の変更をして[更新]ボタンを押すと
データベースの更新を行うといった処理をしたいと思ってます。
現状では、データを表示させるだけでしたら出来ているのですが、
更新の時にtextboxを値を変数に代入させる処理でエラーになります。
エラーは、「指定された引数は、有効な値の範囲内にありません。パラメータ名 : index 」です。

(1)で動的なテーブルを作ってるんですが、同じサブルーチン内で(2)を記述すると正常に取得できるので、テーブルの情報が(2)のルーチンに渡っていないんだろうなと思うのですが、こういう場合はどのように値を取得すればよろしいでしょうか?

(1)データを表示させる処理
 I = 0
 While MyReader.Read()
  I = I + 1
  Dim MyTableRow As New TableRow

  Dim MyTableCell1 As New TableCell
  MyTableCell1.Text = MyReader("FIELD_NO")
  MyTableCell1.CssClass = "dataList"
  MyTableRow.Cells.Add(MyTableCell1)

  Dim MyTableCell3 As New TableCell
  Dim MyTextBox As New TextBox
  MyTextBox.Style("Width") = "50px"
  MyTextBox.Text = MyReader("HYOUJI_NO")
  MyTableCell3.Controls.Add(MyTextBox)
  MyTableCell3.CssClass = "dataList"
  MyTableRow.Cells.Add(MyTableCell3)

  Table1.Rows.Add(MyTableRow)
 End While
end sub

(2)テキストボックスの値を変数に代入
Dim HyoujiNo As String
HyoujiNo = CType(Table1.Rows(I).Cells(2).Controls(0),TextBox).Text
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-07-06 20:29
 基本を勉強してください。

 ASP.NETは、サーバとクライアントの間をHTTPリクエストとレスポンスが何回も往復して実行されます。このとき、サーバで実行されるコードは、リクエストごとに新しいオブジェクトが作成されます。このため、前回のオブジェクトは破棄されており、前回のオブジェクトを利用することはできません。


 今回のご質問では、“動的なテーブル”に配置するオブジェクトが、サーバとクライアントのやりとりの間で、値を保持する方法が書かれていません。どこかに書いてあるのかもしれませんが、こういう掲示板でのやりとりでは、書かれていない情報はしていないと判断されます。
 リクエスト間で同じオブジェクトを指していることを示す仕掛けがされていないので、クライアントで入力した値が上書きされてしまいます(正確には、サーバにはわたってきているけれど、それと作ったオブジェクトとで連携されていないので、作ったオブジェクトによってはとれない)。


 動的なオブジェクトは、Loadイベントまでに作るのが基本です。イベントによって作られる場合は、作られたオブジェクトを、Loadイベントが終了するまでに復元しなければなりません。そうすると、viewStateやPostDataの処理で、それらの値が入ってきます。
_________________
1

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