using NaiBa.Util.Extension; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace TemuKJD.UserControls { public partial class UcSplitPage : UserControl { /// /// 是否显示每页条数(启用每页条数功能) /// [Description("显示每页条数"), Category("UserProperty")] public bool IsShowPageSize { get { return this.cmbPageSize.Visible; } set { if (cmbPageSize.Visible != value) { this.lblPageSize.Visible = this.cmbPageSize.Visible = value; this.Invalidate(); } } } int maxPageSizeValue = 5000; /// /// 是否显示每页条数(启用每页条数功能) /// [Description("每页条数最大值"), Category("UserProperty")] public int MaxPageSizeValue { get { return maxPageSizeValue; } set { if (maxPageSizeValue != value) { maxPageSizeValue = value; foreach (var item in new string[] { "50", "100","200","500","1000","2000","5000" }) { if (item.ParseToInt() > maxPageSizeValue) this.cmbPageSize.Items.Remove(item); } this.Invalidate(); } } } /// /// 是否显示总条数 /// [Description("显示总条数"), Category("UserProperty")] public bool IsShowTotalCount { get { return this.lblTotal.Visible; } set { if (lblTotal.Visible != value) { this.lblTotal.Visible = value; this.Invalidate(); } } } long totalCount = 0; /// /// 总数量 /// [Description("总数量"), Category("UserProperty")] public long TotalCount { get { return totalCount; } set { if (totalCount != value && value >= 0) { totalCount = value; // 根据总数量和每页条数计算总页数 int pageSize = this.PageSize; if (pageSize > 0) { this.TotalPage = (int)Math.Ceiling((double)totalCount / pageSize); } else { this.TotalPage = 1; } Refresh(); } } } int totalPage = 1; public int TotalPage { get { return totalPage; } set { if (totalPage != value && value > 0) { totalPage = value; Refresh(); } } } int currentPage = 1; public int CurrentPage { get { return currentPage; } set { // 确保当前页不超过总页数 int newPage = Math.Max(1, Math.Min(totalPage, value)); if (currentPage != newPage) { currentPage = newPage; Refresh(); } OnPageChange(this); } } [Description("每页条数"), Category("UserProperty")] public int PageSize { get { int pageSize = 50; if (InvokeRequired) { Invoke(new Action(() => { pageSize = Math.Max(this.cmbPageSize.Text.ParseToInt(), 1); })); } else pageSize = Math.Max(this.cmbPageSize.Text.ParseToInt(), 1); return pageSize; } set { if (InvokeRequired) { Invoke(new Action(() => { if (this.cmbPageSize.Text.ParseToInt() != value) this.cmbPageSize.Text = value.ParseToString(); else this.cmbPageSize.Text = value.ParseToString(); })); } else { if (this.cmbPageSize.Text.ParseToInt() != value) this.cmbPageSize.Text = value.ParseToString(); else this.cmbPageSize.Text = value.ParseToString(); } // 当每页条数变化时,重新计算总页数 if (totalCount > 0) { this.TotalPage = (int)Math.Ceiling((double)totalCount / value); // 确保当前页不超过新的总页数 if (this.CurrentPage > this.TotalPage) { this.CurrentPage = this.TotalPage; } } //OnPageChange(this); } } public event Action PageChange; protected virtual void OnPageChange(object sender) { this.PageChange?.Invoke(sender); } public UcSplitPage() { InitializeComponent(); } private void pnlJump_Click(object sender, EventArgs e) { int page = this.txtJumpPage.Text.ParseToInt(); this.CurrentPage = Math.Max(1, page); } private void btnPrev_Click(object sender, EventArgs e) { int page = this.CurrentPage - 1; this.CurrentPage = Math.Max(1, page); } private void btnNext_Click(object sender, EventArgs e) { int page = this.CurrentPage + 1; this.CurrentPage = Math.Min(totalPage, page); } private void Refresh() { Invoke(new Action(() => { lblPage.Text = $"{currentPage}/{TotalPage}页"; lblTotal.Text = $"共{TotalCount}条"; })); } } }