官术网_书友最值得收藏!

2.8 GridView結(jié)合Webdiyer以及分頁(yè)通用存儲(chǔ)過程海量數(shù)據(jù)分頁(yè)

前面說的分頁(yè)其實(shí)在數(shù)據(jù)量小的時(shí)候問題不大,如果有海量數(shù)據(jù),那么一次select所有的數(shù)據(jù)無疑是很不合理的一件事,所以就要每次只取當(dāng)前頁(yè)的數(shù)據(jù)即可,很多人都是使用“存儲(chǔ)過程+分頁(yè)控件”就可以完成,原理是用存儲(chǔ)過程先算出數(shù)據(jù)庫(kù)中的總行數(shù),然后每次傳當(dāng)前取第幾到第幾行即可。

本書推薦的分頁(yè)控件由Webdiyer所寫,網(wǎng)名陜北吳起娃,在百度搜索Webdiyer第一個(gè)就是,大家從http://www.webdiyer.com可以看到該控件的很多詳細(xì)介紹,從下載頁(yè)面:www.webdiyer.com/download/default.aspx下載最新的DLL和例子AspNetPager72Samples即可。Webdiyer控件的功能很多,這里不一一敘述,僅介紹其最簡(jiǎn)單的分頁(yè)功能。

第一,在你的項(xiàng)目中引用AspNetPager.dll,如圖2-21、圖2-22所示。

圖2-21 單擊“添加引用”命令

圖2-22 在bin目錄中選擇AspNetPager.dll引用

第二,在web.config的<pages><controls>中注冊(cè)該控件,代碼如下所示。

        <pages>
        <controls>
        <addtagPrefix="asp"namespace="System.Web.UI"assembly="System.Web.Extensio
    ns, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
          <addtagPrefix="asp"namespace="System.Web.UI.WebControls"assembly=
    "System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=
    31BF3856AD364E35"/>
    <addtagPrefix="webdiyer"namespace="Wuqi.Webdiyer"assembly="AspNetPager"/>
          </controls>
          </pages>

第三,添加SqlHelper.cs類庫(kù)文件,這個(gè)文件可以從Webdiyer例子AspNetPager72Samples中找到,當(dāng)然如果你把SqlHelper.cs用得很熟就會(huì)知道這個(gè)是微軟公開的一個(gè)數(shù)據(jù)訪問類庫(kù),Webdiyer使用的SqlHelper.cs已經(jīng)把原SqlHelper.cs精簡(jiǎn)很多。注意修改SqlHelper.cs中的數(shù)據(jù)庫(kù)連接信息CONN_STRING,為你的web.config配置的信息如下所示。

        publicstaticreadonlystring CONN_STRING=ConfigurationManager.
    ConnectionStrings["SQLCONN"].ConnectionString;

第四,添加前臺(tái)代碼如下所示。

        <asp:GridViewID="GridView1"runat="server"BackColor="White"BorderColor="#C
    CCCCC"
        BorderStyle="None"BorderWidth="1px"CellPadding="4"Font-Size="12px"
        ForeColor="Black"GridLines="Both"PageSize="5">
        <FooterStyleBackColor="#CCCC99"ForeColor="Black"/>
        <PagerStyleBackColor="White"ForeColor="Black"HorizontalAlign="Right"/>
        <SelectedRowStyleBackColor="#CC3333"Font-Bold="True"ForeColor="White"/>
        <HeaderStyleBackColor="#333333"Font-Bold="True"ForeColor="White"/>
        </asp:GridView>
        <webdiyer:aspnetpagerid="AspNetPager1"runat="server"
        PagingButtonSpacing="8px"onpagechanged="AspNetPager1_PageChanged"
        showcustominfosection="Right"
        CustomInfoHTML="總記錄數(shù):%RecordCount%,總頁(yè)數(shù):%PageCount%,當(dāng)前為第
    %CurrentPageIndex%頁(yè)"
        urlpaging="True"width="100%"LayoutType="Table"ShowNavigationToolTip="true"
        UrlPageIndexName="pageindex"Font-Size="12px"></webdiyer:aspnetpager>

