int ID =Convert.ToInt32( GridView1.DataKeys[i].Value.ToString()); 行报错索引超出范围。必须为非负值

for(inti=0;i<GridView1.Rows.Count;i++){CheckBoxchb=(CheckBox)GridView1.Rows[i].FindCo... for (int i = 0; i < GridView1.Rows.Count; i++)
{
CheckBox chb = (CheckBox)GridView1.Rows[i].FindControl("chbID");
if (chb.Checked==true)
{
int ID =Convert.ToInt32( GridView1.DataKeys[i].Value.ToString());
string ImagePath = Server.MapPath(N.GetNewById(ID).vc_ImageUrl);
switch (N.DalateItemById(ID))
{
case 1:
QB.CommonLib.FileHelper.FilePicDelete(ImagePath);
QB.CommonLib.JavaScriptHelper.AlertAndRedirect("删除成功", "Index.aspx");
break;
default:
QB.CommonLib.JavaScriptHelper.AlertAndGoHistory("删除失败", -1);
break;
}
}

}

其中int ID =Convert.ToInt32( GridView1.DataKeys[i].Value.ToString()); 行报错
索引超出范围。必须为非负值并小于集合大小。
参数名: index
展开
 我来答
夏小笨1
2012-06-12
知道答主
回答量:22
采纳率:0%
帮助的人:9.9万
展开全部
for (int i = 0; i < GridView1.Rows.Count; i++) 这里i是从0 开始的。

int ID =Convert.ToInt32( GridView1.DataKeys[i].Value.ToString());

看看数据库里你id是多少开始的。
追问
是1开始的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
世界不美丽2012
2012-08-27 · 超过10用户采纳过TA的回答
知道答主
回答量:48
采纳率:0%
帮助的人:16.4万
展开全部
你好,我遇到了相同的问题,请您把你找到的答案分享一下呗~~~谢谢!!!
追问
将:int ID =Convert.ToInt32( GridView1.DataKeys[i].Value.ToString()); 
改成:int ID = Convert.ToInt32(GridView1.Rows[i].Cells[0].Text);
id设在GridView的第一行用Cells[0]
追答
非常感谢!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
richejxp
2012-06-11 · TA获得超过3106个赞
知道大有可为答主
回答量:2892
采纳率:40%
帮助的人:2307万
展开全部
for (int i = 0; i < GridView1.Rows.Count; i++)
改成
for (int i = 0; i < GridView1.Rows.Count - 1; i++)
追问
呵呵,谢谢,
不过还是不行,我是在button1_Click事件中执行批量删除的
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式