ningshuxia
2023-02-07 d027501182b03a0c036af712a2b7f31d55144562
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
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 
{
    /// <summary>
    /// 分页控件
    /// </summary>
    public partial class PagerCtrl : XtraUserControl
    {
        public PagerCtrl()
        {
            InitializeComponent(); 
        }
 
        /// <summary>
        /// 查询分页数据事件
        /// </summary>
        /// 第一个参数为CurrentPage
        /// 第二个参数为PageSize
        /// 第三个参数为返回的总条数
        public event Func<int,int,Task<int>> QueryPageEvent;//返回总条数
 
        private int _pageSize = 40;//单页条数
        private int _pageIndex = 1;//当前页
        private int _total = 0;//总条数
        private int _pageNumber = 0;//总页数
 
        /// <summary>
        /// 被动查询
        /// </summary>
        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();
        }
 
    }
}