「Tips/.NET/GridViewにラジオボタン」の編集履歴(バックアップ)一覧はこちら
追加された行は緑色になります。
削除された行は赤色になります。
&topicpath(top=Top)
&update()
#ls()
----
#asciiart(){
Imports System
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Text
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Collections.Specialized
''' <summary>
''' GridViewに含めるラジオボタン・コントロール。
''' </summary>
''' <remarks></remarks>
<DefaultProperty("Text"), ToolboxData("<{0}:GridViewRadioButton runat=server></{0}:GridViewRadioButton>")> _
Public Class GridViewRadioButton
Inherits RadioButton
''' <summary>
''' リクエスト送信されたデータを処理します。
''' このコントロールによって出力されたラジオボタンは、name属性にGroupName、
''' value属性にUniqueID を出力します。
''' name属性が GroupName で送信された値を確認して、このコントロールのインスタンスが
''' 選択されたラジオボタンであるか判断します。
''' </summary>
''' <param name="postDataKey">未使用</param>
''' <param name="postCollection">リクエスト送信されたデータのコレクション。</param>
''' <returns>
''' このインスタンスの選択状態が、「非選択」から「選択」になったときにTrue。
''' その他はFalse。
''' </returns>
''' <remarks></remarks>
Protected Overrides Function LoadPostData( _
ByVal postDataKey As String _
, ByVal postCollection As NameValueCollection) As Boolean
' 選択されたラジオボタンの値
Dim checkedValue = postCollection(Me.GroupName)
' このインスタンスのラジオボタンが選択されたのか判定
Dim meIsChecked As Boolean = (checkedValue = Me.UniqueID)
' 選択状態に変化があった場合、このインスタンスの選択状態を併せて変更する
If Me.Checked <> meIsChecked Then
Me.Checked = meIsChecked
' 非選択から選択になったときのみ Trueを戻す。
Return meIsChecked
End If
' 選択状態に変化がない場合は、False
Return False
End Function
''' <summary>
''' このコントロールを画面表示用に出力します。
''' </summary>
''' <param name="writer">標準で使用するHtmlTextWriter</param>
''' <remarks></remarks>
Protected Overrides Sub Render(ByVal writer As HtmlTextWriter)
' HtmlTextWriterを、このクラス専用に置き換えて、画面出力します。
MyBase.Render(New RadioWriter(writer, Me))
End Sub
''' <summary>
''' このクラスのラジオボタンを出力するHtmlTextWriter。
''' Decoratorパターンで、一部加工した値を、本来のHtmlTextWriterに出力します。
''' </summary>
''' <remarks></remarks>
Private Class RadioWriter
Inherits HtmlTextWriter
''' <summary> 出力対象のラジオボタン。</summary>
Private _radio As GridViewRadioButton
''' <summary>
''' コンストラクタ。
'''
''' </summary>
''' <param name="writer">標準で使用するHtmlTextWriter</param>
''' <param name="radio">出力対象のラジオボタン。</param>
''' <remarks></remarks>
Public Sub New( _
ByVal writer As HtmlTextWriter _
, ByVal radio As GridViewRadioButton)
' スーパークラスのコンストラクタの呼び出し
MyBase.New(writer)
' ラジオボタン
Me._radio = radio
End Sub
''' <summary>
''' HTML出力時のタグの属性を設定します。
''' </summary>
''' <param name="key">属性の種別</param>
''' <param name="value">標準で出力する属性値</param>
''' <remarks></remarks>
Public Overrides Sub AddAttribute( _
ByVal key As HtmlTextWriterAttribute _
, ByVal value As String)
Select Case key
Case HtmlTextWriterAttribute.Name
' NAME属性
' GroupNameを出力して、ラジオボタン同士のNAME属性を揃える
MyBase.AddAttribute(key, Me._radio.GroupName)
Case HtmlTextWriterAttribute.Value
' VALUE属性
' ラジオボタンを識別するUniqueIDを出力する
MyBase.AddAttribute(key, Me._radio.UniqueID)
Case Else
' その他の属性は、スーパークラスに委譲する
MyBase.AddAttribute(key, value)
End Select
End Sub
End Class
End Class
}