日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

Asp.Net 数据分页

發布時間:2024/4/15 asp.net 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Asp.Net 数据分页 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?

.Net 所使用的 ADO.Net較前身ADO在性能上有較大的提升,但是操作起來也較為繁瑣,在 Asp 時代,對數據進行分頁使用 RecordSet 的 PageSize 和 AbsolutePage 即可完成對數據的分頁操作,非常簡單,進入 .Net 后,RecordSet 對象沒有了,取而代之的是 DataSet/DataTable,沒有了 PageSize/AbsolutePage,分頁成了一件非常頭痛的事。

所有的 Asp.Net 初級教程中都會講解如何使用 DataGrid 控件進行基于 Post 的分頁,當我練習完這個例子后從來沒有在實戰中使用過,原因有二:

  • 代碼過于復雜;
  • 不支持url分頁,不利于搜索引擎和調試,定制度不高。
  • 所以建議大家也都不要用這個分頁了,呵呵,真垃圾。

    Asp.Net 能不能像 Asp 一樣簡單地分頁呢?答案是可以的,要使用 PageDataSource 類,這里有篇很完整的教程給大家參考,一位高手的Blog。

    使用 PageDataSource 很方便,但它也有個致命的缺點,就是性能上的下降,偶對一張10000條數據的表格進行了 Asp/Asp.Net(DataGrid)/Asp.Net(PageDataSource) 三項分頁速度測試,結果分別是 600ms-700ms / 500ms / 900ms-1000ms ,使用了 PageDataSource 分頁速度竟然比 Asp 都慢,郁悶,原因大概是因為作了二次數據綁定造成的吧,大家可以自行測試,看是否和我測試的結果相同。

      精華部分到啦……

      要提高分頁的性能,還得使用自定義分頁,首先我們來看看傳統的 Asp 分頁時需要哪些參數?

  • PageSize(每頁顯示記錄條數)
  • RecordCount(總記錄數)
  • PageCount(總頁數)
  • AbsolutePage(絕對頁)。
  • 回到 Asp.Net,我們來做一個例子,我們對 /NewsList.asp?Page=3 進行分頁,可以這樣做:

  • int PageSize=20; //定義每頁顯示的記錄條數
  • int RecordCount=”select count(*) from news”; //這句不完整,大家自行完善
  • int PageCount=RecordCount/PageSize; //總頁數算出來啦
  • int CurrentPage=Convert.ToInt32(Request.QueryString[“Page”].ToString());
  • 關鍵時候到了,需要向 DataSet 中填充數據,注意這個技巧:

    dAdapter.Fill(dSet, (CurrentPage - 1) * PageSize, PageSize, "Table");

    這一句可以向DataSet中填充指定位置的數據,這樣就可以達到分頁的效果啦。

    經測試,這樣的分頁因向DataSet中填充數據量的減少,降低了服務器內存消耗,頁面執行速度大約在 120ms-170ms

    相關連接:

    ????

    使用PagedDataSource類實現DataList和Repeater控件的分頁顯示功能

    ??? Asp.net提供了三個功能強大的列表控件:DataGrid、DataList和Repeater控件,相對DataGrid,DataList和Repeater控件具有更高的樣式自定義性,很多時候我們喜歡使用DataList或Repeater控件來顯示數據,但是Repeater和DataList沒有分頁功能,有時很不方便。

    ??? PagedDataSource類封裝了DataGrid控件的屬性,從而使DataGrid控件可以執行分頁,它就是一個數據的容器,我們先把數據從數據庫中讀取出來放在這個容器中,然后設置容器的屬性取出當前要顯示的頁上的部分數據,然后將此部分數據再綁定到頁面上的顯示控件上。

    ??? 下面實例是Repeater控件和HyperLink控件結合PagedDataSource類實現的數據分頁列表

    數據功能實現源代碼:

    //對用于分頁的類的引用
    PagedDataSource pds=new PagedDataSource();
    pds.DataSource=dt.DefaultView;//設置數據源(DataTable類型)
    pds.AllowPaging=true;
    //第頁顯示的行數
    pds.PageSize=18;

    //設置當前頁
    if(Pageindex<1) Pageindex=1;
    pds.CurrentPageIndex=Pageindex-1;

    rpt_NewsList.DataSource=pds;
    rpt_NewsList.DataBind();

    //顯示頁碼
    ltl_RecordCount.Text = pds.DataSourceCount.ToString();
    ltl_PageCount.Text = pds.PageCount.ToString();
    ltl_Pageindex.Text = Pageindex.ToString();
    ltl_Jump.Text = Jump_List (pds.PageCount , Pageindex , L_Manage);

    //顯示上下翻頁(URL后面跟的參數自已跟據需要定義)
    lbn_First.ToolTip = "跳轉到首頁";
    lbn_First.NavigateUrl=Request.CurrentExecutionFilePath+"?Org_ID="+ L_Manage +"&page=1";
    lbn_Prev.ToolTip = "跳轉到上一頁";
    lbn_Prev.NavigateUrl=Request.CurrentExecutionFilePath+"?Org_ID="+ L_Manage +"&page="+(Pageindex-1);
    lbn_Next.ToolTip = "跳轉到下一頁";
    lbn_Next.NavigateUrl=Request.CurrentExecutionFilePath+"?Org_ID="+ L_Manage +"&page="+(Pageindex+1);
    lbn_Last.ToolTip = "跳轉到最后一頁";
    lbn_Last.NavigateUrl=Request.CurrentExecutionFilePath+"?Org_ID="+ L_Manage +"&page="+pds.PageCount.ToString();

    //確定鏈接的顯示方式
    if(Pageindex<=1 && pds.PageCount<=1)
    {
    ????lbn_First.NavigateUrl = "";
    ????lbn_Prev.NavigateUrl = "";
    ????lbn_Next.NavigateUrl = "";
    ????lbn_Last.NavigateUrl = "";
    }
    if(Pageindex<=1 && pds.PageCount>1)
    {
    ????lbn_First.NavigateUrl = "";
    ????lbn_Prev.NavigateUrl = "";
    }
    if(Pageindex >= pds.PageCount)
    {
    ????lbn_Next.NavigateUrl = "";
    ????lbn_Last.NavigateUrl = "";
    }

    /// <summary>
    /// 計算分頁跳轉
    /// </summary>
    /// <param name="Pagecount">頁面數</param>
    /// <returns>string</returns>
    private string Jump_List(int Pagecount , int Pageindex , long L_Manage)
    {
    StringBuilder sb = new StringBuilder ();
    sb.Append ("<select id=\"Page_Jump\" name=\"Page_Jump\" οnchange=\"window.location='"+ Request.CurrentExecutionFilePath +"?page='+ this.options[this.selectedIndex].value + '&Org_ID="+ L_Manage +"';\">");
    for(int i = 1 ; i <= Pagecount ; i++)
    {
    if(Pageindex == i)
    sb.Append ("<option value='"+ i +"' selected>"+ i +"</option>");
    else
    sb.Append ("<option value='"+ i +"'>"+ i +"</option>");
    }
    sb.Append ("</select>");

    return sb.ToString ();
    }

    動行顯示效果如圖:

    PagedDataSource 類的部分公共屬性:
    ?AllowCustomPaging ?獲取或設置指示是否啟用自定義分頁的值。
    ?AllowPaging ??獲取或設置指示是否啟用分頁的值。
    ?Count ???獲取要從數據源使用的項數。
    ?CurrentPageIndex ??獲取或設置當前頁的索引。
    ?DataSource ??獲取或設置數據源。
    ?DataSourceCount ??獲取數據源中的項數。
    ?FirstIndexInPage ??獲取頁中的第一個索引。
    ?IsCustomPagingEnabled ?獲取一個值,該值指示是否啟用自定義分頁。
    ?IsFirstPage ??獲取一個值,該值指示當前頁是否是首頁。
    ?IsLastPage ??獲取一個值,該值指示當前頁是否是最后一頁。
    ?IsPagingEnabled ??獲取一個值,該值指示是否啟用分頁。
    ?IsReadOnly ??獲取一個值,該值指示數據源是否是只讀的。
    ?IsSynchronized ??獲取一個值,該值指示是否同步對數據源的訪問(線程安全)。
    ?PageCount ??獲取顯示數據源中的所有項所需要的總頁數。
    ?PageSize ??獲取或設置要在單頁上顯示的項數。
    ?VirtualCount ??獲取或設置在使用自定義分頁時數據源中的實際項數。

    轉載于:https://www.cnblogs.com/MaxWoods/archive/2008/11/03/1325370.html

    總結

    以上是生活随笔為你收集整理的Asp.Net 数据分页的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。