- - PR -
複合コントロールのプロパティの値維持について
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-01-19 14:46
vb.netで、WEBの複合コントロールの作成をしています。
プロパティに色をセットして、2つのテキストボックスをプロパティにセットした背景で表示するコントロールを開発していますが、ポストバック時以外の場合のみ色をセットしたところ、ポストバック時にプロパティの値が空になってしまいます。 プロパティの値をVIEWSTATEに保存するようにしないと値の保持はできないのでしょうか? ユーザーコントロールのコード <ToolboxData("<{0} ![]() ![]() Public Class DataEntryPanel Inherits WebControl Implements INamingContainer Protected colTitleBackColor As Color 'タイトルの背景色 <Category("Appearance"), DefaultValue("#007399")> _ Property [TitleBackColor]() As String Get Return ColorTranslator.ToHtml(colTitleBackColor) End Get Set(ByVal Value As String) colTitleBackColor = ColorTranslator.FromHtml(Value) End Set End Property Protected Overrides Sub CreateChildControls() Dim txt As New TextBox txt.Text = ColorTranslator.ToHtml(colTitleBackColor) txt.BackColor = colTitleBackColor Me.Controls.Add(txt) Dim txt2 As New TextBox txt2.Text = ColorTranslator.ToHtml(colTitleBackColor) txt2.BackColor = colTitleBackColor Me.Controls.Add(txt) End Sub End Class Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load If Not IsPostBack Then Cc_DataEntry.TitleBackColor = "red" End If End Sub | ||||||||
|
投稿日時: 2007-01-19 16:14
ゆっきーさん、こんにちは。
そうですね。基本的には LoadViewState / SaveViewState をオーバーライドして値を保持します。 ところで、何でプロパティの型を String にしているのでしょうか?
| ||||||||
|
投稿日時: 2007-01-19 16:16
ゆっきーさん、こんにちは。
そうですね。基本的には LoadViewState / SaveViewState をオーバーライドして値をViewState に保持するようにします。 ところで、何でプロパティの型を String にしているのでしょうか?
【追記】 編集するつもりで、引用してしまった…。orz [ メッセージ編集済み 編集者: きくちゃん 編集日時 2007-01-19 17:05 ] | ||||||||
|
投稿日時: 2007-01-19 16:45
きくちゃんさん回答ありがとうございます。試してみたところうまくいきました。
プロパティの型を String にしたのは、HTMLから変換してセットするのが面倒だったので・・・。 今回のコントロールはプロパティの保存が効くかのお試しみたいなもので、最終的にはテキストボックスだのラジオボタンだのの属性が保存してあるテーブルを読みながら動的にWEBフォームを作成するカスタムコントロールを作ることです。 以下サンプル(C#ですが)を見るとVIEWSTATEは使用不可になっているし、datatableはポストバック時以外しかセットされていなくて、どこで出力元のdatatableが保持されているのかが分からなくて困っています。 どなたかアドバイスよろしくお願いいたします。 http://japan.internet.com/developer/20051108/26.html | ||||||||
|
投稿日時: 2007-01-19 17:39
ゆっきーさん、こんばんは。
サンプル見ましたが、ポストバック時でもコントロールを表示する場合(chkShowList がチェックされている場合)は、毎回、データの取得を行うようになってませんか? 他のプロパティについても、ポストバック時に値を復元する事は考慮していないように見えます。 | ||||||||
|
投稿日時: 2007-01-19 18:30
失礼しました(汗)。C#の||ってANDではなくOR条件ですね。勘違いをしていました。
DBを読んで動的にコントロールを作成するには、やはりポストバックのたびにコントロールを再構成するしかないんでしょうね・・・。 コントロールを構成するデータを取り込む方法としては @コントロールを実装するページ側でデータを取得してカスタムコントロール側のプロパティにセットする Aカスタムコントロール側でデータを毎回取得する になると思ういます。 Aの場合、DBの接続情報を実装するページのwebconfigに記述しているのですが、カスタムコントロール側から取得は可能でしょうか?プロパティにしてViewstateに保存するのも危険そうな感じで・・・。 | ||||||||
|
投稿日時: 2007-01-19 18:30
失礼しました(汗)。C#の||ってANDではなくOR条件ですね。勘違いをしていました。
DBを読んで動的にコントロールを作成するには、やはりポストバックのたびにコントロールを再構成するしかないんでしょうね・・・。 コントロールを構成するデータを取り込む方法としては @コントロールを実装するページ側でデータを取得してカスタムコントロール側のプロパティにセットする Aカスタムコントロール側でデータを毎回取得する になると思ういます。 Aの場合、DBの接続情報を実装するページのwebconfigに記述しているのですが、カスタムコントロール側から取得は可能でしょうか?プロパティにしてViewstateに保存するのも危険そうな感じで・・・。 |
1