第五,添加后臺(tái)代碼如下所示。

        protectedvoid Page_Load(object sender, EventArgs e)
              {
        if (!IsPostBack)
                    {
                        bind();
                    }
              }
        //綁定
        publicvoid bind()
              {
        //cache the number of total records to improve performance
        object obj=Cache[GetType() + "totalOrders"];
        if (obj == null)
                    {
        int totalOrders=(int)SqlHelper.ExecuteScalar(CommandType.StoredProcedure,
    "P_GetOrderNumber");
                      Cache[GetType() + "totalOrders"]=totalOrders;
                      AspNetPager1.RecordCount=totalOrders;
                    }
        else
                    {
                      AspNetPager1.RecordCount=(int)obj;
                    }
              }
        protectedvoid AspNetPager1_PageChanged(object src, EventArgs e)
              {
                    GridView1.DataSource=SqlHelper.ExecuteReader(CommandType.
    StoredProcedure, "P_GetPagedOrders2005",
        newSqlParameter("@startIndex", AspNetPager1.StartRecordIndex),
        newSqlParameter("@endIndex", AspNetPager1.EndRecordIndex));
                    GridView1.DataBind();
              }

第六,添加分頁(yè)通用存儲(chǔ)過程。

第一個(gè)存儲(chǔ)過程:

        setANSI_NULLSON
        setQUOTED_IDENTIFIERON
        go
        --分頁(yè)存儲(chǔ)過程計(jì)算行數(shù)
        ALTERPROCEDURE [dbo].[P_GetOrderNumber]
        AS
            selectcount(*)from章立民工作室;
            RETURN

第二個(gè)存儲(chǔ)過程:

        setANSI_NULLSON
        setQUOTED_IDENTIFIERON
        go
        --分頁(yè)通用存儲(chǔ)過程
        ALTERPROCEDURE [dbo].[P_GetPagedOrders2005]
        (@startIndex INT,
        @endindex INT
        )
        AS
        begin
        WITH章立民工作室AS(
        SELECT ROW_NUMBER()OVER(ORDERBY員工編號(hào))AS Row,員工編號(hào),身份證號(hào)碼,姓名,性別,地址
        from章立民工作室)
        SELECT員工編號(hào),身份證號(hào)碼,姓名,性別,地址
        FROM章立民工作室
        WHERE Row between @startIndex and @endIndex
        end

說明:這里使用了SQLServer 2005特有的WITH遞歸方法,關(guān)于這個(gè)可以參考本書第8章或者網(wǎng)絡(luò)。

最終顯示在網(wǎng)頁(yè)中的效果如圖2-23、圖2-24所示。

圖2-23 Webdiyer的AspNetPager分頁(yè)控件第1頁(yè)

總結(jié):Webdiyer的AspNetPager分頁(yè)控件還有許多功能,如果你有需要可以關(guān)注其網(wǎng)站。而且AspNetPager是完全免費(fèi)且開放源代碼的ASP.NET控件,可以被用于商業(yè)目的,唯一的條件是保留控件中的版權(quán)信息。所謂的版權(quán)信息是HTML代碼中的信息:<!-- AspNetPager V7.2 for VS2005 & VS2008 Copyright:2003-2008 Webdiyer (www. webdiyer.com) -->,應(yīng)該說這樣的版權(quán)信息一點(diǎn)也不會(huì)影響使用,所以本書鄭重推薦。

圖2-24 Webdiyer的AspNetPager分頁(yè)控件第2頁(yè)

主站蜘蛛池模板: 五华县| 安图县| 禄丰县| 万源市| 木兰县| 静乐县| 普洱| 阿拉善右旗| 兰溪市| 湘阴县| 大石桥市| 浪卡子县| 拉孜县| 剑河县| 万盛区| 阿克| 陇西县| 蒙山县| 卢湾区| 敖汉旗| 广平县| 信阳市| 大兴区| 内乡县| 禄劝| 安溪县| 东乡| 清苑县| 馆陶县| 清流县| 黄梅县| 图们市| 鄄城县| 赤峰市| 通化市| 文山县| 高雄市| 杭锦旗| 杭锦后旗| 遂昌县| 西宁市|