我的数据有3页,最后一页只有1条记录,删除最后一条记录,GridView1.PageIndex将超过总页数,竟然不出错!!
//分页代码:
    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        BindData(txtSearchName.Text,e.NewPageIndex);
        ViewState["pageindex"] = e.NewPageIndex;
        
    }
//删除数据后重新绑定数据:
    BindData(txtSearchName.Text, Convert.ToInt32(ViewState["pageindex"]));这时ViewState["pageindex"]为3,而数据已只有2页了,为何不出错?

解决方案 »

  1.   

    如果你的程序没有问题,而GridView又没有给异常,说明这个问题它本来就不给异常出来。直接跳到最后一页。
      

  2.   

    设置PageIndex时会有ArgumentOutOfRangeException异常,但是发生的条件是:
    The PageIndex property is set to a value less than 0. //from msdn
      

  3.   

    //绑定数据的代码:  
      void BindData(string name,int pageindex)
        {
            String sql="";
            try
            {
                string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("app_Data/aspnetdb.mdb");
                OleDbConnection conn = new OleDbConnection(connectionString);                  
                if (name.Trim() == "")
                    sql = "select StudentID,name,math,chinese,english from StudentScore order by StudentID";
                else
                    sql = "select StudentID,name,math,chinese,english from StudentScore where name like '%" + name.Trim() + "%'" + "order by StudentID";
                //OleDbDataReader数据源不支持分页
                OleDbCommand cmd = new OleDbCommand(sql, conn);
                conn.Open();
                OleDbDataReader data = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                DataTable dt = new DataTable();
                dt.Load(data);
                GridView1.DataSource = dt;
                GridView1.PageIndex = pageindex;
                GridView1.DataBind();
                data.Close();
            }
            catch(Exception e)
            {
                lblMessage.Text = e.ToString();
            }
        }
      

  4.   

    删除时候 又没有绑定viewstate。
      

  5.   

    删除的时候 应该再重新绑定一遍viewstate吧
      

  6.   

    //删除记录的代码的最后一行为重新绑定数据:
      BindData(txtSearchName.Text, Convert.ToInt32(ViewState["pageindex"]));
      

  7.   

    还是自己判断一下吧,以前我也遇到过,如果最后一页刚好只有一条,而且你又把它删除时,这时currentpageindex还是最后一页,我记得当时会抛出异常的,可能你的vs版本不一样,所以不会出错吧,自己加个判断重新设置下currentpageindex就行了,不是大问题
      

  8.   

    我的vs是2005 sp1.
    奇怪的是为何不出错!想搞明白。删除按钮的代码如下(写在GridView1_RowCommand事件中):
     if (e.CommandName == "del")//演示ButtonField使用
        {
                int rowindex = Convert.ToInt32(e.CommandArgument);  //获取行索引
                string sid = GridView1.DataKeys[rowindex].Value.ToString();
                String sql = "delete from StudentScore where StudentID=@StudentID";
                OleDbParameter[] cmdParms = new OleDbParameter[1];
                cmdParms[0] = new OleDbParameter("StudentID", sid);
                DbHelperOleDb.ExecuteSql(sql, cmdParms);
                BindData(txtSearchName.Text, Convert.ToInt32(ViewState["pageindex"]));
      }