我有一个从另外系统获得的DataTable
分页时重新生成系统边的很慢!大家有没这样的方法:
1.首次打开页面,生成DataTable
  在分页时,使用缓存后的数据[但是必须是当前页数据]2.每次只获得一页的DataTable,但是页导航要显示---
大家有这样的做法的麻烦告诉我一下。
上网不方便,今天务必要解决的

解决方案 »

  1.   

    注意一点,不能直接使用缓存,因为我不同的用户要生成不同的DataTable
      

  2.   

    大家帮忙,其实应该不是很难,只是我没用过。
    我的这个DataSet是从别的系统的对象模型中获取到的。
      

  3.   

    这样说吧:
    private DataSet ds()
    {
      //调用对象模型获取的DataSet
    }private void BindGrid()
    {
      DataSet dss=new DataSet();
      dss=ds();
      DataGrid1.DataSource=dss;
      DataGrid1.DataBind();
    }//分页时会重新生成DataSet,并绑定数据,这样很慢
    有什么好办法可以解决这个问题?
      

  4.   

    这个问题近几天我遇到过,不但从缓存中取数据,
    而且还会可以使翻页后继续维持第二页的排序,例如:显示学生成绩并从大到小排序
    第一页显示了1~10条记录,那第二页应该显示11~12条记录,并维持排序
    要想导航栏一直显示,必须得绑定所有的数据,除非自定义一个翻页控件.
    我这里是用的DataGrid的翻页功能
      第一次从数据库中取数据,并把DataSet和排序关键字一起保存在DataView中,以后都从DataView中取数据.并重新给DV.Sort赋值缓存保存中的排序表达式
    然后,将this.DataGrid.CurrentPage = e.NewPage;  即可了就会实现:  
    第一页显示:  100,90,80,65;
    翻页后,
    第二页继续显示: 50,45,30,20了
      
      
      

  5.   

    谢谢楼上,其实我的DataSource也是DataView
    因为从对象模型获取的是多个DataTable,我只能构建新的DataTable,过滤掉一些不需要的记录。排序,我也是用的ViewState.分页后排序也都没问题
    现在的问题就是速度上不好。具体你是怎么做的,放点代码给我,谢谢了。
      

  6.   

    ds声明为全局.只第一次就把数据读进.
    绑定时从ds取相应的记录.(可考虑把要显示的copy到一个临时的datatable中,然后绑定datagrid)
      

  7.   

    HttpContext.Current.Cache不是缓存到客户端的吗?
    我 需要缓存到客户端,因为所取的DataSet是于当前登陆的域用户相关的
      

  8.   

    使用自定义分页,用存储过程提取分页数据:create procedure eosp_PagebdAccVsCorp
    (
    @PageIndex int,
    @PageSize int,
    @Order varchar(10)      --空字符串表示顺序,'desc'表示逆序
    )
    asdeclare @PageLowerBound int
    declare @PageUpperBound int
    set @PageLowerBound = @PageSize * @PageIndex
    set @PageUpperBound = @PageLowerBound + @PageSize + 1create table #PageIndex
    (
    IndexId int identity (1, 1) not null,
    fLinkID Int
    )if(@Order='')
    begin
    insert into #PageIndex (fLinkID)
    select fLinkID from bdAccVsCorps order by fLinkID
    end
    else
    begin
    insert into #PageIndex (fLinkID)
    select fLinkID from bdAccVsCorps order by fLinkID desc
    endselect count(fLinkID) from bdAccVsCorpsselect O.*
    from bdAccVsCorps O,#PageIndex PageIndex
    where O.fLinkID = PageIndex.fLinkID AND
    PageIndex.IndexID > @PageLowerBound AND
    PageIndex.IndexID < @PageUpperBound
    order by PageIndex.IndexID
    GO
      

  9.   

    效果看这里 http://community.csdn.net/Expert/TopicView3.asp?id=4180563翻页算法--无优化倒序
    declare @pageSize int   --返回一页的记录数
    declare @CurPage int  --页号(第几页)0:第一页;-1最后一页。declare @Count int
    declare @id intset @pageSize=10
    set @CurPage =1--定位
    if @CurPage = -1
    begin
     --最后一页
     set rowcount @pageSize
     select @id=newsID from newsTemp   order by newsID
    endif @CurPage > 0
    begin
     set @Count = @pageSize * (@CurPage -1) + 1
     set rowcount @Count
     select @id=newsID from newsTemp   order by newsID desc
    end--返回记录
    set rowcount @pageSize
    select * from newsTemp where newsID <=@id order by newsID descset rowcount 0
      

  10.   

    参考一下这个:
    http://community.csdn.net/Expert/topic/4175/4175448.xml?temp=.9892847