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();
}
}
}