用gridview的rowcommand
    得到e.CommandArgument的值,付给一个int值的index
    但是添加了GridView1.DataKeys[index].Value.ToString();语句之后,运行会显示
索引超出范围。必须为非负值并小于集合大小。
参数名: index 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。
参数名: index源错误: 
行 99:              //   TextBox31.Text = index.ToString();
行 100:        //        TextBox31.Text = GridView1.DataKeys[1.ToString();
行 101:                TextBox31.Text= GridView1.DataKeys[index].Value.ToString();
行 102:
行 103:                //index.ToString();
 
不知道是什么原因,请大家帮忙,如果这个语句不对,请问如何根据index来得到选定行的主键值,或者说特定列的值。谢谢。

解决方案 »

  1.   


    你的datakeynames 设置没有
      

  2.   

    for 循环应该是从0到e.CommandArgument-1  
      

  3.   

      protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
        {
            Response.Write(this.GridView1.DataKeys[this.GridView1.SelectedIndex].Value.ToString());
        }
      

  4.   


    把你的主建 名字写进去,
    比如是ID
    那么datakeynames = "ID"
      

  5.   

    我没有取for循环,只取出特定行。
      

  6.   

    别用index了,直接 GridView1.DataKeys[“你放在datakeynames 的字段名字”].Value.ToString(); 
      

  7.   

    index 是關鍵字,你換個變量名試試。
      

  8.   

    int index = Convert.ToInt32(e.CommandArgument.ToString());
    string RollCode = ((GridView)sender).DataKeys[index].Values["轧辊编号"].ToString();
    换成这样就可以取出特定字段,为什么之前的就不行呢?
      

  9.   

    GridView1.SelectedIndex = Convert.ToInt32(e.CommandArgument.ToString()); 
    string Id = GridView1.DataKeys[GridView1.SelectedIndex].Value.ToString();
    Response.Redirect("teaEvaluate.aspx?Id=" + Id);
    我取的是Id,可以的