DataGrid无法正确显示分页信息。我在page_load中设定了数据的绑定,在private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
upPager=true;
this.DataGrid1.CurrentPageIndex=e.NewPageIndex;
bind();
          }
也设定了datakeyfiled,可是只能正确的显示第一页,向后几页无数据显示,但依然能翻,在回到第一页,第一页也无数据(空白)显示了,我找了很多地方,不知道朋友们知道哪有问题吗?谢谢了!

解决方案 »

  1.   

    在load中加如下语句
    if(!IsPostBack)//这个必须有
    {
         bind();
         //..........     
    }
      

  2.   

    谢谢你,我在load 中的有
    if(!IsPostBack)
    {
         bind();
         //..........     
    }
    但不知道为什么出现那种情况,还有其它的原因吗???
      

  3.   

    void bind()
    {
    this.sqlDataAdapter1 .Fill (dataSet21,"er");
    //DataGrid1.DataSource=dataSet21.Tables["er"];//
    DataGrid1.DataBind ();
    }
      

  4.   

    你每次调用DataGrid1_PageIndexChanged事件,又重新填充了DataSet,当然点击下一页时只能显示第一页,所以要把this.sqlDataAdapter1 .Fill (dataSet21,"er")放到外面
    bind()
    {
    DataGrid1.DataSource=dataset;//dataset是你要返回的记录集
    DataGrid1.DataBind ();
    }
      

  5.   

    偶也想要分页啊,但我没有用.net自带的,用的是www.webdiyer.com上面下载的分页控件,但还是不能分页,偶用偶老大给的分页代码,但我不知道加没加对,反正分不了,偶老大在帮偶调试呢:)
      

  6.   

    czsxj(好好学习天天向上) 
    谢谢你,可是我在其它页面中的bind()函数也是这样也的,但是分页成功,独有这页不成功,我不知道是不是还有哪里需要设一下 。你说的我也 用了,还是 不行!!
      

  7.   

    可是我在其它页面中的bind()函数也是这样也的,但是分页成功,独有这页不成功
    ------------
    你新建一个页面,前台页面重新写一遍,后台代码照搬过去,然后再试,一般就可以了.
      

  8.   

    <asp:DataGrid id="DataGrid1" runat="server" Width="706px" BorderStyle="Solid" BorderWidth="1px" BorderColor="#9999FF" CellPadding="2" BackColor="White" AutoGenerateColumns="False" AllowPaging="True">
      

  9.   

    无效的 CurrentPageIndex 值。它必须大于等于 0 且小于 PageCount。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Web.HttpException: 无效的 CurrentPageIndex 值。它必须大于等于 0 且小于 PageCount。源错误: 
    行 490: this.DataGrid1.CurrentPageIndex=e.NewPageIndex;
    行 491: this.DataGrid1.DataSource=this.dataSet21;
    行 492: this.DataGrid1.DataBind();
    行 493: }
    行 494: }
     
      

  10.   

    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();
    }