DataGrid内のラジオボタンでグループに出来ない問題の回避方法

表題の通りですが、

RadioButtonコントロールを継承して、以下のコードを書くと

グループ化できるし、ポストバック時にCheckedプロパティも

正常に動作します。

001 <DefaultProperty("Checked"), ToolboxData("<{0}:RadioButtonEx runat=server></{0}:RadioButtonEx>")> _
002 Public Class RadioButtonEx
003     Inherits System.Web.UI.WebControls.RadioButton
004 
005     Public Overrides ReadOnly Property UniqueID() As String
006         Get
007             If Me.GroupName Is Nothing OrElse Me.GroupName.Length = 0 Then
008                 Return MyBase.UniqueID
009             Else
010                 Return Me.GroupName()
011             End If
012         End Get
013     End Property
014 
015     Protected Overrides Sub OnPreRender(ByVal e As System.EventArgs)
016         Me.Attributes.Add("value", MyBase.UniqueID)
017         MyBase.OnPreRender(e)
018     End Sub
019 
020     Protected Overrides Sub OnInit(ByVal e As System.EventArgs)
021         MyBase.OnInit(e)
022         Me.Checked = MyBase.UniqueID = Me.Page.Request.Form.Item(Me.GroupName)
023     End Sub
024 End Class
025 

Share

HttpSessionStateに登録するオブジェクトの管理は?

HttpSessionStateはオブジェクトを識別するキーが文字列であるため、チームで開発する時などは、馬鹿な奴が勝手にオブジェクトを登録しているような事もあるのではないだろうか。

さいわいな事に僕が担当している開発では、そのような事は起こっていないのだが、それは、ある事をしているからである。

それは、HttpSessionStateやHttpApplicationStateをラッピングしたクラスを作成し、そのクラス経由でアクセスするようにするという手段だ。

そして、そのラッパクラス経由でオブジェクトを登録する時は、識別キーとして、System.Enum型の値を渡す必要があるため、列挙型に登録されている必要がある。

勿論ラッパクラス内部では、そのSystem.Enum型の値を文字列型に変換し登録している。

この手法を使えば、勝手に変なオブジェクトを登録される心配が無い。

副産物として、登録するモノが決まってくると、登録する場面も決まってくるため、ある程度、コーダーのコーディングにぶれがなくなる。

それが、ベストプラクティスか?と聞かれると、そうでは無いかもしれないが、案外有効な方法だと思う。

Share