asp.netでは、動的に追加したコントロールのイベントを取得するためにはポストバック後のloadイベント時に動的にコントロールを追加してやる必要がある。
イベントが発生したコントロールの判定には、コントロールのIDプロパティが利用されているようなので、中身は別もののコントロールでもとにかく同じコントロールを追加してやれば、イベントを受け取れるようだ。
以下のようにすりゃいいんじゃないかと思う。
■動的コントロールの追加
Dim strUniqueKey As String = Now.ToString("mmssff") ' セッション内で一意な文字列
Dim objAddCmd As New Command
objAddCmd.ID = "cmdDynamic" & strUniqueKey
objAddCmd.Text = "動的なコマンドボタン"
AddHandler objAddCmd.ItemCommand, AddressOf cmdCommand_Click
Me.pnlDynamic.Controls.Add(objAddCmd)
lblHdnDynamicCtrls.Text &= "#" & objAddCmd.ID
lblHdnDynamicCtrls.Text &= "|" & "Click"
lblHdnDynamicCtrls.Text &= "|" & "Param"■ポストバック後のLoadイベント
For Each strCtrlDataString As String In lblHdnDynamicCtrls.Text.Split("#"c)
If strCtrlDataString = "" Then Continue ForDim strCtrlData() As String = strCtrlDataString.Split("|"c)
Dim objCmd As New Command
objCmd.ID = strCtrlData(0)
objCmd.CommandName = strCtrlData(1)
objCmd.CommandArgument = strCtrlData(2)
AddHandler objCmd.ItemCommand, AddressOf cmdCommand_Click
Me.pnlHidden.Controls.Add(objCmd) ' 非表示のパネルに追加
Next
lblHdnDynamicCtrls.Text = ""■イベントハンドラ
Private Sub cmdCommand_Click(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.CommandEventArgs)
'適当なコード
End Sub
実際に試した環境はasp.net+vb.net(visual studio 2005)。