您当前的位置:KKBlog > 学无止境 > ASP.NET

在GridView的RowCommand事件中获取Rowindex,即获得数据行所在页的索引号

再看一下原先的前台代码

<ItemTemplate>
 <asp:Button ID=”Button3″ runat=”server” CausesValidation=”False”
CommandArgument=”<%# Container.DataItemIndex %>”
CommandName=”Entry” Text=”入库” OnClientClick=”return confirm(‘确认要将此钢轮移出备用库放入当前使用库吗?’)”/>
 </ItemTemplate>
 </asp:TemplateField>

最后看一下改进后的代码

<ItemTemplate>
 <asp:Button ID=”Button3″ runat=”server” CausesValidation=”False”
CommandArgument=”<%# ((GridViewRow) Container).RowIndex %>”
CommandName=”Entry” Text=”入库” OnClientClick=”return confirm(‘确认要将此钢轮移出备用库放入当前使用库吗?’)”/>
</ItemTemplate>
</asp:TemplateField>

其实就是为了说明一个问题:

如果用Container.DataItemIndex 在后台代码中得到的是这一数据行在这个数据表中的序列,如果此Gridview不分页的话,用起来没有任何问题,如果分页的话,就不行了。如我们操作的是第二页的第二条记录,得到的序列是 11 ,即 idx =11 ,而我期望的是1.

如果用((GridViewRow) Container).RowIndex 那 idx=1; 即这一行代码得到的是此数据行在当前Gridview页面中的序列,如果PageSize=10的话,那idx 最大为9,最小为0.

今天项目中用到的,特别记录一下.

实例演示:

<asp:LinkButton ID="lnkbtn_ExportAuthority" runat="server" CommandArgument="<%# ((GridViewRow)Container).RowIndex %>" CommandName="ExportAuthority" >导出权限</asp:LinkButton>
  protected void gvData_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            //导出权限
            if (e.CommandName == "ExportAuthority")
            {
                int _index = Convert.ToInt32(e.CommandArgument);
                Guid _appId = new Guid(this.hid_AppId.Value);
                Guid _roleId = new Guid(gvData.DataKeys[_index][1].ToString());
                int _columnId = int.Parse(gvData.DataKeys[_index][2].ToString());
                string _fileName = string.Format("{0}-{1}-角色权限数据-{2}.txt", ((Label)gvData.Rows[_index].FindControl("lblArea")).Text, ((Label)gvData.Rows[_index].FindControl("lbl_description")).Text, DateTime.Now.ToString("yyyyMMdd"));
                ExportAuthority(_appId, _roleId, _columnId, _fileName);
            }
        }


二维码
意见反馈 二维码