西西軟件下載最安全的下載網(wǎng)站、值得信賴的軟件下載站!

首頁(yè)編程開(kāi)發(fā)C#.NET → PageDataSource和Request.CurrentExecutionFilePath實(shí)現(xiàn)分頁(yè)代碼分享

PageDataSource和Request.CurrentExecutionFilePath實(shí)現(xiàn)分頁(yè)代碼分享

相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:西西整理時(shí)間:2012/11/7 11:44:44字體大。A-A+

作者:佚名點(diǎn)擊:0次評(píng)論:0次標(biāo)簽: 分頁(yè)

  • 類型:濾鏡插件大。3.7M語(yǔ)言:英文 評(píng)分:5.0
  • 標(biāo)簽:
立即下載

DataList控件,這個(gè)控件有很強(qiáng)的擴(kuò)展性,可以自定義的顯示數(shù)據(jù)格式,比較靈活,但是它不支持分頁(yè)。所以就查閱、參考了一些網(wǎng)上了資料,發(fā)現(xiàn)了一個(gè)很便捷的實(shí)現(xiàn)分頁(yè)的方法,主要通過(guò)PageDataSource和Request.CurrentExcutionFilePath來(lái)實(shí)現(xiàn)的。好了,還是通過(guò)實(shí)例來(lái)向大家演示如何使用這兩者來(lái)實(shí)現(xiàn)快捷的分頁(yè)。

     首先新建一個(gè)產(chǎn)品表Product,表中有如下字段:

然后我們新建一個(gè)產(chǎn)品展示頁(yè),頁(yè)面布局如下:

<div id="zone">
    <div align="right">
    <a href="ShopCart.aspx"><img src="PImages/cart.jpg" alt="我的購(gòu)物車(chē)" title="查看購(gòu)物車(chē)" /></a>
    </div>
    <br />
    <div style="text-align:right">
        <asp:Button ID="btnshowall" runat="server" Text="顯示所有產(chǎn)品"
            onclick="btnshowall_Click" /></div>
     <br />
     <div align="center" style="width:1000px">
         <asp:DataList ID="DataList1" runat="server" RepeatDirection="Horizontal"
             onitemdatabound="DataList1_ItemDataBound">
         <ItemTemplate>
         <div>
             <asp:Image ID="imgpic" runat="server"  height="160px" width="160px"/>
         </div>
         <div>
         <%#Eval("ProductName") %>
         </div>
         <div>
         <font color="gray"><s><%#Convert.ToInt32(Eval("MarketPrice")).ToString("c2") %></s></font> <br><font color="red"><%#Convert.ToInt32(Eval("BuyPrice")).ToString("c2") %></font></div>
         <div>
         <a href='ShopCart.aspx?ID=<%#Eval("ID") %>&ProductNo=<%#Eval("ProductNo") %>'>
         <img src="PImages/add.jpg" alt="添加到購(gòu)物車(chē)" title="添加到購(gòu)物車(chē)" />
         </a>
         </div>
         </ItemTemplate>
         </asp:DataList>
     </div>
     <br />
     <div  style="text-align:center">
         <asp:Label ID="lbcurrentpage" runat="server" Text=""></asp:Label>/
         <asp:Label ID="lbcount" runat="server" Text=""></asp:Label>
         <asp:HyperLink ID="hlfirst" runat="server">首頁(yè)</asp:HyperLink>
         <asp:HyperLink
             ID="hfprev" runat="server">上頁(yè)</asp:HyperLink>
             <asp:HyperLink ID="hfnext"
                 runat="server">下頁(yè)</asp:HyperLink>
                 <asp:HyperLink ID="hflast"
                 runat="server">尾頁(yè)</asp:HyperLink>
     </div>

分頁(yè)顯示效果:

   接下來(lái)需要我們把在aspx.cs頁(yè)進(jìn)行處理:

首先建一個(gè)函數(shù)實(shí)現(xiàn)頁(yè)面的數(shù)據(jù)綁定、顯示:

