入れ子リピータの子のイベントを拾いたい
なぜか今度はASP.NETをやっています。さて、入れ子の表を作っていて、子のほうにボタンを配置しているのだけど、このボタンのイベントを取得したいのですがやりかたがわからない。
そもそも入れ子ではない場合、Repeaterコントロールの各アイテムにたいする処理として、それぞれの行でRepeater#ItemCommandというイベントが発生するらしいので、こいつにメソッドをAddHandlerすればよいいのか、と思ったのだけど、全く反応しない。うーむ。
入れ子のリピータで表を書いているのです。こんなかんじの(DataGridViewだと中にあるものまでTableになってしまうので具合が悪い)
┏━┳━┳━┓ ┃ ┃■┃ ┃ ┃◎┣━╋━┫ ┃ ┃■┃ ┃ ┣━╋━╋━┫ ┃◎┃■┃ ┃ ■=Button ◎=RadioButton ┗━┻━┻━┛
やり方が判明した。
Repeater1にRepeater2をいれたばあい、Repeater2のOnItemCommand属性にメソッド名を記述すればOKらしい。そんな属性あるんかい。で、Repeater2のイベントを取得したいコントロールにはCommandName属性を設定しておいて、メソッドの中からそれを取得すればよい。うーむ。
たとえば、こんなかんじ
<asp:Repeater ID="Repeater1" runat="server"> <ItemTemplate> <asp:Repeater ID="Repeater2" runat="Server" OnItemCommand="RequestFindRepeater_ItemCommand"> <ItemTemplate> <asp:button Text="ボタン" ID="InnerButton" CommandName="ButtonClick" runat="server" /> </ItemTemplate> </asp:Repeater> </ItemTemplate> </asp:Repeater>
Protected Sub Repeater2_ItemCommand(ByVal sender As Object, ByVal e As RepeaterCommandEventArgs) If e.CommandName = "BottonClick" Then Dim repItem As RepeaterItem = CType(e.Item, RepeaterItem) ... End If End Sub