索引超出范围。必须为非负值并小于集合大小。参数名: index 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。参数名: index源错误: 行 206: {
行 207: int index = e.Item.ItemIndex;//获得当前行的索引
行 208: int problem_ID = Convert.ToInt32(dg_problem.DataKeys[index].ToString());//获得当行的问题ID
行 209: int eval_ID = Convert.ToInt32(dg_problem.Items[index].Cells[12].Text.ToString().Trim());//获得位置12的单元格里的值(查评项目ID)
行 210: int a;//做为一个标识(1是新增,0是编辑)
 源文件: d:\ses\webs\problem\drawreviseplan.aspx.cs    行: 208 堆栈跟踪: [ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。
参数名: index]
   System.Collections.ArrayList.get_Item(Int32 index) +91
   System.Web.UI.WebControls.DataKeyCollection.get_Item(Int32 index)
   Siwei.SES.Webs.Problem.DrawRevisePlan.dg_problem_ItemCommand(Object source, DataGridCommandEventArgs e) in d:\ses\webs\problem\drawreviseplan.aspx.cs:208
   System.Web.UI.WebControls.DataGrid.OnItemCommand(DataGridCommandEventArgs e)
   System.Web.UI.WebControls.DataGrid.OnBubbleEvent(Object source, EventArgs e)
   System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args)
   System.Web.UI.WebControls.DataGridItem.OnBubbleEvent(Object source, EventArgs e)
   System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args)
   System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e)
   System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
   System.Web.UI.Page.ProcessRequestMain() 
我调试的时候程序运行到这一步int problem_ID = Convert.ToInt32(dg_problem.DataKeys[index].ToString());
index里的值是0,希望大家帮帮我!这是怎么回事?

解决方案 »

  1.   

    当总数大于等于1的时候,index=0不算超出范围
    如果一条也没有的话,那就超出范围了
      

  2.   

    因为当前只有1条记录!Count=1
      

  3.   

    nutpp() 大哥,DataGrid里只有1条记录,你点这条记录,所得到的索引会是1吗?
    int index = e.item.itemindex;
    index = 1????
      

  4.   

    加上
    if(e.Item.ItemIndex>-1)
    {
        //你的内容
    }
      

  5.   

    调试时,右键DataKeys,弹出菜单选快速监视
    看看里面有没有内容不就知道了
      

  6.   

    那你在DataGrid里指定DataKey了吗?