- - PR -
WEBカスタムコントロールにデザイン時でも設定可能なString配列型のプロパティを作成したい
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-05-06 23:27
こんにちは。
VB.NETでWEBカスタムコントロールを作成しています。 実現したいのが、タイトルの通り、「デザイン時でも設定可能なString配列型のプロパティを作成したい」です。 実際にString()型のプロパティを作成し、VS.NETのプロパティウインドウで値を設定すると、一応設定できた様に見えるのですが、結果は、HTMLコードに「プロパティ名="String[] 配列"」という文字が保存され、設定した値は保存されません。 また、一度プロジェクトを閉じて再度開くと、コントロール自体がエラー表示になります。 確かに、何らかの方法でシリアル化しなければHTMLコードに保存できないと思うのですが、方法がわかりません。 基本的な質問かとは思いますが、ご教授の程よろしくお願い致します。 | ||||
|
投稿日時: 2005-05-07 10:42
VB.NETであれば配列の扱いはそれほど難しくはありません。 実際にやったということなので、そのうまくいかないコードとエラー内容をご提示いただけますか? _________________ たつごろー codeseek こみゅぷらす | ||||
|
投稿日時: 2005-05-07 14:58
たつごろー様、ご返答ありがとうございます。
ソース(抜粋)と、エラー内容は次の通りです。 Imports System.ComponentModel Imports System.Web Imports System.Web.UI Imports System.Web.UI.WebControls Public Class ExTextBox Inherits System.Web.UI.WebControls.TextBox Public Sub New() End Sub Public Property DataColumnName() As String() Get Return CType(ViewState("_DataColumnName"), String()) End Get Set(ByVal Value As String()) Viewstate("_DataColumnName") = Value End Set End Property End Class 以下の操作は全てVS.NETで行っています。 ・上記ソースで作成したWebカスタムコントロールをWebフォームに配置。 ・プロパティウインドウのDataColumnNameプロパティ欄にカーソルを持っていくと[...]ボタンが表示されるのでクリック。 ・「文字列コレクションエディタ」ウインドウが表示されるので、文字列を入力する。(改行で複数行入力)最後に[OK]ボタンをクリックして確定。 ・プロパティウインドウのDataColumnNameプロパティ欄が階層表示になり、入力した文字列が表示される。 ・WebフォームのHTMLソースを見ると、次の通りとなっている。 <cc1:ExTextBox id="ExTextBox1" runat="server" DataColumnName="String[] 配列"></cc1:ExTextBox> ・実行すると次のエラーが発生する ------------------ 解析エラー 説明 : この要求の処理に必要なリソースの解析中にエラーが発生しました。以下の解析エラーの詳細を確認し、ソースファイルに変更を加えてください。 解析エラー メッセージ: 'DataColumnName' プロパティの文字列形式 'String[] 配列' から型 'System.String[]' のオブジェクトを作成できません。 ソース エラー: 行 157: <FONT face="MS UI Gothic"> 行 158: <BR> 行 159: <cc1:ExTextBox id="ExTextBox2" runat="server" DataColumnName="String[] 配列"></cc1:ExTextBox> 行 160: </FONT> 行 161: </form> ------------------ ・プロジェクトを保存、一旦閉じ、再度開いてWebフォームを見ると、コントロールがグレーの四角になり「コントロールの作成エラー-ExTextBox1(i)」という表示になっている。 よろしくお願い致します。 | ||||
|
投稿日時: 2005-05-07 21:45
プロパティで設定するものは、自前でもってください。ViewStateへの格納は、それ用のメソッドで行ってください。
_________________ | ||||
|
投稿日時: 2005-05-08 00:39
Jitta様、ご返答ありがとうございます。
ソースを見直しましたが、結果は全く同じでした。 ご返答内容を理解して修正したつもりですが、勘違いでしたらご指摘下さい。 よろしくお願い致します。 Imports System.ComponentModel Imports System.Web Imports System.Web.UI Imports System.Web.UI.WebControls Public Class ExTextBox Inherits System.Web.UI.WebControls.TextBox Dim _DataColumnName As String() Public Sub New() End Sub Public Property DataColumnName() As String() Get Return Me._DataColumnName End Get Set(ByVal Value As String()) Me._DataColumnName = Value End Set End Property Protected Overrides Function SaveViewState() As Object Dim baseState As Object = MyBase.SaveViewState() Dim allStates(2) As Object allStates(0) = baseState allStates(1) = Me._DataColumnName Return allStates End Function Protected Overrides Sub LoadViewState(ByVal savedState As Object) Dim myState As Object() = CType(savedState, Object()) If Not (myState(0) Is Nothing) Then MyBase.LoadViewState(myState(0)) End If If Not (myState(1) Is Nothing) Then Me._DataColumnName = myState(1) End If End Sub End Class [ メッセージ編集済み 編集者: EOSB200 編集日時 2005-05-08 01:19 ] | ||||
|
投稿日時: 2005-05-08 06:24
ない物はありませんから。・・・じゃ、わかりませんよね。
dim columns() as string と宣言して・・・あれ?宣言文が間違っているから?あ〜、でも、それだったらコンパイラが通知するか。 まぁ、それもひとつとして、宣言しただけでは空です。宣言したものに、何か放り込んでやってみてください。(デフォルト値の設定) あと、配列の数を宣言していないのもまずいでしょう。 _________________ | ||||
|
投稿日時: 2005-05-08 14:47
Jitta様、ご返答ありがとうございます。
早速修正してみますが、現在のプログラムでも、実行時にプロパティに値をセットすると問題なく動作しています。 例)ExTextBox.DataColumnName = New String() {"Data1", "Data2"} 本題は、「デザイン時でも設定可能なString配列型のプロパティを作成したい」ということです。配列操作のロジックを修正しても、HTMLソースに「DataColumnName="String[] 配列"」と保存されてしまうのは解決できないと思いますが、どうでしょうか。 「DesignerSerializationVisibilityAttribute」や「DesignerSerializerAttribute」が関係している様な気がするのですが、調べても理解できない状態です。 | ||||
|
投稿日時: 2005-05-08 21:34
これかなぁ?
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=6266&forum=7 会議室トップ(スレッド一覧)の上の方にある会議室スレッドディレクトリから、タイトルを眺めて検索 [ メッセージ編集済み 編集者: Jitta 編集日時 2005-05-08 21:36 ] |
1|2|3
次のページへ»