• 締切済み

vb.net web 動的に作成したTableが消える

よろしくお願いします 現在、vs.net 2005 で web ページを作成しています そこで質問があるので、ご教授の程よろしくお願いします。 test.aspx Table コントロール配置:Table1 Button コントロール配置:Button1 Label コントロール配置:Label1 Label コントロール配置:Label2 test.aspx.vb Partial Class test Inherits System.Web.UI.Page Protected Sub form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles form1.Load Dim row As TableRow Dim col As TableCell If (Page.IsPostBack = False) Then Label2.Text = "aaa" row = New TableRow col = New TableCell : col.Text = "行0:列0" : row.Cells.Add(col) : col = Nothing col = New TableCell : col.Text = "行0:列1" : row.Cells.Add(col) : col = Nothing Table1.Rows.Add(row) row = New TableRow col = New TableCell : col.Text = "行0:列0" : row.Cells.Add(col) : col = Nothing col = New TableCell : col.Text = "行0:列1" : row.Cells.Add(col) : col = Nothing Table1.Rows.Add(row) End If End Sub Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click Label1.Text = "Rows.Count" & Table1.Rows.Count End Sub End Class ボタンを押すと、 Label2の "aaa" は保持されていて Table1が保持されないのはなぜなのでしょうか? Table1 の内容を保持させたいのですが その場合、どのようにすればよいのでしょうか

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

Label2のデータはViewStateから読み込んでいるため表示されるのだと思います それに対して Table1のセルはViewStateに保存されているRowsコレクションが無い(または単一セル)のため表示されない様に見えているのではないでしょうか それと Label2は aspxファイルで定義されているのでViewStateにデータを保存することが可能です しかし Table1のセルはaspxファイル内で定義されていないのでViewStateにデータを保存することが出来ません <asp:xxx />タグが無い PreRender(またはLoad)イベントなどで描画内容を毎回実行しないといいけないと思います ページレベルの変数として TableRowやTableCellの配列を準備して これをTable1に追加するようにしても同じ現象になります Webアプリケーションの場合 変数の寿命がページが作成されて表示しきるまでしか存在しないからです ポストバックされた時点では前回作成したオブジェクトは前回表示し終わった時点で破棄されているので覚えていません これではページ上に作成したコントロールなどの状態が分からなくなってしまうので VIEWSTATEといったHIDDENコントロールで記憶しておくのです コントロールのEnableViewStateプロパティが『True』が標準になっているのはこのためです ためしに Label2のEnableViewStateを『False』に設定してボタンを押してみてください 『aaa』では無くデザイン時に設定した内容になると思います

nak777r
質問者

お礼

回答ありがとうございます 文面を読んで、たしかに、もっともな話だと思いました。 でも、結局遣りたい事をするために Label1.txt に 自前でHTMLの Tableタグを記述して解決しました なんか、面倒くさい話ですね それでは失礼します。

関連するQ&A