关于Gridview表格中按钮
如果你需要在Gridview中添加按钮,那么这个按钮可能是为了实现这样的功能:
A. 点击按钮后,弹出一个窗体。例如:弹出一个可以修改数据的窗体等
B. 点击按钮后,执行一个操作,面这个操作往往是针对按钮所在行数据的操作,否则你完全可以不在Gridview中添加按钮
根据上面的需要,我们讨论一下GridView中的按钮事件,我们经常会用于的按钮事件有这么几个:
1. OnClick 事件
2. OnClientClick 事件
3. OnCommand 事件
- OnClick 事件 和OnClientClick 事件
我理解它们是用于执行客户端函数或脚本的,有朋友说OnClick 事件可以执行服务端过程或函数,我测试总出问题不知道是什么原因?
这两个事件一般主要用于弹出新的页面,也可以做为操作前的提示信息(例如删除按钮的提示信息等),因为它们的执行顺序是在OnCommand事件前面的。
- OnCommand 事件
一般这个事件用来执行服务端的事件,而且与前面两个事件相比,这个事件是可以传递参数的,所以它往往可以用于实现更多的功能
举例部分:
- OnClick 事件 和OnClientClick 事件
第一种,在客户端代码中定义(这里列出定义的部分)
<asp:TemplateField HeaderText="服务端按钮"> <ItemTemplate> <asp:Button ID="Button2" runat="server" onclientclick="return confirm('您确认执行删除操作吗?')" Text="删除" /> </ItemTemplate> </asp:TemplateField>
第二种,在代码中实现按钮事件
Button2.Attributes.Add("onclick", "yourfunction();")
您也可以在这些事件增加参数来实现更多的功能
- OnCommand 事件
这个事件实现起来比较复杂一些,先说下它可能涉及到几个属性
CommandName CommandArgument
这两个属性其实在OnCommand执行事件中参数CommandEventArgs的两个常用到值,我们用CommandName来区分点击的按钮,用CommandArgument的值来实现特定的操作(例如删除操作时,CommandArgument可以是ID值或行的index值)
下面简单介绍下实现的步骤:
第一步:定义相关的属性
<asp:TemplateField HeaderText="客户端按钮"> <ItemTemplate> <asp:Button ID="Button1" CommandName="Button1" CommandEventArgs='<%# Eval("CategoryID") %>' runat="server" onclientclick="return confirm('您确认要执行吗?')" Text="显示" /> </ItemTemplate> </asp:TemplateField>
第二步:定义后台事件
Private Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView1.RowCommand Select Case e.CommandName Case "Button1" '获取参数值 Dim myIndex As Int32 = Convert.ToInt32(e.CommandArgument) '找到相应的行 Dim selRow As GridViewRow = GridView1.Rows(myIndex) MsgBox(selRow.Cells(2).Text) End Select End Sub
如果我们没有在第一步中定义CommandEventArgs,那么需要增加这样一个事件
Private Sub GridView1_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowCreated If e.Row.RowType = DataControlRowType.DataRow Then Dim btn1 As Button = CType(e.Row.FindControl("Button1"), Button) btn1.CommandArgument = e.Row.RowIndex End If End Sub
大家可以看到,后台事件是在GridView1_RowCommand这个标准的事件中实现的,如果我们要使用自已定义的事件,应该如何来实现
第一步:前台
<asp:TemplateField HeaderText="客户端按钮"> <ItemTemplate> <asp:Button ID="Button4" CommandName="Button1" runat="server" OnCommand="btn1Click" Text="打开" /> </ItemTemplate> </asp:TemplateField>
第二步:设定参加值Private Sub GridView1_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowCreated If e.Row.RowType = DataControlRowType.DataRow Then Dim btn1 As Button = CType(e.Row.FindControl("Button1"), Button) btn1.CommandArgument = e.Row.RowIndex End If End Sub
第三步:定义事件
Private Sub btn1Click(ByVal CommandArgument As String) '获取参数值 Dim myIndex As Int32 = Convert.ToInt32(CommandArgument) '找到相应的行 Dim selRow As GridViewRow = GridView1.Rows(myIndex) MsgBox(selRow.Cells(2).Text) End Sub