能够贴一下你换页时的代码,翻页需要重新对DataGrid进行绑定

解决方案 »

  1.   

    在绑定数据里面加上这段代码:
    try
    {
    MyDataGrid.DataBind();
    }
    catch (HttpException ex)
    {
    if(ex.GetHttpCode().ToString()=="500")
    {
    MyDataGrid.CurrentPageIndex = 0;
    MyDataGrid.DataBind();
    }
    }
      

  2.   

    private void BindGrid()
    {
    this.DataGrid1.VirtualItemCount = (new InfoSystem ()).GetArticlesCountByCid(cid);
    this.DataGrid1.PageSize = rows;
    ListData ld = (new InfoSystem()).GetArticlesByCid(cid,rows,pages);
    this.DataGrid1.DataSource = ld.Tables[0].DefaultView;
    this.DataGrid1.CurrentPageIndex = pages - 1;
    this.DataGrid1.DataBind();
    }这是绑定函数.this.DataGrid1.CurrentPageIndex = e.NewPageIndex;
    pages = Convert.ToInt32(this.DataGrid1.CurrentPageIndex) + 1;
    BindGrid();
    这是翻页函数.
      

  3.   

    可能不是用户控件的问题,而是你引用用户控件的页面的问题。你是怎么应用的?我是直接将解决方案管理器中的用户控件拖放到页面上,从来没有出现问题。你要是在Page_load中动态添加的可能会出现问题。
      

  4.   

    分页中的代码
    private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
    {
    int iMaxPage=DataTable.Rows.Count/this.DataGrid1.PageSize;
    int i=DataTable.Rows.Count%this.DataGrid1.PageSize;
    if(i!=0)
    {
    iMaxPage++;
    }
    if(iMaxPage-1<e.NewPageIndex)
    {
    this.DataGrid1.CurrentPageIndex=iMaxPage-1;
    }
    else
    {
    this.DataGrid1.CurrentPageIndex=e.NewPageIndex;
    }
    this.DataGrid1.DataSource=DataTable;
    this.DataGrid1.DataBind();
    }
      

  5.   

    在你的分页中有:
    pages = Convert.ToInt32(this.DataGrid1.CurrentPageIndex) + 1
    你并没有判断DataGrid有多少页绑定了,这可能会溢出
      

  6.   

    我的用户控件是在设计时拖过去的,每页的分页记录是动态赋值的, liuzhonghe(呆头鹅)兄所写的情况是不适合我这个情况的,因为我用的是自定义分页,有多少页就显多少,e.NewPageIndex是不可能超出范围的。
       我刚才仔细的高度了N遍,各个步骤的变量值都正确,只有当运行到this.DataGrid1.DataBind();这句时就触发异常实在无奈.
    pages这个只是用来在存储过程里查询是第几页时用到的参数。且这个值是正确的。
      

  7.   

    pages = Convert.ToInt32(this.DataGrid1.CurrentPageIndex) + 1;
    你从没有判断是否pages大于总页数
      

  8.   

    不是,我没仔细看你的错误提示,看了后我想起来我在去年(2002年)做的一个项目时遇到了类似的错误提示,其实可以说是一模一样,错的莫名其妙,当时的情况是这样的,用DADAGRID控件浏览从数据库中查询的结果,然后如果双击任一条记录,就弹出编辑窗口进行数据编辑,但是奇怪的现象发生了,当用鼠标双击GIRD控件两条记录之间的中线时,可能只有我会这么测试,“Invalid  CurrentPageIndex  value.  It  must  be  >=  0  and  <  the  PageCount.  ”的错误提示产生了,当时想破了脑袋也解决不了,后来发现当记录中存在NULL字段时就会出现这种情况,我 不知道到这是不是微软产品的一个BUG,后来我的解决方法如下:
    if(pobjDataSet.Tables[pstrTableName].Columns[i].DataType==System.Type.GetType("System.String"))
    {
    for(j=0;j<pobjDataSet.Tables[pstrTableName].Rows.Count;j++)
    {
    pobjDataSet.Tables[pstrTableName].Rows[j][i]=pobjDataSet.Tables[pstrTableName].Rows[j][i]+" "; 
    }
    }
    很无奈的一段代码,解释一下,就是发现某列类型是字符型就在所有该列中加一个空格,
    这可能对你目前的情况或多或少有些借鉴意义,另外,我是真心的帮你想办法,不是出你的
    洋相,我虽然只有一个绿星,但是我已经搞开发十年了,只是不常到CSDN来而以!
      

  9.   

    声明一下,上述所说的情况是在做WINDOWS应用程序时出现的,没有在ASP.NET中遇到过,而且
    上述错误居然属于不可捕获错误!
      

  10.   

    补充一下我遇到的错误提示是“Invalid  CurrentRowIndex  value.“不是CurrentPageIndex
      

  11.   

    你这样 debug 一下 currentPageIndex:
      
    加入这一行
    HttpContext.Current.Response.Write("<script>window.alert('"+ currentPageIndex +"');</script>");看看每次分页时,currentPageIndex 对不对??我想是你的 currentPageIndex 问题,有时你不点击分页按钮,其实也会触发Datagrid_PageIndexChanged 事件,
      

  12.   

    楼上的方法多复杂,在实现发开中,我使用这个方式:
    try{
     DataGrid1.DataBind();
    }
    catch{
     DataGrid1.CurrentPageIndex = -1;
     DataGrid1.DataBind();
    }
      

  13.   

    我又对代码改进了一下,在页面加载时即指定其CurrentPageIndex为1即第二页,然后调用绑定方法,效果正常,显示的是第二页的内容,但当换页时同样出错。问题不应出在CurrentPageIndex上,关键是在绑定这句在底层上不知道都干了些什么东东,唉!实在茫然。。还是多学些底层的东东才行呀。