现在我是放Session里,
分页的时候从Session取出显示,
最后在page_Disposed的事件里清除。请教有没有更好的方法。

解决方案 »

  1.   

    可以放在ViewState里,这样不会因为Session超时而消失
    我现在是自己做分页,只提取需要的该页数据,数据量大的时候不会太占资源
      

  2.   

    ds放viewstate里似乎不现实,
    我尝试过,对于一个不大的table (<1000行)
    最后生成的page有两兆。
      

  3.   

    屏蔽ViewState,使用存储过程分页-- 编写人:张祖涛
    /*
    数据库分页存储过程
    参数说明:
      tablename为搜索表名
      tablefield为表的字段,约定为表的主键,
      where为搜索表名,要显示所有记录请设为"1=1"
      orderby为搜索结果排序,如order by id desc
      curpage当前页码
      page_record每页记录条数
    结果:
      返回表tablename中满足条件where的第curpage页的page_record条记录,结果按orderby排序
    */
    CREATE PROCEDURE OGuess_CommonPaging@tablename varchar(50),
    @tablefield varchar(20),
    @where varchar(500),
    @orderby varchar(100),
    @curpage int,
    @page_record intASBEGIN  DECLARE @cmd varchar(500)
      DECLARE @uprecord int
      SET @uprecord=@curpage * @page_record
      SET @cmd='SELECT TOP '+cast(@page_record as char)+' * FROM '+@tablename+' WHERE '+@where+' and '+@tablefield+' not in (SELECT TOP '+cast(@uprecord as char)+' '+@tablefield+' FROM '+@tablename+' WHERE '+@where+' '+@orderby +') '+@orderby
      EXEC(@cmd)  
    END
    GO
      

  4.   

    存入Session通常会浪费资源反对!
      

  5.   

    最笨的方法:
        拉一ListBox,将值存入text或value,visible当然为false.
        简单好用
      

  6.   

    if(!IsPostBack)
    {
    //得到页数
    if(Request.QueryString["Page"] == null)
    ViewState["Page"] = "1";
    else
    ViewState["Page"] = Request.QueryString["Page"];//得到该页数据
    DataSet ds = SqlSystemIfoLink.GetHolidayList(int.Parse(ViewState["Page"].ToString()));
    rptShow.DataSource = dt.DefaultView;
    rptShow.DataBind();//显示或隐藏分页按键
    if(ViewState["Page"].ToString() == "1")
    lbnFormerPage.Visible = false;
    if(dt.Rows.Count != 10)
    lbnNextPage.Visible = false;
    }
    //SqlSystemIfoLink.cs里调用函数
    public static DataSet GetHolidayList(int Page)
    {
    SqlDataAdapter myDataAdapter = new SqlDataAdapter("select top 10 * from Holiday where ID not in (select top "+((Page-1)*10).ToString()+" ID from Holiday order by Holiday desc) order by Holiday desc \n select count(ID) from Holiday",myConnection);DataSet ds = new DataSet();
    myDataAdapter.Fill(ds);
    return ds;
    }//分页按键事件
    private void lbnNextPage_Click(object sender, System.EventArgs e)
    {
    //下一页
    Response.Redirect("Holiday.aspx?Page="+(int.Parse(ViewState["Page"].ToString())+1).ToString());
    }private void lbnFormerPage_Click(object sender, System.EventArgs e)
    {
    //上一页
    Response.Redirect("Holiday.aspx?Page="+(int.Parse(ViewState["Page"].ToString())-1).ToString());
    }
    自己添加上一页和下一页的按键
    GetHolidayList方法是放在SqlSystemIfoLink.cs作为数据连接层
    ds返回的第二个表是表的总行数
      

  7.   

    看来最好的办法还是把sqlstring给存起来,
    每次需要ds的时候执行一遍,
    然后分个页显示出来。是吗?