那就用dataset的cache,读cache中的数据!

解决方案 »

  1.   

    if(Cache{"dataset"]==null)
    {
         ……
         Cache["dataset"] == testDataSet;
    }DataSet newSet = (DataSet)Cache{"dataset"];
      

  2.   

    1.要就一次把记录都进来,用自动分页,这样数据绑定就能写成Page.IsPostBack里
    2.用自定义分页,分解函数
    if (!Page.IsPostBack)
    {
    SetVirtualItemCount();
                       OnLoadData();
    }public void OnLoadData(Object sender, EventArgs e)
    {
    grid.DataSource = CreateDataSource(0);
    grid.DataBind();
    dr.Close();
    }public void SetVirtualItemCount()
    {
    // Set up the connection
    String strConn = "DATABASE=Northwind;SERVER=localhost;UID=sa;PWD=;";
    SqlConnection conn = new SqlConnection(strConn); // Set up the command
    String strCmd = "SELECT COUNT(*) FROM products";
    SqlCommand cmd = new SqlCommand(strCmd, conn);

    // Execute the command
    conn.Open();
    int nItemCount = (int) cmd.ExecuteScalar();
    conn.Close(); grid.VirtualItemCount = nItemCount;
    return;
    }
    在Datagird的的事件再做绑定
    public void PageIndexChanged(Object sender, DataGridPageChangedEventArgs e)
    {
    grid.CurrentPageIndex = e.NewPageIndex;
    grid.DataSource = CreateDataSource(grid.CurrentPageIndex);
    grid.DataBind();
    dr.Close();
    }
    SqlDataReader dr;
    private SqlDataReader CreateDataSource(int nPageIndex)
    {
    // page index is assumed to be 0-based
    int nPageSize = grid.PageSize;
    int nBaseProductID = nPageSize * nPageIndex;
    // Set up the connection
    String strConn = "DATABASE=Northwind;SERVER=localhost;UID=sa;PWD=;";
    SqlConnection conn = new SqlConnection(strConn); // Set up the command
    String strCmd = "SELECT TOP " + nPageSize + " " +
    "productid, productname, quantityperunit, unitsinstock " + 
    "FROM products " + 
    "WHERE productid >" + nBaseProductID;
    SqlCommand cmd = new SqlCommand(strCmd, conn);

    // Execute the command
    conn.Open();
    dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    return dr;
    }
      

  3.   

    看你数据量的多少了,很多的话,必须每次去数据库取,而且你还要考虑分页取数据的方法,每次只取一页的数据项,这个其他帖子里有,搜一下就行。数据少,直接把DataSet缓存或者放在服务器Session里就行。
      

  4.   

    在第一次读的时候,Session["GridTable"]=MyDataTable;然后Grid绑定(DataTable)Session["GridTable"]就可以了。
      

  5.   

    楼主可以选择
    1。一次读出所有数据到DATASET中,然后放到CACHE,每次按所需显示的页页码想DS获取数据
    2。多次读取数据库,但每次按分页的页码去获取仅需要显示的数据 
       用SELECT TOP PAGESIZE  COL1 COL2 FROM YOURTABLE WHERE PKID NOT IN (SELECT TOP      ROWTOSKIP PKID FROM YOURTABLE ORDERBY 。。)
    ORDERBY 。。 
      

  6.   


    可以存数据入缓存
    可以序列化存入客户视图
    还可以存入Session不过一般要根据数据量的大小进行不不同的取舍~
      

  7.   

    为什么DataGrid的AutoGenerateColumns="True",且自动分页时,在分页及排序里都不用写代码,且在Page_Load事件里使用If Not Page.IsPostBack Then来对DS填充数据的话,且DS定义在Page_load里面都可以自动排序及分页呢?排序和分页都会Post回一次服务器,且这时拿不到Ds,它是如何做到不用每次读数据库啊?
      

  8.   

    把数据集放到 
    Cache
    Session
    ViewState