要使用 aspnetpager 的過程
1:要下載引用 aspnetpager 控件
?
2:要有分頁的存儲過程,可以單表查詢,也可以多表查詢
-- =============================================
-- Author: 牛腩
-- Create date: 2009-07-22 12:41
-- Description: 分頁,用到了ROW_NUMBER()
-- =============================================
ALTER PROCEDURE [dbo].[proc_FenYe]
@tblName?? varchar (255),?????? -- 表名
@strGetFields varchar (1000) = ' * ', -- 需要返回的列,默認*
@strOrder varchar (255)='',????? -- 排序的字段名,必填
@strOrderType varchar (10)=' ASC ', -- 排序的方式,默認ASC
@PageSize?? int = 10,????????? -- 頁尺寸,默認
@PageIndex int = 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)
3:在工具欄托 aspnetpager控件到需要分頁的地方,然后在 代碼里面需要設置
pagesize = anp.PageSize;??? //這個其實是為 分頁的存儲過程的調用準備的
int
int pageindex = anp.CurrentPageIndex;????????? //同上
anp.RecordCount = nm.CalcCount(cond);????????? //這是設置 anp分頁空間的總的記錄數
repNews.DataSource = nm.Select(pagesize, pageindex, cond);???? //這里就是分頁控件的使用(取出1個頁面的數據,僅僅是1個頁面的,非所有的頁面數據)
repNews.DataBind();
?
分頁的函數如下
/// <summary>分頁選擇新聞 /// /// </summary> /// <param name="pageSize">頁面大小</param> /// <param name="pageIndex">頁索引</param> /// <param name="cond">條件(不用加where)</param> /// <returns></returns> public DataTable Select( int pageSize, int pageIndex, string cond) { //執行分頁的存儲過程 [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 ), //通過time來排序 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; }
?
4:設置分頁的樣式,可以使用拍拍網的樣式
. 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控件加上? 屬性設置: CssClass=" paginator " CurrentPageButtonClass=" cpb "
5:設置是否為 Url 分頁或者是默認的 postback提交,或者是其他的。
<webdiyer:AspNetPager ID=" anp " runat=" server " AlwaysShow=" True " FirstPageText=" 首頁 " LastPageText=" 尾頁 " NextPageText=" 下一頁 " PrevPageText=" 上一頁 " CustomInfoHTML=" 總計%RecordCount%條記錄,共%PageCount%頁,每頁%PageSize%條 " ShowCustomInfoSection=" Left " CssClass=" paginator " CurrentPageButtonClass=" cpb " CustomInfoSectionWidth="" onpagechanged=" anp_PageChanged " >
?
6:切記要雙擊一下 anp 控件,生成一個? 函數,表示當我們點擊分頁之后,我們要做什么?(實際上就是綁定數據,同第3步驟)
protected void anp_PageChanged( object sender, EventArgs e) { BindNews(); }
大概就這么多就可以了
?
?
但是有以下小的注意事項:
1:我們在寫一般的存儲過程的時候,要記得,用 inner join?? 這個是個好習慣,因為我們一般的存儲過程,要轉換為 分頁的查詢的時候,有這個 inner join 就很明顯的知道是查詢哪幾張表
?
?
要使用? ajax 控件的過程
1:假如,我們的數據是在一個表格的 GridView 或者是 repeater 里面的話,我們就可以把這個表格 或者是 div 的兩頭加上 UpdatePanel 控件。
并且在 UpdatePanel 的前面,加上一個? ScriptManager 控件就可以了
?
2:假如我們在 ajax控件里面有用到分頁控件,那么如果是 postback提交分頁,則ajax有效,如果是 url 分頁,那么分頁就會變成 page=2 這樣。
?
3:如果是我們自己手寫 ajax ,而不是用 系統自帶的 ajax控件的話,那么一般是傳值給一個? ashx 一般處理程序
用jquery 這個js控件,可以很好的幫助我們簡化操作。
在用jquery 的時候,如果是get方式,那么要注意 數據的緩存(用url后面加多一個隨機的時間來解決)和二次轉碼,并且 ashx 端接收數據還要進行一次解碼
?
下面是JS端,分別是 get方式和 post 方式
?
//使用 jquery 的ajax 的get方法 需要對字符進行二次轉碼,并且要考慮 IE緩存的問題 ,并且在服務器的 ashx 頁面 要進行解碼 // var url="../handler/ChangeCaName.ashx?caname="+ encodeURI(encodeURI(newText)) +"&caid="+caid+"&t="+new Date().getTime(); // $.get(url) $.post(" ../handler/ChangeCaName.ashx ", { caname: newText, caid: caid }, function (data){ if (data==" 類別已經存在,修改失敗 ") { alert (data); objSPAN.html(oldcaname); } else { objSPAN.html(newText); }
下面是 ashx 一般處理程序接收端
// string caname = context.Server.UrlDecode(context.Request.QueryString["caname"]); ////獲取用 juqry的get方式傳來的字符串,需要解碼 string caname = context.Request.Form[" caname "]; bool b = new CategoryManager().IsExists(caname); if (!b) { //開始修改類別 string id = context.Request.Form[" caid "]; Category ca = new Category(id, caname); new CategoryManager().Update(ca); context.Response.Write(" 類別修改成功 "); } else { context.Response.Write(" 類別已經存在,修改失敗 "); }
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
