using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Windows.Forms; using DevExpress.XtraEditors; using DevExpress.Utils; using System.Threading.Tasks; namespace MFire.WinFrmUI { /// /// 分页控件 /// public partial class PagerCtrl : XtraUserControl { public PagerCtrl() { InitializeComponent(); } /// /// 查询分页数据事件 /// /// 第一个参数为CurrentPage /// 第二个参数为PageSize /// 第三个参数为返回的总条数 public event Func> QueryPageEvent;//返回总条数 private int _pageSize = 40;//单页条数 private int _pageIndex = 1;//当前页 private int _total = 0;//总条数 private int _pageNumber = 0;//总页数 /// /// 被动查询 /// public void PassiveQuery(bool reset=true) { if (reset) { _pageIndex = 1; } Query(); } //内部查询 private async void Query() { this.txtPageIndex.Text = _pageIndex.ToString(); if (this.QueryPageEvent != null) { _total =await this.QueryPageEvent(_pageIndex,_pageSize); _pageNumber = CalcuPageCount(_total, _pageSize); this.labTotal.Text = $"共 {_total} 条"; this.labPageCount.Text= $"共 {_pageNumber} 页"; if (_pageIndex >= _pageNumber) { this.btnNext.Enabled = false; this.btnLast.Enabled = false; } else { this.btnNext.Enabled = true; this.btnLast.Enabled = true; } if (_pageIndex <= 1) { this.btnPre.Enabled = false; this.btnFirst.Enabled = false; } else { this.btnPre.Enabled = true; this.btnFirst.Enabled = true; } } } //计算页数 private int CalcuPageCount(int total, int pageSize) { if (total % pageSize > 0) return total / pageSize + 1; return total / pageSize; } //首页 private void btnFirst_Click(object sender, EventArgs e) { _pageIndex = 1; Query(); } //上一页 private void btnPre_Click(object sender, EventArgs e) { _pageIndex--; Query(); } //下一页 private void btnNext_Click(object sender, EventArgs e) { _pageIndex++; Query(); } //末页 private void btnLast_Click(object sender, EventArgs e) { _pageIndex = _pageNumber; Query(); } //单页条数改变 private void imgCmbPageSize_SelectedIndexChanged(object sender, EventArgs e) { _pageSize = (int)this.imgCmbPageSize.EditValue; _pageNumber = CalcuPageCount(_total,_pageSize); if (_pageIndex > _pageNumber) _pageIndex = _pageNumber; Query(); } //跳转 private void btnGo_Click(object sender, EventArgs e) { _pageIndex = int.Parse(this.txtToPageIndex.Text); Query(); } } }