分頁控件的使用
一:下載,并在 vs2010 里面添加? anpnetpager 控件
1:? 下載?? http://www.webdiyer.com/Controls/AspNetPager/Downloads 下載
2:?? 將 AspNetPager.dll 和 AspNetPager.xml 考入到項目的 bin 文件夾 并在Bin文件夾上引用AspNetPager。(這一步其實可以用不,執行下面的第三部,就會把第二步執行一次的,不過這個 xml 好像不會自動考進來,所以我們還是把第一步 執行比較好)
?
3:在VS2010 工具欄上面,右鍵新建項,然后找到剛才 bin文件的 AspNetPager.dll ,這樣在工具欄就可以使用 AspNetPager了,將控件拖到你需要分頁的地方,就可以了。
然后就可以在工具欄看到 AspNetPager 控件了
?
二: 下面開始如何分頁的步驟
1:分頁控件的準備,我們上面已經做好了
2:在sql2005以及以上,運行分頁的存儲過程
-- ============================================= -- 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, -- 頁尺寸,默認10 @PageIndex int = 1, -- 頁碼,默認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)
注意:如果用到多表查詢,還是使用上面的這個存儲過程,下面是在sqlserver 2005 中的查詢分析器中調用 上面的存儲過程來進行多表查詢
//這里是在存儲過程里面的調用方法,可以使用多表查詢的。 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:在頁面上需要使用分頁控件的地方,拉入控件,修改 上一頁,下一頁,尾頁和首頁的文字,設置為一直顯示。
<webdiyer:AspNetPager ID=" anp " runat=" server " AlwaysShow=" True " FirstPageText=" 首頁 " LastPageText=" 尾頁 " NextPageText=" 下一頁 " PrevPageText=" 上一頁 " CustomInfoHTML=" 總計%RecordCount%條記錄,共%PageCount%頁,每頁%PageSize%條 " ShowCustomInfoSection=" Left " CssClass=" paginator " CurrentPageButtonClass=" cpb " CustomInfoSectionWidth=" " >
然后設置它的CSS,使用拍拍網的樣式
.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 "
?
3:在分頁控件上,雙擊 進入后臺編寫分頁控件點擊的代碼(先是統計anp分頁控件的所有的產品數,然后是給產品rep綁定)
Niunan.Shop.DAL. ProductDAO pro = new DAL. ProductDAO (); protected void Page_Load( object sender, EventArgs e) { //頁面進入的時候,分頁控件先統計總的條數,然后綁定產品 if (!Page.IsPostBack) { anp.RecordCount = pro.ClacCount(getCond()); BindRepPro(); } } //綁定產品 private void BindRepPro() { //這里獲取產品的時候,是調用分頁來調用。分頁的個數由 anp.PageSize 控制 repNewPro.DataSource = pro.GetList( "*" , "id" , "desc" , anp.PageSize, anp.CurrentPageIndex, getCond()); repNewPro.DataBind(); } //獲取條件 private string getCond() { string cond = "isxp=1" ; return cond; } //分頁控件點擊事件(實際上就是重新綁定產品) protected void anp_PageChanged( object sender, EventArgs e) { BindRepPro(); }
注釋事項:
我們在寫一般的存儲過程/多表查詢的時候,要記得,用 inner join 這個是個好習慣,因為我們一般的存儲過程,要轉換為 分頁的查詢的時候,有這個 inner join 就很明顯的知道是查詢哪幾張表
假如我們在 ajax控件里面有用到分頁控件,那么如果是 postback提交分頁 ,則ajax有效(也就是url不會有動靜,但是頁面有修改), 如果是 url 分頁 ,那么頁面的url會跟著改變了,就會變成 page=2 這樣。
?
更加詳細的設置,參見下面2篇分頁文章?
1:牛腩新聞發布系統? http://www.cnblogs.com/1727050508/archive/2012/02/29/2373612.html
2:牛腩購物系統??????? http://www.cnblogs.com/1727050508/archive/2012/03/05/2379982.html
?
?
?
注意:1使用的分頁函數是 只有3個參數的
2:使用的是 6個 參數的(實際存儲過程需要7個參數,但是表名我們是手動在下面寫了 shop_product)
/// <summary> 分頁獲取數據列表 /// /// </summary> /// <param name="strGetFields"> 選擇的字段 </param> /// <param name="strOrder"> 排序字段 </param> /// <param name="strOrderType"> 排序類型 desc或者asc </param> /// /// <param name="PageSize"> 頁面大小 </param> /// <param name="PageIndex"> 頁索引 </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> 獲取總的記錄數 /// /// </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:在牛腩新聞發布系統的時候,使用過一次多表查詢分頁,但是是3個參數的,以后我們使用的時候,修改成多個參數即可
/// <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; }
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

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