索引值超出范围,必须为非负值并小于集合大小

在执行Web请求中遇到未处理的异常,详细信息为System.ArgumentOutOfRangeException,提示索引超出范围。问题源于在GridView删除操作时,没有正确设置DataKeyNames属性。解决方案是在GridView中设置DataKeyNames属性,如`DataKeyNames="mem_id"`,或者在数据绑定时添加主键,例如`gv_result.DataKeyNames = new string[] { "mem_id" };`。确保在尝试访问DataKeys时,索引对应于有效的行。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。

参数名: index

分析: 1.gridview的datasource是否重新做了绑定 2.是否设定了datakeynames属性

源错误:


行 50: mycmd.CommandType = CommandType.StoredProcedure;行 51: SqlParameter para_id = new SqlParameter("@id", SqlDbType.Int);行 52: para_id.Value = (int)gv_result.DataKeys[e.RowIndex].Value;行 53: mycmd.Parameters.Add(para_id);行 54: mycmd.ExecuteNonQuery();




昨天我在用gridview做数据删除时遇到这样一个问题,一直出现索引超出范围。必须为非负值并小于集合大小。参数名: index 的错误,郁闷了一阵子,后来才知道需要给Grewview绑定一个主键,也就是在Grewview属性中加入DataKeyNames="主键字段名",

(也可在绑定数据的时候加入,

gv_result.DataSource = mydr;

gv_result.DataKeyNames = new string[] { "mem_id"} ;

gv_result.DataBind)

这样问题得到了解决。

//.aspx

<asp:GridView ID="gv_result" runat="server" AutoGenerateColumns="False" DataKeyNames="mem_id" BorderColor="Black" BorderStyle="None" BorderWidth="0px" CellSpacing="3" GridLines="Horizontal" Width="400px" OnRowDeleting="gv_result_RowDeleting">

<FooterStyle BackColor="#B5C7DE" BorderColor="#4A3C8C" BorderStyle="None"/>

<Columns>

<asp:BoundField DataField="mem_id" HeaderText="编号" />

<asp:BoundField DataField="mem_account" HeaderText="用户账号" />

<asp:BoundField DataField="mem_ip" HeaderText="用户ip" />

<asp:BoundField DataField="mem_regdate" HeaderText="用户注册时间" />

<asp:HyperLinkField DataNavigateUrlFields="mem_id" DataNavigateUrlFormatString="mod.aspx?id={0}"

HeaderText="修改" Text="修改" />

<asp:HyperLinkField DataNavigateUrlFields="mem_id" DataNavigateUrlFormatString="del.aspx?id={0}"

HeaderText="链接删除" Text="删除" />

<asp:CommandField HeaderText="按钮删除" ShowDeleteButton="True" ButtonType="Button" />

</Columns>

<RowStyle BackColor="#C0FFC0" BorderColor="Black" BorderStyle="None" />

<HeaderStyle BackColor="Gray" BorderColor="Gray" ForeColor="White" />

<AlternatingRowStyle BackColor="#FF80FF" />

</asp:GridView>

//.cs

protected void gv_result_RowDeleting(object sender, GridViewDeleteEventArgs e)

{

string connstr = ConfigurationManager.ConnectionStrings["sqlconn"].ConnectionString;

SqlConnection myconn = new SqlConnection(connstr);

myconn.Open();

SqlCommand mycmd = new SqlCommand("MemDel", myconn);

mycmd.CommandType = CommandType.StoredProcedure;

SqlParameter para_id = new SqlParameter("@id", SqlDbType.Int);

para_id.Value = (int)gv_result.DataKeys[e.RowIndex].Value;

mycmd.Parameters.Add(para_id);

mycmd.ExecuteNonQuery();

myconn.Close();

Response.Write("<script>alert('删除成功!');window.location.href='search.aspx';</script>");

}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值