using System; using System.Collections.Generic; using System.Text; using System.Web; using System.Text.RegularExpressions; using Zhaizj.Framework.ORM; using Zhaizj.Framework.Web.Mvc; using Zhaizj.Framework.Web; namespace Zhaizj.Framework { /// /// 封装了 ORM 分页查询的结果集 /// /// 数据类型 [Serializable] public class DataPage : IPageList { public DataPage() { } public DataPage( IPageList list ) { this.Current = list.Current; this.Size = list.Size; this.PageCount = list.PageCount; this.PageBar = list.PageBar; this.RecordCount = list.RecordCount; this.Results = db.getResults( list.Results ); } public void CopyStats( IPageList list ) { this.Current = list.Current; this.Size = list.Size; this.PageCount = list.PageCount; this.PageBar = list.PageBar; this.RecordCount = list.RecordCount; } private int _current; private String _pageBar; private int _pageCount; private int _recordCount; private List _results; private int _size; /// /// 当前页码 /// public int Current { get { return _current; } set { _current = value; } } /// /// 每页数据量 /// public int Size { get { return _size; } set { _size = value; } } /// /// 风转过的 html 分页栏(也可以自定义) /// public String PageBar { get { return _pageBar; } set { _pageBar = value; } } /// /// 总页码 /// public int PageCount { get { return _pageCount; } set { _pageCount = value; } } /// /// 总记录数 /// public int RecordCount { get { return _recordCount; } set { _recordCount = value; } } /// /// 查询结果:对象的列表 /// public List Results { get { return _results; } set { _results = value; } } /// /// 返回空的分页结果集 /// /// public static DataPage GetEmpty() { DataPage p = new DataPage(); p.Results = new List(); p.Current = 1; p.RecordCount = 0; return p; } System.Collections.IList IPageList.Results { get { return new System.Collections.ArrayList(); } set { } } public String GetRecentPage( String recentLink, String archiveLink, int recentPageCount, Boolean isHtml ) { return GetRecentPage( recentLink, archiveLink, recentPageCount, recentPageCount, isHtml ); } /// /// 最近数据列表的分页栏 /// /// 最近数据列表网址(不带页码) /// 存档数据列表网址(不带页码) /// 最近数据列表需要展示的页数 /// public String GetRecentPage( String recentLink, String archiveLink, int recentPageCount ) { return GetRecentPage( recentLink, archiveLink, recentPageCount, recentPageCount ); } /// /// 最近数据列表的分页栏 /// /// 最近数据列表网址(不带页码) /// 存档数据列表网址(不带页码) /// 最近数据列表需要展示的页数 /// 分页栏宽度 /// public String GetRecentPage( String recentLink, String archiveLink, int recentPageCount, int pageWidth ) { return GetRecentPage( recentLink, archiveLink, recentPageCount, pageWidth, false ); } /// /// 最近数据列表的分页栏 /// /// 最近数据列表网址(不带页码) /// 存档数据列表网址(不带页码) /// 最近数据列表需要展示的页数 /// 分页栏宽度 /// 是否html制作请求 /// public String GetRecentPage( String recentLink, String archiveLink, int recentPageCount, int pageWidth, Boolean isHtml ) { StringBuilder sb = new StringBuilder(); sb.Append( "
" ); // prev if (this.Current > 1) { sb.AppendFormat( "<{1} ", appendPage( recentLink, this.Current - 1, isHtml ), lang.get( "prevPage" ) ); } // page number int startNo; int pp = this.Current / pageWidth; if (this.Current % pageWidth == 0) { startNo = (pp - 1) * pageWidth + 1; } else { startNo = pp * pageWidth + 1; } if (startNo > this.PageCount) startNo = 1; int endNo = startNo + pageWidth - 1; if (endNo >= this.PageCount) endNo = this.PageCount; if (endNo > recentPageCount) endNo = recentPageCount; for (int i = startNo; i <= endNo; i++) { String pstyle = this.Current == i ? "currentPageNo" : "pageNo"; sb.AppendFormat( "{2} ", appendPage( recentLink, i, isHtml ), pstyle, i ); } // next if (this.Current + 1 > this.PageCount) { } else if (this.Current + 1 > recentPageCount) { int nextPage = this.PageCount - recentPageCount; sb.AppendFormat( "{1}> ", appendPage( archiveLink, nextPage, isHtml ), lang.get( "nextPage" ) ); } else { sb.AppendFormat( "{1}> ", appendPage( recentLink, this.Current + 1, isHtml ), lang.get( "nextPage" ) ); } sb.AppendFormat( "" + lang.get( "pageCount" ) + "", this.PageCount ); sb.Append( "
" ); return sb.ToString(); } private String appendPage( String url, int pageNumber, Boolean isHtml ) { if (isHtml) { return PageHelper.AppendHtmlNo( url, pageNumber ); } else { return PageHelper.AppendNo( url, pageNumber ); } } /// /// 存档数据列表的分页栏 /// /// 最近数据列表网址(不带页码) /// 存档数据列表网址(不带页码) /// 最近数据列表需要展示的页数 /// public String GetArchivePage( String recentLink, String archiveLink, int recentPageCount ) { return GetArchivePage( recentLink, archiveLink, recentPageCount, false ); } /// /// 存档数据列表的分页栏 /// /// 最近数据列表网址(不带页码) /// 存档数据列表网址(不带页码) /// 最近数据列表需要展示的页数 /// 是否html制作请求 /// public String GetArchivePage( String recentLink, String archiveLink, int recentPageCount, Boolean isHtml ) { StringBuilder sb = new StringBuilder(); sb.Append( "
" ); sb.AppendFormat( "«{1}", recentLink, lang.get( "firstPage" ) ); sb.Append( " " ); if (this.PageCount - this.Current <= recentPageCount) { int prevPage = this.PageCount - this.Current; sb.AppendFormat( "<{1}", appendPage( recentLink, prevPage, isHtml ), lang.get( "prevPage" ) ); sb.Append( " " ); } else { sb.AppendFormat( "<{1}", appendPage( archiveLink, this.Current + 1, isHtml ), lang.get( "prevPage" ) ); sb.Append( " " ); } if (this.Current > 1) { int nextPage = this.Current - 1; if (nextPage > 1) { sb.AppendFormat( "{1}>", appendPage( archiveLink, this.Current - 1, isHtml ), lang.get( "nextPage" ) ); sb.Append( " " ); sb.AppendFormat( "{1}»", appendPage( archiveLink, 1, isHtml ), lang.get( "lastPage" ) ); } else { sb.AppendFormat( "{1}>", appendPage( archiveLink, this.Current - 1, isHtml ), lang.get( "nextPage" ) ); } } sb.Append( "
" ); return sb.ToString(); } public static DataPage GetPage( List list, int pageSize ) { ObjectPage op = new ObjectPage(); if (pageSize <= 0) pageSize = 20; op.setSize( pageSize ); op.RecordCount = list.Count; // 计算页数 op.computePageCount(); // 矫正当前页码 int currentPageNumber = CurrentRequest.getCurrentPage(); op.setCurrent( currentPageNumber ); op.resetCurrent(); currentPageNumber = op.getCurrent(); // 得到结果集 List results = new List(); int start = (currentPageNumber - 1) * pageSize; int count = 1; for (int i = start; i < list.Count; i++) { if (count > pageSize) break; results.Add( list[i] ); count++; } // 填充分页数据 DataPage page = new DataPage(); page.Results = results; page.Current = currentPageNumber; page.Size = pageSize; page.RecordCount = list.Count; page.PageCount = op.PageCount; page.PageBar = op.PageBar; return page; } } }