天天看點

Asp.net清單綁定實作高效分頁

一般的分頁模式,都是直接用系統自帶的分頁。這樣在每次點選另一頁都會把所有的資料加載。資料很大時,嚴重影響頁面打開效率:

該代碼主要利用資料庫通路技術,傳該頁顯示的開始行和行數,讀取相應的資料行。直接綁定清單。

int TotalCountRecord;// 總記錄數目    

       int CurrentPage = 1;// 目前頁數

string PageItem = "20" ;// 預設每頁顯示的數量

  public string pxfs = "pubdate desc" ;

   private void LoadSearch()

    {

        string tj = "" ;

        DataTable dt = new DataTable ();

    int startRecord = (CurrentPage - 1) * Convert .ToInt32(PageItem);

   dt = CBook .GetBookInfo(tj,pxfs, startRecord, Convert .ToInt32(PageItem));

TotalCountRecord = CBook .GetbookCount(tj);  

          if (dt != null ||dt.Rows.Count != 0)

        {

             GridView1.DataSource = dt ;

             GridView1.DataBind();

             PageInfo.InnerHtml = "" ;

         }

}

   ///   <summary>

    ///    給清單綁定分頁控制

    ///   </summary>

    public void BuildPagers()

    {

        // 偏移量

        int Step = 5;

        int LeftNum = 0;

        int RightNum = 0;

        int PageCount = (int )Math .Ceiling((double )(TotalCountRecord) / Convert .ToInt32(PageItem));

        if (CurrentPage - Step < 1)

             LeftNum = 1;

        else

             LeftNum = CurrentPage - Step;

        if (CurrentPage + Step > PageCount)

             RightNum = PageCount;

        else

             RightNum = CurrentPage + Step;

        string OutPut = "" ;

        for (int i = LeftNum; i <= RightNum; i++)

        {

             if (i == CurrentPage)

                 OutPut += "<font color=red>" + i.ToString() +"</font>" ;

             else

                 OutPut += "<a href='booklist.aspx'>[ " +i.ToString() + " ]</a>" ;

        }

        if (CurrentPage > 1)

OutPut = "<ahref='booklist.aspx? page=" + (CurrentPage - 1) + "'> 上一頁</a>" + OutPut;

        if (CurrentPage < PageCount)

OutPut += "<ahref='booklist.aspx? page=" + (CurrentPage + 1) + "'> 下一頁</a>" ;

         PageInfo.InnerHtml = OutPut;

     }

( 其中:CBook 中的相關函數:

  public static DataTable GetBookInfo(string tj,string px,int bs,int ps)

           {

        string sql = "select* from bookinfo where 1=1 " + tj; 

        if (px != "" )

             sql += "order by " + px;

        DataTable dt = CCommand .GetTable(sql,bs,ps);

        return dt;

     }

CCommand :中的函數

      public static DataTable GetTable(string sql, int beginpage, int pagesize)

    {

        using (System.Data.SqlClient.SqlConnection sqlcn = new System.Data.SqlClient.SqlConnection (CCommand .conn))

        {

             try

             {

                 return CDBV .ExecDataSet(sql, beginpage, pagesize);

             }

             catch (System.Exception ee)

             {

                 TLssfyBase .WriteOptLog(sql+ee.Message);

                 return null ;

             }

        }

     }

Cdbv 函數:

   public static System.Data.DataTable ExecDataSet(string sql, int beginitem, int pagesize)

    {

        using (System.Data.SqlClient.SqlConnection cn = new System.Data.SqlClient.SqlConnection (CCommand .conn))

        {

             SqlDataAdapter sa = new SqlDataAdapter (sql,cn);

             System.Data.DataTable ds = new System.Data.DataTable ();

             sa.Fill(beginitem, pagesize,ds);

             return ds;

        }

     }

)