CloudBuilder/CloudBuilder.Gui/GridViewPagination.cs
owenchen 1c0c83af5f ow
2026-05-12 10:09:31 +08:00

221 lines
6.1 KiB
C#

using CloudBuilder.Core.Service;
using Krypton.Toolkit;
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 CloudBuilder.Gui
{
public partial class GridViewPagination : UserControl
{
public event Action OnPaginationChanged;
public event Action OnPrint;
public int Limit { get; set; } = new AbstractSearchCriteria().limit;
private int OrgLimit;
public int CurrentPage { get; set; } = 0;
public int Page { get; set; } = 0;
public int Total { get; set; } = 0;
public GridViewPagination()
{
InitializeComponent();
firstPageBut.Enabled = false;
movePreviousBut.Enabled = false;
moveNextBut.Enabled = false;
moveLastBut.Enabled = false;
printBut.Enabled = false;
}
public void SetLimit(int limit)
{
if (OrgLimit == 0) OrgLimit = limit;
limitTxt.Text = limit.ToString();
Limit = limit;
}
public void SetTotal(int total)
{
this.Total = total;
if (Limit > 0)
this.Page = Convert.ToInt32(Math.Ceiling(total * 1.0 / Limit));
else
this.Page = 1;
if (total > 0 && CurrentPage == 0) CurrentPage = 1;
else if (total == 0) CurrentPage = 0;
totalRecordLabel.Text = Total.ToString();
startPageLabel.Text = string.Format("{0} / {1}", CurrentPage, Page);
if (total < 0) return;
else if (total == 0)
{
firstPageBut.Enabled = false;
movePreviousBut.Enabled = false;
moveNextBut.Enabled = false;
moveLastBut.Enabled = false;
printBut.Enabled = false;
}
else if (CurrentPage == 1)
{
firstPageBut.Enabled = false;
movePreviousBut.Enabled = false;
printBut.Enabled = true;
if (Page > CurrentPage)
{
moveNextBut.Enabled = true;
moveLastBut.Enabled = true;
}
else
{
moveNextBut.Enabled = false;
moveLastBut.Enabled = false;
}
}
else if (CurrentPage == Page)
{
moveNextBut.Enabled = false;
moveLastBut.Enabled = false;
printBut.Enabled = true;
if (Page > 1)
{
firstPageBut.Enabled = true;
movePreviousBut.Enabled = true;
}
else
{
firstPageBut.Enabled = false;
movePreviousBut.Enabled = false;
}
}
else
{
firstPageBut.Enabled = true;
movePreviousBut.Enabled = true;
moveNextBut.Enabled = true;
moveLastBut.Enabled = true;
printBut.Enabled = true;
}
}
public void Reset()
{
this.Limit = OrgLimit > 0 ? OrgLimit : new AbstractSearchCriteria().limit;
this.CurrentPage = 1;
this.limitTxt.Text = this.Limit.ToString();
SetTotal(0);
}
private void limitTxt_Validated(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(this.limitTxt.Text))
{
this.Limit = 0;
this.CurrentPage = 1;
LimitChanged(this.Limit);
return;
}
if (!int.TryParse(limitTxt.Text, out int limit)) return;
if (this.Limit == limit) return;
this.Limit = limit;
this.CurrentPage = 1;
LimitChanged(this.Limit);
}
public void LimitChanged(int limit)
{
OnPaginationChanged?.Invoke();
}
public void FirstPageChanged()
{
this.CurrentPage = 1;
OnPaginationChanged?.Invoke();
}
public void MovePreviousChanged()
{
if (this.CurrentPage - 1 < 0)
{
return;
}
this.CurrentPage -= 1;
OnPaginationChanged?.Invoke();
}
public void MoveNextChanged()
{
if (this.CurrentPage + 1 > this.Page)
{
return;
}
this.CurrentPage += 1;
OnPaginationChanged?.Invoke();
}
public void MoveLastChanged()
{
this.CurrentPage = this.Page;
OnPaginationChanged?.Invoke();
}
public void Print()
{
OnPrint?.Invoke();
// 可以使用limit做其他处理
}
private void firstPageBut_Click(object sender, EventArgs e)
{
FirstPageChanged();
}
private void movePreviousBut_Click(object sender, EventArgs e)
{
MovePreviousChanged();
}
private void moveNextBut_Click(object sender, EventArgs e)
{
MoveNextChanged();
}
private void moveLastBut_Click(object sender, EventArgs e)
{
MoveLastChanged();
}
private void printBut_Click(object sender, EventArgs e)
{
Print();
}
private void limitTxt_KeyPress(object sender, KeyPressEventArgs e)
{
// 允许数字、控制字符(退格、删除等) 》》》》负号(如果需要负数) && e.KeyChar != '-'
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
{
e.Handled = true;
}
// 只允许一个负号,且必须在开头
//if (e.KeyChar == '-' && ((KryptonTextBox)sender).Text.IndexOf('-') >= 0)
//{
// e.Handled = true;
//}
}
}
}