怎样判断当前页的行数是否小于1,(首先判断是哪页,在判断行数是否小于1)。当我删光一页中的数据时报出:
    异常详细信息: System.Web.HttpException: 无效的 CurrentPageIndex 值。它必须大于等于 0 且小于 PageCount。源错误: 
行 147: sda.Fill(ds,"TermInf");
行 148: DataGrid1.DataSource=ds;
行 149: DataGrid1.DataBind();----》错误在这里
行 150:      }
行 151: }
 
源代码:
private void Button3_Click(object sender, System.EventArgs e)
{
   str=Request.Form["radio1"];
   if(str==null)
   {
Label1.Text="<font color=red>快选择一条信息!</font>";
   }
   else
   {
if(MessageBox.Show("确认要删除吗?", "提示",MessageBoxButtons.OKCancel, MessageBoxIcon.Question,MessageBoxDefaultButton.Button2,MessageBoxOptions.ServiceNotification )==DialogResult.OK)
{
Label1.Text="";
strConn=ConfigurationSettings.AppSettings["conn"];
conn=new SqlConnection(strConn);
scmd=new SqlCommand("delete TermInf where termid=@termId",conn);
scmd.Parameters.Add("@termid",SqlDbType.NVarChar,50);
scmd.Parameters["@termid"].Value=str;
scmd.Connection.Open();
scmd.ExecuteNonQuery();
scmd.Connection.Close(); if(DataGrid1.PageSize<1)
{
strConn=ConfigurationSettings.AppSettings["conn"];
conn=new SqlConnection(strConn);
Response.Write("<script language=javascript>alert('哈哈');</script>");
DataGrid1.CurrentPageIndex=0;
scmd=new SqlCommand("select * from TermInf",conn);
sda=new SqlDataAdapter();
ds=new DataSet();
sda.SelectCommand=scmd;
sda.Fill(ds,"TermInf");
DataGrid1.DataSource=ds;
DataGrid1.DataBind();
}
else
{
strConn=ConfigurationSettings.AppSettings["conn"];
conn=new SqlConnection(strConn);
Response.Write("<script language=javascript>alert('呵呵');</script>");
scmd=new SqlCommand("select * from TermInf",conn);
sda=new SqlDataAdapter();
ds=new DataSet();
sda.SelectCommand=scmd;
sda.Fill(ds,"TermInf");
DataGrid1.DataSource=ds;
DataGrid1.DataBind();
}
}
    }
}

