■[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