日期:2014-05-18  浏览次数:20422 次

e.commandargument获取行索引在删除时只能删除前两行,后面行就会出错
源视图中:<asp:TemplateField HeaderText="删除">
  <ItemTemplate>
  <asp:Button ID="Button1" runat="server" CausesValidation="false" CommandName="Del"
  Text="删除" OnClientClick ="return confirm('确定要删除吗?')" CommandArgument ='<%# Container.DataItemIndex %>'/>
  </ItemTemplate>
  </asp:TemplateField>
代码中:if (e.CommandName =="Del")
  {
  int iindex = Convert.ToInt16(e.CommandArgument);
  string sUserID = gv_User.DataKeys[iindex].Value.ToString();

在删除第一行第二行可以成功,可索引大于2的行红色区域就会出现错误:
索引超出范围。必须为非负值并小于集合大小
参数名: index
什么原因?应该如何做?等待中。。。。。




------解决方案--------------------
调试一下? gv_User.DataKeys.Count 就为2

不是gv_User.DataKeys.Count不是记录数吗
------解决方案--------------------
CommandArgument =' <%#Eval("UserID"%>'/> 

:if (e.CommandName =="Del") 

string sUserID =e.CommandArgument.ToString(); 
========================================================
这是正确的方法,通常都是这样。

DataItemIndex是Grid自动生成的项,无论你怎么删除它都是动态绑定的,例如,一共有4条记录,如是你把第三条删除,这时,DataItemIndex就变为了1,2,3,而不是1,2,4,这样你明白了么
================================
索引超出范围。必须为非负值并小于集合大小。
如果记录集为空,而你还要删除,就只能报错了。