using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Song.Extend { public class QuestionPagerItem { #region 属性 //不分页的最大值,例如小于200时不分页 private int _noPagerNum = 200; /// /// 不分页的最大值,例如小于200时不分页 /// public int NoPagerNum { get { return _noPagerNum; } set { _noPagerNum = value; } } //默认的每页多少记录 private int _pagerCount = 100; /// /// 默认的每页多少记录 /// public int PagerCount { get { return _pagerCount; } set { _pagerCount = value; } } //最多分多少页 private int _maxPager = 10; /// /// 最多分多少页 /// public int MaxPager { get{return _maxPager;} set { _maxPager = value; } } public int Index { get; set; } //当前项的起始索引 public int End { get; set; } //当前项的末尾索引 public int Size { get; set; } //当前项取多少记录 #endregion #region 构造函数 public QuestionPagerItem() { } /// /// /// /// 不分页的最大值,例如小于200时不分页 /// 默认的每页多少记录 /// 最多分多少页 public QuestionPagerItem(int nopagernum, int pagercount, int maxpager) { _noPagerNum = nopagernum; _pagerCount = pagercount; _maxPager = maxpager; } #endregion /// /// 创建分页对象 /// /// /// public List Builder(int sumCount) { List list = new List(); if (sumCount <= 0) { list.Add(new QuestionPagerItem() { Index = 0, End = sumCount, Size = sumCount }); return list; } //总数小于“不分页的最大值”,所以不用分页 if (sumCount <= _noPagerNum) { list.Add(new QuestionPagerItem() { Index = 1, End = sumCount, Size = sumCount }); return list; } //总数大于最大分页,需要重新计算每页多少条 if (sumCount >= _pagerCount * _maxPager) _pagerCount = sumCount / _maxPager; //总页数 int sumPager = sumCount % _pagerCount == 0 ? sumCount / _pagerCount : sumCount / _pagerCount + 1; for (int i = 0; i < sumPager; i++) { list.Add(new QuestionPagerItem() { Index = i * _pagerCount + 1, //End = i == sumPager - 1 ? i * _pagerCount + sumCount % _pagerCount : (i + 1) * _pagerCount, End = (i + 1) * _pagerCount, Size = _pagerCount }); } //计算最后一页的情况 if (sumPager > 1 && sumCount % _pagerCount > 0) { //如果最后一页题量较少,合并到前一个内容去 if (sumCount % _pagerCount <= _pagerCount / 2) { list.RemoveAt(list.Count - 1); list.Last().End = list.Last().End + sumCount % _pagerCount; } else { list.Last().End = list.Last().Index + sumCount % _pagerCount - 1; } } list.Last().Size = list.Last().End - list.Last().Index + 1; return list; } } }