邀朋友种豆,一起分享吧
喜欢购买正品行货?那就去品牌街

GridView OnRowCommand事件常见问题大搜罗

来自:种豆 时间:2017-12-29 阅读:889次 原文链接

    在单击GridView控件中的按钮时,将引发RowCommand事件。在该事件中,GridViewCommandEventArgs 对象将传递给事件处理方法,以便您可以确定被单击按钮的命令名和命令参数。

一 怎么使用GridView控件的内置功能

    在单击GridView控件中的按钮时,将引发RowCommand事件。若要使GridView 控件中的按钮调用该控件的某些内置功能,需请将按钮的 CommandName属性设置为下表中的某个值。

CommandName 值 说明 “Cancel” 取消编辑操作并将GridView 控件返回为只读模式。引发RowCancelingEdit事件。

“Delete”

删除当前记录。 引发 RowDeleting 和 RowDeleted 事件。

 “Edit”

将当前记录置于编辑模式。 引发 RowEditing 事件。

 “Page”

执行分页操作。 将按钮的 CommandArgument 属性设置为“First”、“Last”、“Next”、“Prev”或页码,以指定要执行的分页操作类型。 引发 PageIndexChanging 和 PageIndexChanged 事件。

 “Select”

选择当前记录。 引发 SelectedIndexChanging 和 SelectedIndexChanged 事件。

“Sort”

对 GridView 控件进行排序。 引发 Sorting 和 Sorted 事件。

“Update”

更新数据源中的当前记录。 引发 RowUpdating 和 RowUpdated 事件。

二 怎么确定触发事件的行的索引

方法一:将行索引赋给该事件的事件参数CommandArgument

    ButtonField类会自动以适当的索引值填充CommandArgument 属性。
    对于其他命令按钮,您必须手动设置命令按钮的 CommandArgument 属性。例如,当 GridView 控件未启用分页功能时,您可以将CommandArgument设置为<%# Container.DataItemIndex %>。

<asp:GridView id="TestGridView"
  DataSourceID="TestataSource"
  OnRowCommand="TestGridView_RowCommand"
  AutoGenerateColumns="False"
  runat="server">
  <Columns>
    ...
    <asp:TemplateField>
      <ItemTemplate>
        <asp:LinkButton ID="TestLinkBtn" runat="server"
          CommandName="Increase"
          CommandArgument="<%# ((GridViewRow) Container).RowIndex %>"
          Text="CommandArgument示例"></asp:LinkButton>
      </ItemTemplate>
    </asp:TemplateField>
  </Columns>
</asp:GridView>


void TestGridView_RowCommand(Object sender, GridViewCommandEventArgs e)
{
  if(e.CommandName=="Increase")
  {
    int index = Convert.ToInt32(e.CommandArgument);   
    GridViewRow row = TestGridView.Rows[index];
    ......
  }
}

方法二:利用CommandSource

protected void TestGridView_RowCommand(object sender, System.Web.UI.WebControls.GridViewCommandEventArgs e)
{
    if (e.CommandName == "Increase")
    {
        GridViewRow gvRow = (GridViewRow)(((LinkButton)e.CommandSource).NamingContainer);
        int rowIndex = gvRow.RowIndex;
        GridViewRow currentRow = TestGridView.Rows[rowIndex];
    }
}

三 怎么在GridView的OnRowCommand事件中用FindControl找到模版控件?

    按照“二怎么确定触发事件的行的索引”的方法先找到触发事件的行,然后在行中直接使用FindControl方法,如下

protected void TestGridView_RowCommand(object sender, System.Web.UI.WebControls.GridViewCommandEventArgs e)
{
    if (e.CommandName == "Increase")
    {
        GridViewRow gvRow = (GridViewRow)(((LinkButton)e.CommandSource).NamingContainer);
        int rowIndex = gvRow.RowIndex;
        GridViewRow currentRow = TestGridView.Rows[rowIndex];
        LinkButton linkBtn = (LinkButton)currentRow .FindControl("TestLinkBtn");
    }
}

四 GridView同时设置分页事件OnPageIndexChanging和onRowCommand时,点击分页事件,怎么避免先触发OnRowCommand事件?

    在OnRowCommand处理事件方法中的开始处加上一个判断,如果触发该事件的事件为分页事件(事件名为Page),则直接返回,这样他就不会执行OnRowCommand下面的事件处理程序,而去处理分页事件了。

protected void TestGridView_RowCommand(object sender, GridViewPageEventArgs e)
{
    if (e.CommandName == "Page") //判断是否是分页事件
    {
        return; //跳出执行
    }
    if (e.CommandName == "Increase")
    {
    }
}
 
关于种豆 ┊ 联系我们 ┊ 免责声明 ┊ 发帖须知 ┊ 请提意见 ┊ 站点地图
本站为个人爱好兴趣分享网站,不代表本人观点,如有侵权请联系QQ3033380280进行处理
sowsoy.com 版权所有 Copyright©2010-2021 备案号:蜀ICP备2020025376号-3
Email:sowsoy#hotmail.com