【牛腩】 網站真假分頁徹底實現
前言:
原本以為今天就要釋出系統成功了,但是在牛腩的最後一集,出來了一個重要的知識點,那就是真假分頁,如果有感興趣的朋友,或者還不是很明白真假分頁的朋友們,可一定要看接下來的內容!因為這裡有正解!
1、問題引入
如圖下所示,當我們在瀏覽新聞時,由於新聞數量非常的多我們必須要進行分頁
2、我們想要的結果
如果看著很抽象,那麼我們看一下csdn評論部落格的截圖,它是每20條評論就有一個分頁的,如下圖所示:
問題引入完畢,現在我們進行分頁:
3、真假分頁
假分頁:
如果第一次查詢從資料庫中取出全部資料,就是假分頁,因為它跟介面展示的不一致,“表裡不一”,就是假。訪問一次資料庫,但由於選擇的資料量比較大,所以第一次花費時間比較長,但之後每一頁的顯示都是直接、快速的,避免對資料庫的多次訪問。
那麼假分頁如何實現呢,如圖只需要在你的的aspx介面中寫下這些就好了,這句話的意思就是每頁份5個新聞!剩下的後端內容繫結,我就不寫了。主要介紹真分頁!
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" OnPageIndexChanging="GridView1_PageIndexChanging" PageSize="5">
</asp:GridView>
真分頁:
確定要顯示的數量和內容,然後每次都去資料庫取出該少量資料,優點是資料量小,缺點是訪問資料庫頻繁。在大型網站中往往採用真分頁。
由於當資料量較大的時候,假分頁就不適合了,但是我們的網站一般的記錄都是比較多的,這裡咱們詳細介紹一下真分頁是如何實現的!
接下來詳細的解決真分頁:
(1)下載AspNetPager分頁控制元件
下載地址http://write.blog.csdn.net/postedit
(2)將分頁匯入工具箱,匯入工具箱之前先進行引用
引用操作:如果找不到就點選 瀏覽 到下載軟體的地方,找到引用上就好了
匯入工具箱:如下,右擊標準下邊的地方,彈出一個框,點選選擇項,等一會,點選瀏覽,找到自己的控制元件,點選新增就好了,在你的工具箱的最下邊就是你的AspNetPager控制元件了
(3) 接下來將你的AspNetPager控制元件拖入到你要進行分頁的aspx頁面中,然後寫上如下程式碼!
<webdiyer:AspNetPager ID="AspNetPager1" runat="server" NumericButtonCount="5"
OnPageChanged="AspNetPager1_PageChanged" PageSize="6"
CustomInfoHTML=" 總計%RecordCount%條記錄,共%PageCount%頁"
FirstPageText=" 首頁"
LastPageText=" 尾頁"
NextPageText="下一頁"
PrevPageText="上一頁"
ShowCustomInfoSection="left"
ShowPageIndexBox="Never"
CssClass="pages"
CurrentPageButtonClass="cpb"
AlwaysShow="true">
</webdiyer:AspNetPager>
(4)前端頁面搞定,現在該看後端了,頁面載入(相當於u層)
/// <summary>
///繫結
/// </summary>
private void BindNews()
{
repNews.DataSource = new NewsManager().FenYeSelectALL(AspNetPager1.StartRecordIndex, AspNetPager1.StartRecordIndex+4); //+4是為了載入的時候就有5條記錄
repNews.DataBind();
}
protected void Page_Load(object sender, EventArgs e)
{
//已登陸
if (!Page.IsPostBack)
{
//頁面第一次載入時,繫結類別列表
BindNews()
//查詢出了記錄的總數
AspNetPager1.RecordCount = new NewsManager().SelectAll().Rows.Count;
}
}
(5)D層,
這裡最難的就是sql查詢語句,具體想知道這句話到底是幹嘛的,自己放在sql中查查就知道了,篇幅太長了,我就不給大家展示為什麼了!
/// <summary>
/// 選擇全部新聞
/// </summary>
/// <returns></returns>
public DataTable SelectAll()
{
DataTable dt = new DataTable();
string sql = "select * from news";
dt = new SQLHelper().ExecuteQuery(sql, CommandType.Text);
return dt;
}
/// <summary>
/// 選擇當頁的全部新聞
/// </summary>
/// <param name="startIndex"></param>
/// <param name="endIndex"></param>
/// <returns></returns>
public DataTable FenYeSelectALL(int startIndex, int endIndex)
{
DataTable dt = new DataTable();
string sql = "with template as (select ROW_NUMBER() over(order by id desc) as 行號,*from news) select * from template where 行號 between @startIndex and @endIndex";
SqlParameter[] paras = new SqlParameter[]
{
new SqlParameter ("@startIndex",startIndex),
new SqlParameter ("@endIndex",endIndex)
};
dt = new SQLHelper().ExecuteQuery(sql, paras, CommandType.Text);
return dt;
}
(6)B層
/// <summary>
/// 選擇全部新聞
/// </summary>
/// <param name="startIndex"></param>
/// <param name="endIndex"></param>
/// <returns></returns>
public DataTable FenYeSelectALL(int startIndex, int endIndex)
{
return ndao.FenYeSelectALL(startIndex, endIndex);
}
#region 選擇全部新聞
/// <summary>
/// 選擇全部新聞
/// </summary>
/// <returns></returns>
public DataTable SelectAll()
{
return ndao.SelectAll();
}
用了半天的時間, 將真假分頁吃掉了!大功告成!
後記:
牛腩結束了,學到了很多的知識,它也給我打開了b/s的大門,前方是一路順風,還是一路大坑呢。。。算了管它是啥,快點認真的跑吧!還有就是如果解決了你的問題,記得點個贊!