Windows Forms 分頁控件
開發WinForm項目中自己寫的一個分頁控件,沒有什么技術含量,不過自己感覺還是蠻好用的,拿出來和大家分享一下。
一、使用到的WinForm控件有連個toolStrip和一個imageList, imageList主要負責保存四個翻頁的小圖片,
![]()
二、分頁控件工作原理
1.首先讓控件繼承UserControl, INotifyPropertyChanged,繼承INotifyPropertyChanged,主要是實現當用戶點擊翻頁或者更改文本框里的數字,那么當前列表自動更新信息,如果要做成點擊按鈕翻頁可以直接寫個委托來定義一個事件就可以了,這里這么實現也是為了操作方便。
實現代碼:
三、調用方法
在列表頁面的調用方法:
綁定列表信息:
winFromPager1.StartIndex:開始索引
winFromPager1.EndIndex: 結束索引
strWhere.ToString(): 查詢條件
分頁事件:
![]()
一、使用到的WinForm控件有連個toolStrip和一個imageList, imageList主要負責保存四個翻頁的小圖片,
二、分頁控件工作原理
1.首先讓控件繼承UserControl, INotifyPropertyChanged,繼承INotifyPropertyChanged,主要是實現當用戶點擊翻頁或者更改文本框里的數字,那么當前列表自動更新信息,如果要做成點擊按鈕翻頁可以直接寫個委托來定義一個事件就可以了,這里這么實現也是為了操作方便。
實現代碼:
public partial class WinFromPager : UserControl, INotifyPropertyChanged
{
}
2. 定義事件模型,實際上時定義一個在列表頁面執行翻頁的事件{
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
3. 定義屬性protected virtual void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
private int _mixPage = 1;
private int _maxPage = 1;
private int _currentPage = 1;
private int _RecordCount = 0;
private int _pageSize = 20;
private string _lblPageInfo = " 當前頁({0})/總共({1})頁,共({2})條記錄,每頁({3})條";
private int _maxPage = 1;
private int _currentPage = 1;
private int _RecordCount = 0;
private int _pageSize = 20;
private string _lblPageInfo = " 當前頁({0})/總共({1})頁,共({2})條記錄,每頁({3})條";
/// <sumary>
/// 第一頁索引值
/// </summary>
public int MixPage
{
get
{
return _mixPage;
}
set
{
_mixPage = value;
}
}
/// <summary>
/// 總頁數
/// </summary>
public int MaxPage
{
get
{
return _maxPage;
}
set
{
_maxPage = value;
}
}
/// <summary>
/// 當前頁索引
/// </summary>
public int CurrentPage
{
get
{
return this._currentPage;
}
set
{
this._currentPage = value;
}
}
/// <summary>
/// 每頁顯示記錄數
/// </summary>
public int PageSize
{
get
{
return this._pageSize;
}
set
{
this._pageSize = value;
}
}
/// <summary>
/// 開始索引
/// </summary>
public int StartIndex
{
get
{
return ((CurrentPage - 1) * PageSize) + 1;
}
}
/// <summary>
/// 結束索引
/// </summary>
public int EndIndex
{
get
{
if ((RecordCount - ((CurrentPage - 1) * PageSize)) >= PageSize)
{
return CurrentPage* PageSize;
}
else
{
return RecordCount;
}
}
}
/// <summary>
/// 總記錄
/// </summary>
public int RecordCount
{
set
{
_RecordCount = value;
GetPageCount();
}
get
{
return _RecordCount;
}
}
/// <summary>
/// 查詢當前索引頁
/// </summary>
public int CurrentIndex
{
set
{
this._currentPage = value;
this.lblCurrectPage.Text = _mixPage.ToString();
}
}
4. 顯示頁面分頁信息/// 第一頁索引值
/// </summary>
public int MixPage
{
get
{
return _mixPage;
}
set
{
_mixPage = value;
}
}
/// <summary>
/// 總頁數
/// </summary>
public int MaxPage
{
get
{
return _maxPage;
}
set
{
_maxPage = value;
}
}
/// <summary>
/// 當前頁索引
/// </summary>
public int CurrentPage
{
get
{
return this._currentPage;
}
set
{
this._currentPage = value;
}
}
/// <summary>
/// 每頁顯示記錄數
/// </summary>
public int PageSize
{
get
{
return this._pageSize;
}
set
{
this._pageSize = value;
}
}
/// <summary>
/// 開始索引
/// </summary>
public int StartIndex
{
get
{
return ((CurrentPage - 1) * PageSize) + 1;
}
}
/// <summary>
/// 結束索引
/// </summary>
public int EndIndex
{
get
{
if ((RecordCount - ((CurrentPage - 1) * PageSize)) >= PageSize)
{
return CurrentPage* PageSize;
}
else
{
return RecordCount;
}
}
}
/// <summary>
/// 總記錄
/// </summary>
public int RecordCount
{
set
{
_RecordCount = value;
GetPageCount();
}
get
{
return _RecordCount;
}
}
/// <summary>
/// 查詢當前索引頁
/// </summary>
public int CurrentIndex
{
set
{
this._currentPage = value;
this.lblCurrectPage.Text = _mixPage.ToString();
}
}
/// <summary>
/// 顯示頁面分頁信息
/// </summary>
private void GetPageCount()
{
if (RecordCount == 0)
{
MaxPage = 1;
}
else
{
if (this.RecordCount % PageSize == 0)
{
MaxPage = this.RecordCount / PageSize;
}
else
{
MaxPage = this.RecordCount / PageSize + 1;
}
}
if (this.CurrentPage == MixPage)
{
this.First.Enabled = false;
this.Pre.Enabled = false;
if (RecordCount <= PageSize)
{
this.Next.Enabled = false;
this.Last.Enabled = false;
}
else
{
this.Next.Enabled = true;
this.Last.Enabled = true;
}
}
this.lblPageInfo.Text = string.Format(_lblPageInfo, this.CurrentPage, MaxPage.ToString(), RecordCount.ToString(), PageSize.ToString());
this.lblMaxPage.Text = "/" + MaxPage;
this.lblCurrectPage.Text = CurrentPage.ToString();
}
5. 定義事件/// 顯示頁面分頁信息
/// </summary>
private void GetPageCount()
{
if (RecordCount == 0)
{
MaxPage = 1;
}
else
{
if (this.RecordCount % PageSize == 0)
{
MaxPage = this.RecordCount / PageSize;
}
else
{
MaxPage = this.RecordCount / PageSize + 1;
}
}
if (this.CurrentPage == MixPage)
{
this.First.Enabled = false;
this.Pre.Enabled = false;
if (RecordCount <= PageSize)
{
this.Next.Enabled = false;
this.Last.Enabled = false;
}
else
{
this.Next.Enabled = true;
this.Last.Enabled = true;
}
}
this.lblPageInfo.Text = string.Format(_lblPageInfo, this.CurrentPage, MaxPage.ToString(), RecordCount.ToString(), PageSize.ToString());
this.lblMaxPage.Text = "/" + MaxPage;
this.lblCurrectPage.Text = CurrentPage.ToString();
}
//首頁
private void First_Click(object sender, EventArgs e)
{
this.CurrentPage = MixPage;
this.lblPageInfo.Text = string.Format(_lblPageInfo, this.CurrentPage, MaxPage.ToString(), RecordCount.ToString(), PageSize.ToString());
this.lblMaxPage.Text = "/" + MaxPage;
this.lblCurrectPage.Text = CurrentPage.ToString();
this.First.Enabled = false;
this.Pre.Enabled = false;
this.Next.Enabled = true;
this.Last.Enabled = true;
OnPropertyChanged("CurrentPage");
}
//上一頁
private void Pre_Click(object sender, EventArgs e)
{
this.CurrentPage = this.CurrentPage - 1;
this.lblPageInfo.Text = string.Format(_lblPageInfo, this.CurrentPage, MaxPage.ToString(), RecordCount.ToString(), PageSize.ToString());
this.lblMaxPage.Text = "/" + MaxPage;
this.lblCurrectPage.Text = CurrentPage.ToString();
if (this.CurrentPage == this.MixPage)
{
this.First.Enabled = false;
this.Pre.Enabled = false;
this.Next.Enabled = true;
this.Last.Enabled = true;
}
else
{
this.First.Enabled = true;
this.Pre.Enabled = true;
this.Next.Enabled = true;
this.Last.Enabled = true;
}
OnPropertyChanged("CurrentPage");
}
//下一頁
private void Next_Click(object sender, EventArgs e)
{
this.CurrentPage = this.CurrentPage + 1;
this.lblPageInfo.Text = string.Format(_lblPageInfo, this.CurrentPage, MaxPage.ToString(), RecordCount.ToString(), PageSize.ToString());
this.lblMaxPage.Text = "/" + MaxPage;
this.lblCurrectPage.Text = CurrentPage.ToString();
if (this.CurrentPage == MaxPage)
{
this.First.Enabled = true;
this.Pre.Enabled = true;
this.Next.Enabled = false;
this.Last.Enabled = false;
}
else
{
this.First.Enabled = true;
this.Pre.Enabled = true;
this.Next.Enabled = true;
this.Last.Enabled = true;
}
OnPropertyChanged("CurrentPage");
}
//末頁
private void Last_Click(object sender, EventArgs e)
{
this.CurrentPage = MaxPage;
this.lblPageInfo.Text = string.Format(_lblPageInfo, this.CurrentPage, MaxPage.ToString(), RecordCount.ToString(), PageSize.ToString());
this.lblMaxPage.Text = "/" + MaxPage;
this.lblCurrectPage.Text = CurrentPage.ToString();
this.First.Enabled = true;
this.Pre.Enabled = true;
this.Next.Enabled = false;
this.Last.Enabled = false;
OnPropertyChanged("CurrentPage");
}
private void lblCurrectPage_TextChanged(object sender, EventArgs e)
{
if (!String.IsNullOrEmpty(lblCurrectPage.Text))
{
this.CurrentPage = int.Parse(lblCurrectPage.Text);
}
else
{
this.CurrentPage = MixPage;
}
this.lblPageInfo.Text = string.Format(_lblPageInfo, this.CurrentPage, MaxPage.ToString(), RecordCount.ToString(), PageSize.ToString());
this.lblMaxPage.Text = "/" + MaxPage;
this.lblCurrectPage.Text = CurrentPage.ToString();
if (this.CurrentPage == this.MaxPage)
{
this.First.Enabled = true;
this.Pre.Enabled = true;
this.Next.Enabled = false;
this.Last.Enabled = false;
}
else if (this.CurrentPage == this.MixPage)
{
this.First.Enabled = false;
this.Pre.Enabled = false;
this.Next.Enabled = true;
this.Last.Enabled = true;
}
else
{
this.First.Enabled = true;
this.Pre.Enabled = true;
this.Next.Enabled = true;
this.Last.Enabled = true;
}
if (this.lblCurrectPage.Text != "")
{
if (int.Parse(this.lblCurrectPage.Text) > MaxPage)
{
MessageBox.Show("不存在輸入頁碼數據!", "輸入信息錯誤", MessageBoxButtons.OK, MessageBoxIcon.Information);
this.lblCurrectPage.Text = MixPage.ToString();
this.First.Enabled = false;
this.Pre.Enabled = false;
this.Next.Enabled = false;
this.Last.Enabled = false;
}
}
OnPropertyChanged("CurrentPage");
}
private void lblCurrectPage_KeyPress(object sender, KeyPressEventArgs e)
{
if ((e.KeyChar != 8 && !char.IsDigit(e.KeyChar)) && e.KeyChar != 13)//文本框里只能輸入數字
{
e.Handled = true;
}
}
控件基本完成。private void First_Click(object sender, EventArgs e)
{
this.CurrentPage = MixPage;
this.lblPageInfo.Text = string.Format(_lblPageInfo, this.CurrentPage, MaxPage.ToString(), RecordCount.ToString(), PageSize.ToString());
this.lblMaxPage.Text = "/" + MaxPage;
this.lblCurrectPage.Text = CurrentPage.ToString();
this.First.Enabled = false;
this.Pre.Enabled = false;
this.Next.Enabled = true;
this.Last.Enabled = true;
OnPropertyChanged("CurrentPage");
}
//上一頁
private void Pre_Click(object sender, EventArgs e)
{
this.CurrentPage = this.CurrentPage - 1;
this.lblPageInfo.Text = string.Format(_lblPageInfo, this.CurrentPage, MaxPage.ToString(), RecordCount.ToString(), PageSize.ToString());
this.lblMaxPage.Text = "/" + MaxPage;
this.lblCurrectPage.Text = CurrentPage.ToString();
if (this.CurrentPage == this.MixPage)
{
this.First.Enabled = false;
this.Pre.Enabled = false;
this.Next.Enabled = true;
this.Last.Enabled = true;
}
else
{
this.First.Enabled = true;
this.Pre.Enabled = true;
this.Next.Enabled = true;
this.Last.Enabled = true;
}
OnPropertyChanged("CurrentPage");
}
//下一頁
private void Next_Click(object sender, EventArgs e)
{
this.CurrentPage = this.CurrentPage + 1;
this.lblPageInfo.Text = string.Format(_lblPageInfo, this.CurrentPage, MaxPage.ToString(), RecordCount.ToString(), PageSize.ToString());
this.lblMaxPage.Text = "/" + MaxPage;
this.lblCurrectPage.Text = CurrentPage.ToString();
if (this.CurrentPage == MaxPage)
{
this.First.Enabled = true;
this.Pre.Enabled = true;
this.Next.Enabled = false;
this.Last.Enabled = false;
}
else
{
this.First.Enabled = true;
this.Pre.Enabled = true;
this.Next.Enabled = true;
this.Last.Enabled = true;
}
OnPropertyChanged("CurrentPage");
}
//末頁
private void Last_Click(object sender, EventArgs e)
{
this.CurrentPage = MaxPage;
this.lblPageInfo.Text = string.Format(_lblPageInfo, this.CurrentPage, MaxPage.ToString(), RecordCount.ToString(), PageSize.ToString());
this.lblMaxPage.Text = "/" + MaxPage;
this.lblCurrectPage.Text = CurrentPage.ToString();
this.First.Enabled = true;
this.Pre.Enabled = true;
this.Next.Enabled = false;
this.Last.Enabled = false;
OnPropertyChanged("CurrentPage");
}
private void lblCurrectPage_TextChanged(object sender, EventArgs e)
{
if (!String.IsNullOrEmpty(lblCurrectPage.Text))
{
this.CurrentPage = int.Parse(lblCurrectPage.Text);
}
else
{
this.CurrentPage = MixPage;
}
this.lblPageInfo.Text = string.Format(_lblPageInfo, this.CurrentPage, MaxPage.ToString(), RecordCount.ToString(), PageSize.ToString());
this.lblMaxPage.Text = "/" + MaxPage;
this.lblCurrectPage.Text = CurrentPage.ToString();
if (this.CurrentPage == this.MaxPage)
{
this.First.Enabled = true;
this.Pre.Enabled = true;
this.Next.Enabled = false;
this.Last.Enabled = false;
}
else if (this.CurrentPage == this.MixPage)
{
this.First.Enabled = false;
this.Pre.Enabled = false;
this.Next.Enabled = true;
this.Last.Enabled = true;
}
else
{
this.First.Enabled = true;
this.Pre.Enabled = true;
this.Next.Enabled = true;
this.Last.Enabled = true;
}
if (this.lblCurrectPage.Text != "")
{
if (int.Parse(this.lblCurrectPage.Text) > MaxPage)
{
MessageBox.Show("不存在輸入頁碼數據!", "輸入信息錯誤", MessageBoxButtons.OK, MessageBoxIcon.Information);
this.lblCurrectPage.Text = MixPage.ToString();
this.First.Enabled = false;
this.Pre.Enabled = false;
this.Next.Enabled = false;
this.Last.Enabled = false;
}
}
OnPropertyChanged("CurrentPage");
}
private void lblCurrectPage_KeyPress(object sender, KeyPressEventArgs e)
{
if ((e.KeyChar != 8 && !char.IsDigit(e.KeyChar)) && e.KeyChar != 13)//文本框里只能輸入數字
{
e.Handled = true;
}
}
三、調用方法
在列表頁面的調用方法:
綁定列表信息:
private void Bind()
{
DataList.DataBoxList(dataGridView1, winFromPager1.StartIndex, winFromPager1.EndIndex, strWhere.ToString());
}
dataGridView1:綁定列表控件名稱{
DataList.DataBoxList(dataGridView1, winFromPager1.StartIndex, winFromPager1.EndIndex, strWhere.ToString());
}
winFromPager1.StartIndex:開始索引
winFromPager1.EndIndex: 結束索引
strWhere.ToString(): 查詢條件
分頁事件:
private void winFromPager1_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
Bind(); //綁定列表
}
效果圖:{
Bind(); //綁定列表
}

浙公網安備 33010602011771號