GridView的RowDeleting、RowUpdating和RowCommand事件
GridView的RowDeleting、RowUpdating和RowCommand事件
2011-07-30 18:23:41| 分类: 默认分类 | 标签: |字号大中小 订阅
何时触发:任何在GridView中设定了CommandName的控件都可以触发该事件。
代码案例:
<asp:LinkButton runat="server" ID="lbtnDelete" Text="删除"
CommandArgument='<%# Eval("StudentNo") %>' CommandName="Del"/>
说明:
需要在GridView中执行某个命令时能够自定义行为,而不是有GridView自动来完成,可使用该事件。比如执行自定义的删除和修改功能。
该事件可同时处理一个GridView发出的不同的操作指令,如删除和修改,如何判断某一时刻做什么操作就成为了关键。我们可以通过CommandName来区分每个不同的指令。如
if(commandName=="Del"){
//执行删除操作....
}else if(commandName=="Update"){
//执行修改操作....
}
2. RowDeleting:行正在删除事件
何时触发:
1.如果GridView是通过设置 DataSourceID="odsStudent" 来指定数据源的,则在执行删除时总会调用该事件
2.只要引发事件的CommandName是“Delete”就会自动引发RowDeleting事件。
代码案例:
1.<asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
2.<asp:LinkButton runat="server" ID="lbtnDelete" Text="删除" CommandName="Delete"/>
说明:
如果GridView的数据源是通过设置 DataSourceID="odsStudent" 来指定,则必须为ObjectDataSource指定DeleteMenthod方法,因为GridView此时某自动寻找DeleteMenthod属性指定的删除方法,如果没有指定的方法,则会报错,如下图所示:
当然此时也会触发RowCommand事件,我们可以在RowCommand事件中手动调用删除方法来执行删除功能,但必须在RowDeleting事件处理方法中写上 "e.Cancel = true;",取消该事件的默认行为。所以如果不需要使用ObjectDataSource的自动绑定删除功能,最好不要将控件的CommandName设为“Delete”。
如果GridView的DataSource是通过编码手动指定的,则执行删除时不需要写“e.Cancel = true;”,但RowDeleting事件依然会调用,但不会如寻找和依赖ObjectDataSource的DeleteMethod方法了。可以看出只要GridView指定了DataSourceId,在删除Gridview记录时就会自动找ObjectDataSource的相关的DeleteMethod。
3. RowUpdating:行正在修改事件
各项操作和注意事项和RowDeleting一样。
总结:
1. GridView中一定是先调用RowCommand事件再调用RowDeleting或RowUpdating事件
2. 不要在自定义的CommandName属性中使用“Delete、Update、Insert、Select”四个名称,这四个名称被GridView自动完成事件所占用。