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

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

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

相關(guān)軟件相關(guān)文章發(fā)表評論 來源:西西整理時間:2012/11/7 11:44:44字體大小:A-A+

作者:佚名點擊:0次評論:0次標(biāo)簽: 分頁

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

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

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

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

<div id="zone">
    <div align="right">
    <a href="ShopCart.aspx"><img src="PImages/cart.jpg" alt="我的購物車" title="查看購物車" /></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="添加到購物車" title="添加到購物車" />
         </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">首頁</asp:HyperLink>
         <asp:HyperLink
             ID="hfprev" runat="server">上頁</asp:HyperLink>
             <asp:HyperLink ID="hfnext"
                 runat="server">下頁</asp:HyperLink>
                 <asp:HyperLink ID="hflast"
                 runat="server">尾頁</asp:HyperLink>
     </div>

分頁顯示效果:

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

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

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

        }

除此之外,我們還要注意一點的是,我們還需要在DataList1_ItemDataBound事件里對顯示圖片的路徑進(jìn)行修飾,因為我們數(shù)據(jù)庫里存的全都是圖片的名稱,這里要轉(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是一個枚舉類型用來表示當(dāng)前行的類型,<br>有Item,AlternatingItem、Footer(表頭)Header(表尾),Pager,SelectedItem,Separator等枚舉項
            {
                DataRowView drv = (DataRowView)e.Item.DataItem;//DataRowView為當(dāng)前自定義的數(shù)據(jù)視圖,可以通過drv["索引"]的方式來訪問到當(dāng)前行的值
                ((Image)e.Item.FindControl("imgpic")).ImageUrl = "~/PImages/" + drv["PicturePath"];<br>//通過e.Item.FindControl(控件id)的方式來獲取aspx頁的當(dāng)前行的控件,并為其ImageUrl屬性賦值,
            }
        }

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

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

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實現(xiàn)便捷分頁已經(jīng)結(jié)束了,這里只是和大家分享一種便捷的方法而已,如果在真正的開發(fā)中這種方法可能很少會用到,因為如果數(shù)據(jù)量大的話每次訪問都需要加載大量的數(shù)據(jù)對服務(wù)器的壓力特別大。如果是小的項目的話,可以使用這種方法來分頁,使用存儲過程進(jìn)行數(shù)據(jù)讀取,這樣會對程序的性能有一定的提高。

    相關(guān)評論

    閱讀本文后您有什么感想? 已有人給出評價!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    最新評論

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

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