具体点
datagrid 的page index设置问题?

解决方案 »

  1.   

    是你在 Datagrid 分页中出现的问题吧?
      

  2.   

    可能是你获取数据后曾经翻过页,而新的查询获取的数据的总页数小于你上次浏览的页面。
    你可以这么解决,就是在进行新的查询时将datagrid的currentpageindex设置为0
      

  3.   

    这个页面是个用DataGrid做的分页,第一次打开默认SQL="select * from DataBase where id=2"
    可以正确显示!在我对本页用条件,得出SQL="select * from DataBase where id=2 and xm ='2'" 
    运行 DataSet ds = df_Util.ExcecuteDsSql(strSql);
    dgMpList.DataSource=ds;
    dgMpList.DataBind();
    后,
    提示
    行 94:  DataSet ds = df_Util.ExcecuteDsSql(strSql);
    行 95:  dgMpList.DataSource=ds;
    行 96:  dgMpList.DataBind();<----这句有错!!!!
    行 97:  }
    行 98: 
    信息::
    无效的 CurrentPageIndex 值。它必须大于等于 0 且小于 PageCount。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Web.HttpException: 无效的 CurrentPageIndex 值。它必须大于等于 0 且小于 PageCount。源错误:
      

  4.   

    写DataGrid1.CurrentPageIndex=0; 
    查询后显示不报错了,可也不分页了!! 我估计是这样造成的!! 在DataGrid1.CurrentPageIndex置为0,DataBind()以后,DataGrid1.CurrentPageIndex=e.NewPageIndex也没有用了吧!
      

  5.   

    dgMpList.DataSource=ds;//获取记录数
    int recs = ... //这个数据你得根据实际情况获取dataset中的某个table的rows.count
    if(Math.ceiling(recs * 1.0 / datagrid.pagesize) < datagrid.currentpageindex +1)
      datagrid.currentpageindex = 0;
    //上面这段代码是在你新提取数据后检测一下当前页是否超过总页数,如果是则将当前页设置为0dgMpList.DataBind();
      

  6.   

    DataGrid1.CurrentPageIndex=e.NewPageIndex
    datagrid1.databind()这样才能显示指定页的信息。你可以在大databind()方法之前,在获取数据之后检测是否超界。我的做法是提取数据,保存在session中,用户提交请求时首先从session中获取数据,如果用户提交的请求需要更新数据集的话,再重新在session中保存数据。这种情况适用于访问量少,数据量不大的情况。
    如果你想每次都从数据库中提取数据的话,我建议你在每一个databind()命令前都做一下有效性检测。或者设置datagrid为允许手工分页,然后设置DataGrid.VirtualItemCount值,然后根据用户的请求到数据库中查找指定的数据并用datagrid显示出来。
    dataadapter.fill(dataset,start,maxcount,datatablename)的方法可以填充指定数目的行记录。