在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); } }