DataGrid内にボタンを配置するとクリック時にonitemcommand
で指定したイベントが走ります。この時点でイベントを起こした
のはDataGridであり、DataGrid内のどのボタンが起こしたのかま
でわかりません。なので、ボタンが1つなら問題ありませんが、2つや
3つとなると判断することができません。
そこで私は、DataGirdのItemDataBoundイベントで以下のJavaScriptを
記述し、押されたボタンコントロール名を隠しコントロールに格納しています。
Dim btnButton As Button = CType(e.Item.FindControl("btnButton"), Button)
btnButton.Attributes("onClick") &= Me.txtHCtl.ID & ".value = '" & btnButton.ClientID & "';"
※ me.txtHCtl : 隠しコントロール
これによって、onitemcommandイベント時にコントロール名を取得し、
ボタンコントロール名と比較することでどのボタンが押されたか判断することが出来ます。
私の方法では、以下のように記述しボタンコントロール名を取得しています。
Dim lsButtonID As String = CType(e.Item.FindControl("btnButton"), Button).ClientID
ちなみに、DataGrid内にボタンコントロールを含むユーザーコントロールを配置
した場合でも、ボタンを押した場合onitemcommandイベントが発生するので注意が必要です。
コメント (2)
Buttonに関してはJavaScriptを書かなくても標準的なイベント(***_ItemCommand)だけで取れると思います。
private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) {
if ( e.CommandSource is System.Web.UI.WebControls.Button ) {
int iItemIndex= e.Item.ItemIndex;
string sCommandName= ((System.Web.UI.WebControls.Button)(e.CommandSource)).CommandName;
}
}
(なぜか C#)
投稿者: 市川 | 2004年10月28日 19:09
日時: 2004年10月28日 19:09
ItemCommandでCommandNameを取るには、
単に e.CommandName でも取れますけど、
やはりきちんとキャストすべきですか?
投稿者: naka | 2004年11月09日 19:04
日時: 2004年11月09日 19:04