解决方案 »

  1.   

    不须知道当前页的行数,只需判断
    0 < CurrentPageIndex < PageCount
      

  2.   

    strConn=ConfigurationSettings.AppSettings["conn"];
    conn=new SqlConnection(strConn);
    Response.Write("<script language=javascript>alert('哈哈');</script>");
    DataGrid1.CurrentPageIndex=0; -----------这句话移动到**这来看看
    ……
    DataGrid1.DataSource=ds;
    **
    DataGrid1.DataBind();
      

  3.   

    DataGrid翻页后删除记录出错的解决方案
    在论坛里见过不少网友问过这样的问题:当DataGrid翻到最后一页后,如果当前页的数据只有一条,那么删除这条记录就会出现“异常详细信息: System.Web.HttpException: 无效的 CurrentPageIndex 值。它必须大于等于 0 且小于 PageCount。”这样的错误,出现这个错误的原因是当最后一页上的这条记录被删除并重新绑定数据之后,DataGrid的总页数减少了一页,而它的CurrentPageIndex属性值却仍然是删除记录前最后一页的页索引值,这个值超出了它的总页数。一些网友解决这个问题的方法是:在删除记录之后立即将DataGrid的CurrentPageIndex设为0,即跳回第一页,这个方法虽然可以避免再发生这样的错误,然而却很不灵活,因为如果用户要删除最后一页上的两条记录,那么在删除了其中一条后,不得不重新点击分页按钮进入最后一页来删除第二条,而且很多时候这种方法会给用户带来困扰,因为很容易把跳转到的第一页的数据当成是正执行删除命令的最后一页的数据,其实这个问题有更好的解决办法,如果我们用的是DataGrid的内建的删除功能,即一次只能删除一条记录的话,那么在它的DeleteCommand事件处理程序中,可以通过下面的方法,来实现当最后一页没有数据时,自动跳回前一页,否则只需要重新绑定数据即可:void DataGrid1_Delete(object src,DataGridCommandEventArgs e){
    //执行删除命令,从数据库或其它保存数据的地方删除DataGrid中对应的记录(略)
    //如果当前页上只有一条数据并且DataGrid的当前页索引大于0,那么就让DataGrid返回上一页
    if(DataGrid1.Items.Count==1&&DataGrid1.CurrentPageIndex>0){
    DataGrid1.CurrentPageIndex--;
    }
    //重新绑定数据
    BindData();
    }如果用了模板列中的CheckBox,实现一次删除多条选中的记录的话,那么可以在删除按钮的Click事件处理程序中这样来实现上面的功能:
    void deleteButton_Click(object src,EventArgs e){
    int deletedRows=0; //记录删除掉的行数
    foreach(DataGridItem item in DataGrid1.Items){
    if(item.ItemType==ListItemType.Item||item.ItemType==ListItemType.AlternatingItem){
    CheckBox ckbox=item.FindControl("delckbox") as CheckBox;
    if(ckbox!=null&&ckbox.Checked){
    deletedRows++;
    //从数据库或其它保存数据的地方删除DataGrid中对应的记录(略)
    }
    }
    }
    //如果当前页的记录总数等于已经被删除掉的记录数并且DataGrid当前页索引大于0,那么让DataGrid返回上一页
    if(deletedRows==DataGrid1.Items.Count&&DataGrid.CurrentPageIndex>0){
    DataGrid1.CurrentPageIndex--;
    }
    //重新绑定数据
    BindData();
    }Good luck!http://blog.mvpcn.net/webdiyer/
      

  4.   

    tmfc() ,DataBind() 之前 PageCount 还没有吧。int rowCount = ds.Tables[0].Rows.Count;
    int maxPageIndex = (int)Math.Ceiling((double)rowCount/(double)DataGrid1.PageSize) - 1;
    if(DataGrid1.CurrentPageIndex > maxPageIndex) DataGrid1.CurrentPageIndex = maxPageIndex;
      

  5.   

    我用的是button按钮不是内建删除按钮
      

  6.   

    那就在绑定前
    if(dtg1.CurrentPageIndex < PageCount)
    {
       dtg1.CurrentPageIndex = 0;
    }--------------------
    回Wangzhaokang(Wangzk):
    我的思路是,如果删除光最后一页数据后,直接跳回第1页,并把总页数减1。否则直接绑定。
    --------------------
    如果你不是自己管理总页数的话,不需要把总页数减1,datagrid自己会处理。
    建议你把数据绑定的那段代码写成一个函数,所有的判断都在这个函数里面做。
      

  7.   

    我有一个好方法和大家共享思路:先判断DataGrid1.Items.Count == 1,
          在判断DataGrid1.CurrentPageIndex == DataGrid1.PageCount-1--->判断是否是最后一页,这步是关键!然后,DataGrid1.CurrentPageIndex--;-->总页数减1
          DataGrid1.CurrentPageIndex=0;-->设置绑定第1页经过反复测试,没有任何问题!
      

  8.   

    DataGrid1.CurrentPageIndex--;------>上面写错了,这步可以没有
      

  9.   

    多谢 kinzey(kinzey) 的指正。
    不好意思,我的方法是错误的。(很久不做了,记不清楚了。)
     kinzey(kinzey) 的方法是正确的,通过“总行数/每页行数”得到总页数,然后再通过
    if(dtg1.CurrentPageIndex >= PageCount(总行数/每页行数))
    {
       dtg1.CurrentPageIndex = 0;
    }
    错误多多,楼主见谅。
    再次多谢kinzey(kinzey)。
      

  10.   

    回tmfc() :
    没关系,这个问题我自己解决了!