public void BindShow()
       {
           PagedDataSource pds = new PagedDataSource();//示例化一個(gè)PageDataSource對(duì)象,這是實(shí)現(xiàn)分頁(yè)的基礎(chǔ)
           pds.DataSource = SQLHelper.FillDataTable("select * from Products order by ID Desc").DefaultView;//從后臺(tái)讀取數(shù)據(jù),并填充到DataTable里,為pds進(jìn)行賦值
           pds.AllowPaging = true;//設(shè)置其屬性為允許分頁(yè)
           if (Request["P"] != null)//檢測(cè)是否要顯示所有信息,如果是,則設(shè)置pdsdePageSize為信息的總條數(shù),即:顯示所有信息
           {
               pds.PageSize = ((DataView)pds.DataSource).Table.Rows.Count;
               btnshowall.Text = "單頁(yè)顯示";
           }
           Else//設(shè)置每頁(yè)顯示信息的條數(shù)
           {
               pds.PageSize = 5;
               btnshowall.Text = "顯示所有產(chǎn)品!";
           }
           int currentPage;//定義局部變量標(biāo)識(shí)當(dāng)前頁(yè)
           if (Request["Page"] != null)//如果Request.QueryString["Page"]不為空,則標(biāo)記當(dāng)前頁(yè)為Request["Page"]的值,否則設(shè)置為當(dāng)前頁(yè)1,即首頁(yè)
           {
               currentPage = Convert.ToInt32(Request["Page"]);
           }
           else
           {
               currentPage = 1;
           }
           pds.CurrentPageIndex = currentPage - 1;//設(shè)置當(dāng)前頁(yè)的索引,因?yàn)轫?yè)的索引是從0開(kāi)始的,所以設(shè)置時(shí)應(yīng)將curentPage-1
           lbcurrentpage.Text = currentPage.ToString();//顯示當(dāng)前頁(yè)
           lbcount.Text = pds.PageCount.ToString();//pds自有屬性PageCount統(tǒng)計(jì)頁(yè)數(shù),顯示總頁(yè)數(shù)
           if (!pds.IsFirstPage)//判斷是否為首頁(yè),如果是則為aspx頁(yè)的LinkButton"上一頁(yè)",設(shè)置其NavigateUrl為Request.CurrentExecutionFilePath?Page=currentPage-1,即:先獲取當(dāng)前請(qǐng)求虛擬路徑即:ShowProducts.aspx然后再進(jìn)行拼接為其加上QueryString“?Page="Convert.ToInto32(currentPage-1),即獲取上一頁(yè)的數(shù)據(jù),同時(shí)只是LinkButton首頁(yè),的NavigateUrl為當(dāng)前請(qǐng)求虛擬路徑+Page=1;
           
               hfprev.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToInt32(currentPage - 1);
               hlfirst.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=1";
           }
           if (!pds.IsLastPage)//判斷是否是尾頁(yè),處理方式和上邊是一樣的
           {
               hfnext.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToInt32(currentPage + 1);
               hflast.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + pds.PageCount;
           }
           DataList1.DataSource = pds;//為DataList控件賦值,并進(jìn)行綁定
           DataList1.DataBind();
       }

然后我們需要在Page_load函數(shù)里調(diào)用一下即可:

protected void Page_Load(object sender, EventArgs e)

        {

            BindShow();

        }

除此之外,我們還要注意一點(diǎn)的是,我們還需要在DataList1_ItemDataBound事件里對(duì)顯示圖片的路徑進(jìn)行修飾,因?yàn)槲覀償?shù)據(jù)庫(kù)里存的全都是圖片的名稱,這里要轉(zhuǎn)換為圖片的虛擬路徑

protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)<br>//判斷當(dāng)前行的類型是否,是否為交替行,ListItemType是一個(gè)枚舉類型用來(lái)表示當(dāng)前行的類型,<br>有Item,AlternatingItem、Footer(表頭)Header(表尾),Pager,SelectedItem,Separator等枚舉項(xiàng)
            {
                DataRowView drv = (DataRowView)e.Item.DataItem;//DataRowView為當(dāng)前自定義的數(shù)據(jù)視圖,可以通過(guò)drv["索引"]的方式來(lái)訪問(wèn)到當(dāng)前行的值
                ((Image)e.Item.FindControl("imgpic")).ImageUrl = "~/PImages/" + drv["PicturePath"];<br>//通過(guò)e.Item.FindControl(控件id)的方式來(lái)獲取aspx頁(yè)的當(dāng)前行的控件,并為其ImageUrl屬性賦值,
            }
        }

到這里你已經(jīng)實(shí)現(xiàn)了DataList的分頁(yè),快來(lái)試一下吧。

有細(xì)心的朋友發(fā)現(xiàn)了在aspx頁(yè)還有一個(gè)顯示所有數(shù)據(jù)的的按鈕,對(duì)!這個(gè)按鈕是用來(lái)顯示顯示所有數(shù)據(jù)的,如果你覺(jué)得翻頁(yè)很累的話,可以直接點(diǎn)此按鈕進(jìn)行全部顯示。但是在實(shí)際的開(kāi)發(fā)中不建議這樣做,一方面如果數(shù)據(jù)量比較大時(shí),一下子顯示所有的數(shù)據(jù)對(duì)服務(wù)器的壓力很大,另一方面DataList本身不支持分頁(yè),它顯示數(shù)據(jù)的時(shí)候可以以橫向和縱向的方式顯示,我們分頁(yè)的時(shí)候用的是橫向顯示,如果顯示全部信息時(shí)所有信息都會(huì)橫向顯示用戶體驗(yàn)特別不好。顯示所有信息按鈕處理事件如下:

protected void btnshowall_Click(object sender, EventArgs e)
        {
            if (btnshowall.Text == "顯示所有產(chǎn)品!")
            {
                Response.Redirect("ShowProducts.aspx?P=1");
            }
            else
            {
                Response.Redirect("ShowProducts.aspx");<br>            }
        }

好了,到這里關(guān)于使用PageDataSource和Request.CurrentExecutionFilePath實(shí)現(xiàn)便捷分頁(yè)已經(jīng)結(jié)束了,這里只是和大家分享一種便捷的方法而已,如果在真正的開(kāi)發(fā)中這種方法可能很少會(huì)用到,因?yàn)槿绻麛?shù)據(jù)量大的話每次訪問(wèn)都需要加載大量的數(shù)據(jù)對(duì)服務(wù)器的壓力特別大。如果是小的項(xiàng)目的話,可以使用這種方法來(lái)分頁(yè),使用存儲(chǔ)過(guò)程進(jìn)行數(shù)據(jù)讀取,這樣會(huì)對(duì)程序的性能有一定的提高。

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過(guò)難過(guò)
    • 5 囧
    • 3 圍觀圍觀
    • 2 無(wú)聊無(wú)聊

    熱門(mén)評(píng)論

    最新評(píng)論

    發(fā)表評(píng)論 查看所有評(píng)論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)