我在GridView1上面做了“详细信息”的按钮,当用户单击“详细按钮”的时候,就在GridView2里面显示详细的信息,可是当单击“详细信息”的时候出现了错误:索引超出范围。必须为非负值并小于集合大小。
using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;using System.Data.SqlClient;
public partial class _11_4 : System.Web.UI.Page
{
    public SqlConnection GetConnection()
    {
        string myStr = ConfigurationManager.AppSettings["ConnectionString"].ToString();
        SqlConnection myConn = new SqlConnection(myStr);
        return myConn;
    }
    protected void Page_Load(object sender, EventArgs e)
    {    }    protected void GridView1_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
    {
        //获取选择行的编号
        string deptID = GridView1.DataKeys[e.NewSelectedIndex].Value.ToString();
        string strsql = "SELECT * FROM tb_Student WHERE ID='" + deptID + "'";
        SqlConnection con = GetConnection();
        con.Open();
        SqlDataAdapter sda = new SqlDataAdapter(strsql, con);
        DataSet ds = new DataSet();
        sda.Fill(ds);
        this.GridView2.DataSource = ds;
        this.GridView2.DataBind();
    }
}

解决方案 »

  1.   

    string deptID = GridView1.DataKeys[e.NewSelectedIndex].Value.ToString();判断一下e.NewSelectedIndex的值,检查例外
      

  2.   

    GridView1.DataKeys[e.NewSelectedIndex]
    这句有问题吧。在该方法里开头加一句Response.Write(GridView1.DataKeys.Count+"<br/>");
    看看是多少,就明白了。
      

  3.   


    加了句:在该方法里开头加一句Response.Write(GridView1.DataKeys.Count+"<br/>");
    还是出现:
    “/website”应用程序中的服务器错误。
    --------------------------------------------------------------------------------索引超出范围。必须为非负值并小于集合大小。
    参数名: index 
      

  4.   

    NewSelectedIndex 没有取到索引吧!
      

  5.   

    把GridView的属性DataKeyNames设置为主键,string deptID = GridView1.DataKeys[e.RowIndex].Value.ToString();