asp.net代码中出现的一个问题 50

我点击gridview控件上的删除按钮,出现了以下错误,请高手指点指点代码错在了哪里?????索引超出范围。必须为非负值并小于集合大小。参数名:index说明:执行当前W... 我点击gridview控件上的删除按钮,出现了以下错误,请高手指点指点代码错在了哪里?????

索引超出范围。必须为非负值并小于集合大小。
参数名: index
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

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

源错误:

行 46: protected void gvOrderInfo_RowDeleting(object sender, GridViewDeleteEventArgs e)
行 47: {
行 48: string sqlstr = "delete from tb_OrderInfo where OrderID='"+gvOrderInfo.DataKeys[e.RowIndex].Value+"'";
行 49: sqloperate.DataCom(sqlstr);
行 50: Response.Redirect("OrderManage.aspx");

源文件: d:\NetShop\AdminManage\OrderManage.aspx.cs 行: 48

堆栈跟踪:

[ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。
参数名: index]
System.Collections.ArrayList.get_Item(Int32 index) +2776477
System.Web.UI.WebControls.DataKeyArray.get_Item(Int32 index) +9
AdminManage_OrderManage.gvOrderInfo_RowDeleting(Object sender, GridViewDeleteEventArgs e) in d:\NetShop\AdminManage\OrderManage.aspx.cs:48
System.Web.UI.WebControls.GridView.OnRowDeleting(GridViewDeleteEventArgs e) +99
System.Web.UI.WebControls.GridView.HandleDelete(GridViewRow row, Int32 rowIndex) +610
System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) +1152
System.Web.UI.WebControls.GridView.RaisePostBackEvent(String eventArgument) +190
System.Web.UI.WebControls.GridView.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +172
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +4919

--------------------------------------------------------------------------------
版本信息: Microsoft .NET Framework 版本:2.0.50727.42; ASP.NET 版本:2.0.50727.42
展开
 我来答
技术智慧
2010-05-25 · TA获得超过238个赞
知道答主
回答量:112
采纳率:0%
帮助的人:0
展开全部
原因是你的 index过界了 (规定index>=-1)的,你检查下你这个gridview初始化时是否指定过index的什么值。

最好设置断点跟踪下index的变化过程。

一定不是你粘这块代码的原因。你再找找。

这是我正在用的代码,问题不在这。

protected void itemdv_RowDeleting(object sender, GridViewDeleteEventArgs e)
{

int itemID = Convert.ToInt32(itemdv.DataKeys[e.RowIndex].Value.ToString());
Item it = new Item();
it.delItem(itemID,Label1);
Response.Redirect("~/clsDefault.aspx?id="+Request.QueryString["id"].ToString());
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
loveganquan
2010-05-25 · TA获得超过158个赞
知道小有建树答主
回答量:146
采纳率:0%
帮助的人:112万
展开全部
先看看你的OrderId 是不是int类型。
若是就应该这样写:string sqlstr = "delete from tb_OrderInfo where OrderID=" + Convert.ToInt32(gvOrderInfo.DataKeys[e.RowIndex].Value) + "";
若是string类型。则说明你调用的方法有错。
希望以上的回答对你有所帮助!!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友8edbd70db
2010-05-25 · TA获得超过105个赞
知道小有建树答主
回答量:271
采纳率:0%
帮助的人:0
展开全部
我记得抱这个错!是因为你删除行的索引与你指定的索引不符

就比如说你指定ID为索引 你的ID=5
其实你的gridview里面只有3行!或者只有1行!这会你删除或者编辑时!就抱索引超出范围。必须为非负值并小于集合大小
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
heizhenpeng
2010-05-25 · TA获得超过899个赞
知道小有建树答主
回答量:955
采纳率:0%
帮助的人:1074万
展开全部
你是不是没有设置DataKeys,你在gvOrderInfo的属性栏中找到“数据项”,然后在设置一下表的DataKeys(一般是id)试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
护球89
2010-05-25 · 超过13用户采纳过TA的回答
知道答主
回答量:36
采纳率:0%
帮助的人:35.1万
展开全部
你没有判断GV的标题 他的标题没有数据 所以他报下标越界错误
if (e.Row.RowType == DataControlRowType.DataRow)
{
添加删除按钮;
}
就可以啦~~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式