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

■[ASP.NET][.NET Tips]改訂版:DataGrid内のラジオボタンでグループに出来ない問題の回避方法

■[ASP.NET][.NET Tips]過去のサンプルの修正DataGrid内のラジオボタンでグループに出来ない問題の回避方法

NAL-6295の舌先三寸 – つまらない事の中に重要な事がある。

というエントリで公開していたソースでは

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

NAL-6295の舌先三寸 – 改訂版:DataGrid内のラジオボタンでグループに出来ない問題の回避方法

以前に(といっても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 

Share