源视图中:<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,这样你明白了么
================================
索引超出范围。必须为非负值并小于集合大小。
如果记录集为空,而你还要删除,就只能报错了。