再改訂版:DataGrid内のラジオボタンでグループに出来ない問題の回避方法(ターゲットはASP.NET1.1です。)

■[ASP.NET][.NET Tips]改訂版:DataGrid内のラジオボタンでグループに出来ない問題の回避方法
■[ASP.NET][.NET Tips]過去のサンプルの修正DataGrid内のラジオボタンでグループに出来ない問題の回避方法
NAL-6295の舌先三寸 - つまらない事の中に重要な事がある。
というエントリで公開していたソースでは

テキスト部分をクリックすると最後のラジオボタンが選択される。

以前に(といっても1ヶ月前)この記事で改訂版を出していましたが、下記の制限がありました。



・プログラム側でcheckedの内容を変更すると、
次のポストバックのLoadViewState時にcheckedの内容が変更されて、
 クライアントで選択されたcheckedの内容を取得できなかった。
(EnabledViewState=falseでも)


そこで、下記の改訂版を出すことにしました。
Group化する場合のみ、ViewStateを無視する仕様になっています。


001 Imports System.ComponentModel
002 Imports System.Web.UI
003
004
005 <DefaultProperty("Checked"), ToolboxData("<{0}:RadioButtonEx runat=server></{0}:RadioButtonEx>")> _
006 Public Class RadioButtonEx
007 Inherits System.Web.UI.WebControls.RadioButton
008
009 Public Overrides ReadOnly Property UniqueID() As String
010 Get
011 If Me.GroupName Is Nothing OrElse Me.GroupName.Length = 0 Then
012 Return MyBase.UniqueID
013 Else
014 Return Me.GroupName()
015 End If
016 End Get
017 End Property
018
019 Public Overrides ReadOnly Property ClientID() As String
020 Get
021 If Me.GroupName Is Nothing OrElse Me.GroupName.Length = 0 Then
022 Return MyBase.ClientID
023 Else
024 Return MyBase.UniqueID
025 End If
026 End Get
027 End Property
028
029 Protected Overrides Sub OnPreRender(ByVal e As System.EventArgs)
030 Me.Attributes.Add("value", MyBase.UniqueID)
031 MyBase.OnPreRender(e)
032 End Sub
033
034 Protected Overrides Sub OnInit(ByVal e As System.EventArgs)
035 MyBase.OnInit(e)
036 If Me.Page.IsPostBack Then
037 Me.Checked = MyBase.UniqueID = Me.Page.Request.Form.Item(Me.GroupName)
038 End If
039 End Sub
040
041
042 Protected Overrides Sub LoadViewState(ByVal savedState As Object)
043 If Me.GroupName Is Nothing OrElse Me.GroupName.Length = 0 Then
044 MyBase.LoadViewState(savedState)
045 End If
046 End Sub
047
048 Protected Overrides Function SaveViewState() As Object
049 If Me.GroupName Is Nothing OrElse Me.GroupName.Length = 0 Then
050 Return MyBase.SaveViewState()
051 Else
052 Return Nothing
053 End If
054 End Function
055 End Class
056