- PR -

ラジオボタンリストの属性追加(Attributes)について

1
投稿者投稿内容
ジョン吉
常連さん
会議室デビュー日: 2005/02/25
投稿数: 33
投稿日時: 2005-03-14 14:15
いつもお世話になっています。ジョン吉です。

ラジオボタンリストの挙動で質問です。

下記のようなradiobuttonlist を定義しました。
初回表示時に DBの状態を見て、リストのパターンを変更しなければなりません

例えば
DBの値=1 aaa,bbb,ccc のみ表示する 必須選択
DBの値=2 eee,fff,ggg のみ表示する 必須選択
DBの値=3 hhh のみ表示で 必須選択ではない

<ASP:RADIOBUTTONLIST id="radio状態" runat="server" repeatdirection="Horizontal" font-size="X-Small" repeatlayout="Flow">
<ASP:LISTITEM value="0">aaa </ASP:LISTITEM>
<ASP:LISTITEM value="1">bbb </ASP:LISTITEM>
<ASP:LISTITEM value="2">ccc </ASP:LISTITEM>
<ASP:LISTITEM value="3">eee </ASP:LISTITEM>
<ASP:LISTITEM value="4">fff </ASP:LISTITEM>
<ASP:LISTITEM value="5">ggg </ASP:LISTITEM>
<ASP:LISTITEM value="6">hhh </ASP:LISTITEM>
</ASP:RADIOBUTTONLIST>

そこで、デザインはプロパティウインドウで、予め全てのアイテムを追加しておき、
Page_Load で、かく要素の表示/非表示 を設定しようと思いました。

このようにして

select case DBの値
case 1
radio状態.Items(3).Attributes.Add("style", "display:none")
radio状態.Items(4).Attributes.Add("style", "display:none")
radio状態.Items(5).Attributes.Add("style", "display:none")
radio状態.Items(6).Attributes.Add("style", "display:none")
case 1
radio状態.Items(0).Attributes.Add("style", "display:none")
radio状態.Items(1).Attributes.Add("style", "display:none")
radio状態.Items(2).Attributes.Add("style", "display:none")
radio状態.Items(6).Attributes.Add("style", "display:none")
case else
radio状態.Items(0).Attributes.Add("style", "display:none")
radio状態.Items(1).Attributes.Add("style", "display:none")
radio状態.Items(2).Attributes.Add("style", "display:none")
radio状態.Items(3).Attributes.Add("style", "display:none")
radio状態.Items(4).Attributes.Add("style", "display:none")
radio状態.Items(5).Attributes.Add("style", "display:none")
end case

が、実際に出力されるHTML(inputタグ)にはこのスタイルが出力されていません。
実行時にエラーになりませんし、Page_Load の最後で、内容を確認したところ、
きちんと
radio状態.Items(5).Attributes.Item("style") には "display:none" と設定されています。

これは、Attributes プロパティは用意しているが、サポートしていないということでしょうか?



(動作環境は Windows2000 Server SP4 + .NetFramwork1.1 SP1 + VisualStudio2003
      + IE 6.0.2800 SP1 です。)


べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2005-03-14 23:36
http://support.microsoft.com/default.aspx?scid=kb;ja-jp;Q309338
[BUG]ということみたいですね。

DropDownListのは知っていましたがRadioButtonListもだったんですね。
DropDownListはHtmlSelectで代用しRadioButtonListの場合はHtmlInputRadioButtonを
並べてくれといってます。。

DropDownListで項目ごとに色つけたい時とかはHtmlSelect使ってますが。

[ メッセージ編集済み 編集者: べる 編集日時 2005-03-15 00:06 ]
ジョン吉
常連さん
会議室デビュー日: 2005/02/25
投稿数: 33
投稿日時: 2005-03-15 12:54
ありがとうございます。

そうですか不具合ですか〜 結構使ってしまってるんで、入れ替えるの大変です。
ここや、GotDotNetばかりみてましたが、MSのサポートもチェックしないとだめなんですね。
(といいますか、最初に見るのはメーカサイトですよね ふつう......。)


ともかく、入れ替えがんばります。
ありがとうございました。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2005-03-15 23:38
ただ表示を制御したいだけならcaseの前で

radio状態.Items.Clear()

しといて、必要に応じて

radio状態.Items.Add("aaa");

とかするのはだめでしょうか。display:noneのinputが出力されないといけないんなら
だめですがね・・
ジョン吉
常連さん
会議室デビュー日: 2005/02/25
投稿数: 33
投稿日時: 2005-03-16 09:37
表示/非表示とは別のカラムに、このラジオボタンの値を持ってまして、
その値というのが各ラジオボタンのValueに設定されています。
しかも、そのValue=Itemsのインデックスにしています
で、
index=DBの値
radio状態.Items(index).selected=true

選択状態=radio状態.selectedvalue

みたいなことをすれば、簡単かな〜 と思った次第であります。

っと、ここで思ったのが、
index=DBの値
radio状態.Items(index).selected=true
この部分も
radio状態.selectedvalue=DBの値
とすれば、itemsのindexと無理にValueを合わせなくてもいいのかな?
そうすれば、ベルさんがアドバイスしてくれたコードでいけそうです。
ちょっと実験してみます。

ジョン吉
常連さん
会議室デビュー日: 2005/02/25
投稿数: 33
投稿日時: 2005-03-16 12:11
実験結果の自己レスです

できちゃいました。
selectedValue にDBの値を設定すれば、そのラジオボタンが選択状態になり、
また、選択したラジオボタンは selectedvalue で取り出せるので、
items のインデックスとDBに格納する値とを同期とることも不要となり、
常に全部のラジオボタンを作成し、表示/非表示 でごまかす必要もなくなりました。

初回表示時に、不要なラジオボタンを削除してしまうだけでOKでした。
みなさんありがとうございました。


1

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