分頁(yè)控件的使用
一:下載,并在 vs2010 里面添加? anpnetpager 控件
1:? 下載?? http://www.webdiyer.com/Controls/AspNetPager/Downloads 下載
2:?? 將 AspNetPager.dll 和 AspNetPager.xml 考入到項(xiàng)目的 bin 文件夾 并在Bin文件夾上引用AspNetPager。(這一步其實(shí)可以用不,執(zhí)行下面的第三部,就會(huì)把第二步執(zhí)行一次的,不過(guò)這個(gè) xml 好像不會(huì)自動(dòng)考進(jìn)來(lái),所以我們還是把第一步 執(zhí)行比較好)
?
3:在VS2010 工具欄上面,右鍵新建項(xiàng),然后找到剛才 bin文件的 AspNetPager.dll ,這樣在工具欄就可以使用 AspNetPager了,將控件拖到你需要分頁(yè)的地方,就可以了。
然后就可以在工具欄看到 AspNetPager 控件了
?
二: 下面開(kāi)始如何分頁(yè)的步驟
1:分頁(yè)控件的準(zhǔn)備,我們上面已經(jīng)做好了
2:在sql2005以及以上,運(yùn)行分頁(yè)的存儲(chǔ)過(guò)程
-- =============================================
-- Author: 牛腩
-- Create date: 2009-07-22 12:41
-- Description: 分頁(yè),用到了ROW_NUMBER()
-- =============================================
ALTER
PROCEDURE
[dbo].[proc_FenYe]
@tblName
varchar
(255),
-- 表名
@strGetFields
varchar
(1000) = '
*
',
-- 需要返回的列,默認(rèn)*
@strOrder
varchar
(255)='
',
-- 排序的字段名,必填
@strOrderType
varchar
(10)='
ASC
',
-- 排序的方式,默認(rèn)ASC
@PageSize
int
= 10,
-- 頁(yè)尺寸,默認(rèn)10
@PageIndex
int
= 1,
-- 頁(yè)碼,默認(rèn)1
@strWhere
varchar
(1500) = '
'
-- 查詢條件 (注意: 不要加 where)
AS
declare
@strSQL
varchar
(5000)
if
@strWhere !='
'
set
@strWhere='
where
'+@strWhere
set
@strSQL=
'
SELECT * FROM (
'+
'
SELECT ROW_NUMBER() OVER (ORDER BY
'+@strOrder+'
'+@strOrderType+'
) AS pos,
'+@strGetFields+'
'+
'
FROM
'+@tblName+'
'+@strWhere+
'
) AS sp WHERE pos BETWEEN
'+str((@PageIndex-1)*@PageSize+1)+'
AND
'+str(@PageIndex*@PageSize)
exec
(@strSQL)
注意:如果用到多表查詢,還是使用上面的這個(gè)存儲(chǔ)過(guò)程,下面是在sqlserver 2005 中的查詢分析器中調(diào)用 上面的存儲(chǔ)過(guò)程來(lái)進(jìn)行多表查詢
//這里是在存儲(chǔ)過(guò)程里面的調(diào)用方法,可以使用多表查詢的。
EXEC
[proc_ShowPage]
@tblName = N'
(project p inner join projectca ca on p.caid=ca.id)
',
@strGetFields = N'
p.title,ca.caname
',
@strOrder = N'
p.id
',
@strOrderType = N'
desc
',
@PageSize = 12,
@PageIndex = 1,
@strWhere = N'
'
?
2:在頁(yè)面上需要使用分頁(yè)控件的地方,拉入控件,修改 上一頁(yè),下一頁(yè),尾頁(yè)和首頁(yè)的文字,設(shè)置為一直顯示。
<webdiyer:AspNetPager ID="
anp
" runat="
server
" AlwaysShow="
True
"
FirstPageText="
首頁(yè)
" LastPageText="
尾頁(yè)
" NextPageText="
下一頁(yè)
" PrevPageText="
上一頁(yè)
"
CustomInfoHTML="
總計(jì)%RecordCount%條記錄,共%PageCount%頁(yè),每頁(yè)%PageSize%條
"
ShowCustomInfoSection="
Left
" CssClass="
paginator
"
CurrentPageButtonClass="
cpb
" CustomInfoSectionWidth="
" >
然后設(shè)置它的CSS,使用拍拍網(wǎng)的樣式
.paginator
{
font
:
11px Arial, Helvetica, sans-serif
;
padding
:
10px 20px 10px 0
;
margin
:
0px
;}
.paginator a
{
padding
:
1px 6px
;
border
:
solid 1px #ddd
;
background
:
#fff
;
text-decoration
:
none
;
margin-right
:
2px
}
.paginator a:visited
{
padding
:
1px 6px
;
border
:
solid 1px #ddd
;
background
:
#fff
;
text-decoration
:
none
;}
.paginator .cpb
{
padding
:
1px 6px
;
font-weight
:
bold
;
font-size
:
13px
;
border
:
none
}
.paginator a:hover
{
color
:
#fff
;
background
:
#ffa501
;
border-color
:
#ffa501
;
text-decoration
:
none
;}
然后給 anp控件加上 屬性設(shè)置: CssClass=" paginator " CurrentPageButtonClass=" cpb "
?
3:在分頁(yè)控件上,雙擊 進(jìn)入后臺(tái)編寫(xiě)分頁(yè)控件點(diǎn)擊的代碼(先是統(tǒng)計(jì)anp分頁(yè)控件的所有的產(chǎn)品數(shù),然后是給產(chǎn)品rep綁定)
Niunan.Shop.DAL.
ProductDAO
pro =
new
DAL.
ProductDAO
();
protected void
Page_Load(
object
sender,
EventArgs
e)
{
//頁(yè)面進(jìn)入的時(shí)候,分頁(yè)控件先統(tǒng)計(jì)總的條數(shù),然后綁定產(chǎn)品
if
(!Page.IsPostBack)
{
anp.RecordCount = pro.ClacCount(getCond());
BindRepPro();
}
}
//綁定產(chǎn)品
private void
BindRepPro()
{
//這里獲取產(chǎn)品的時(shí)候,是調(diào)用分頁(yè)來(lái)調(diào)用。分頁(yè)的個(gè)數(shù)由 anp.PageSize 控制
repNewPro.DataSource = pro.GetList(
"*"
,
"id"
,
"desc"
, anp.PageSize, anp.CurrentPageIndex, getCond());
repNewPro.DataBind();
}
//獲取條件
private string
getCond()
{
string
cond =
"isxp=1"
;
return
cond;
}
//分頁(yè)控件點(diǎn)擊事件(實(shí)際上就是重新綁定產(chǎn)品)
protected void
anp_PageChanged(
object
sender,
EventArgs
e)
{
BindRepPro();
}
注釋事項(xiàng):
我們?cè)趯?xiě)一般的存儲(chǔ)過(guò)程/多表查詢的時(shí)候,要記得,用 inner join 這個(gè)是個(gè)好習(xí)慣,因?yàn)槲覀円话愕拇鎯?chǔ)過(guò)程,要轉(zhuǎn)換為 分頁(yè)的查詢的時(shí)候,有這個(gè) inner join 就很明顯的知道是查詢哪幾張表
假如我們?cè)?ajax控件里面有用到分頁(yè)控件,那么如果是 postback提交分頁(yè) ,則ajax有效(也就是url不會(huì)有動(dòng)靜,但是頁(yè)面有修改), 如果是 url 分頁(yè) ,那么頁(yè)面的url會(huì)跟著改變了,就會(huì)變成 page=2 這樣。
?
更加詳細(xì)的設(shè)置,參見(jiàn)下面2篇分頁(yè)文章?
1:牛腩新聞發(fā)布系統(tǒng)? http://www.cnblogs.com/1727050508/archive/2012/02/29/2373612.html
2:牛腩購(gòu)物系統(tǒng)??????? http://www.cnblogs.com/1727050508/archive/2012/03/05/2379982.html
?
?
?
注意:1使用的分頁(yè)函數(shù)是 只有3個(gè)參數(shù)的
2:使用的是 6個(gè) 參數(shù)的(實(shí)際存儲(chǔ)過(guò)程需要7個(gè)參數(shù),但是表名我們是手動(dòng)在下面寫(xiě)了 shop_product)
/// <summary>
分頁(yè)獲取數(shù)據(jù)列表
///
/// </summary>
/// <param name="strGetFields">
選擇的字段
</param>
/// <param name="strOrder">
排序字段
</param>
/// <param name="strOrderType">
排序類(lèi)型 desc或者asc
</param>
///
///
<param name="PageSize">
頁(yè)面大小
</param>
/// <param name="PageIndex">
頁(yè)索引
</param>
/// <param name="strWhere">
條件
</param>
/// <returns></returns>
public
DataSet
GetList(
string
strGetFields,
string
strOrder,
string
strOrderType,
int
PageSize,
int
PageIndex,
string
strWhere)
{
Database
db =
DatabaseFactory
.CreateDatabase();
DbCommand
dbCommand = db.GetStoredProcCommand(
"proc_FenYe"
);
db.AddInParameter(dbCommand,
"tblName"
,
DbType
.AnsiString,
"shop_product"
);
db.AddInParameter(dbCommand,
"strGetFields"
,
DbType
.AnsiString, strGetFields);
db.AddInParameter(dbCommand,
"PageSize"
,
DbType
.Int32, PageSize);
db.AddInParameter(dbCommand,
"PageIndex"
,
DbType
.Int32, PageIndex);
db.AddInParameter(dbCommand,
"strOrder "
,
DbType
.String, strOrder);
db.AddInParameter(dbCommand,
"strOrderType"
,
DbType
.String, strOrderType);
db.AddInParameter(dbCommand,
"strWhere"
,
DbType
.AnsiString, strWhere);
return
db.ExecuteDataSet(dbCommand);
}
/// <summary>
獲取總的記錄數(shù)
///
/// </summary>
/// <param name="strWhere"></param>
/// <returns></returns>
public int
ClacCount(
string
strWhere)
{
string
sql =
"select count(1) from shop_product"
;
if
(!
string
.IsNullOrEmpty(strWhere))
{
sql +=
" where "
+ strWhere;
}
Database
db =
DatabaseFactory
.CreateDatabase();
DbCommand
dbCommand = db.GetSqlStringCommand(sql);
return int
.Parse(db.ExecuteScalar(dbCommand).ToString());
}
3:在牛腩新聞發(fā)布系統(tǒng)的時(shí)候,使用過(guò)一次多表查詢分頁(yè),但是是3個(gè)參數(shù)的,以后我們使用的時(shí)候,修改成多個(gè)參數(shù)即可
/// <summary>分頁(yè)選擇新聞
///
/// </summary>
/// <param name="pageSize">頁(yè)面大小</param>
/// <param name="pageIndex">頁(yè)索引</param>
/// <param name="cond">條件(不用加where)</param>
/// <returns></returns>
public
DataTable Select(
int
pageSize,
int
pageIndex,
string
cond)
{
//執(zhí)行分頁(yè)的存儲(chǔ)過(guò)程 [proc_FenYe]
DataTable dt =
new
DataTable();
string
procname = "
proc_FenYe
";
SqlParameter[] paras =
new
SqlParameter[]{
new
SqlParameter("
@tblName
","
(news a inner join category b on a.caId=b.id and a.caId=b.id)
"
as
object
),
new
SqlParameter("
@strGetFields
","
a.id,a.title,a.caid,a.createtime,a.content,b.name
"
as
object
),
new
SqlParameter("
@strOrder
","
a.createtime
"
as
object
),
//通過(guò)time來(lái)排序
new
SqlParameter("
@strOrderType
","
desc
"
as
object
),
new
SqlParameter("
@PageSize
",pageSize
as
object
),
new
SqlParameter("
@PageIndex
",pageIndex
as
object
),
new
SqlParameter("
@strWhere
",cond
as
object
)
};
dt =
new
SQLHelper().ExecuteQuery(procname, paras, CommandType.StoredProcedure);
return
dt;
}
牛腩購(gòu)物小結(jié)之: anpnetpager分頁(yè)控件的使用圖文教程,anpnetpager分頁(yè)多表查詢
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

