既に
http://d.hatena.ne.jp/NAL-6295/20060726
にて再度改訂済みです。
■[ASP.NET][.NET Tips]過去のサンプルの修正DataGrid内のラジオボタンでグループに出来ない問題の回避方法
というエントリで公開していたソースでは
テキスト部分をクリックすると最後のラジオボタンが選択される。
という問題がありました。
それを解決したソースを以下に公開しておきます。
説明をすると、
ClientIDをオーバライドして、GroupNameプロパティが設定されているときのみMyBase.UniqueIDを返す処理
を追加しました。
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 End Class 041