效果如圖:
首先在項目中添加使用者控件:
使用者控件中添加屬性和系統方法,則會在控制台中可以更改屬性和添加控件事件,分頁控件這裡定義兩個屬性,每頁顯示記錄數和目前頁數,當改變目前頁數時,将觸發事件,代碼如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using DevComponents.DotNetBar.Controls;
using System.Data.SqlClient;
namespace BaseForm.UserControls
{
public partial class PageBar : UserControl
{
public event EventHandler PageChanged; //事件:控件的目前頁碼發生變更。
/// <summary>
/// PageBar分頁控件所關聯的DataGridView資料控件,當PageBar分頁控件執行DataBind()資料綁定
/// 方法時,PageBar分頁控件會自動将分頁後的資料,綁定給關聯的DataGridView控件進行顯示。
/// </summary>
public DataGridViewX DataControl //這裡因為使用了第三方界面控件DotNetBar, 是以為DataGridViewX
{
get;
set;
}
/// <summary>
/// PageBar分頁控件的資料源,資料源為資料實體層中所定義的PageData類型。
/// </summary>
public PageData DataSource
{
get;
set;
}
/// <summary>
/// 控件執行個體化方法
/// </summary>
public PageBar()
{
InitializeComponent();
}
/// <summary>
/// 進行資料綁定,将資料源中的IList類型資料,綁定給關聯的資料控件進行顯示。
/// </summary>
public void DataBind()
{
if (DataSource == null) return;
labNumber.Text= "共" + DataSource.RecordCount.ToString() + "條記錄,每頁" + DataSource.PageSize.ToString() + "條,共"+DataSource.PageCount.ToString()+"頁";//為使用者控件的Label指派
txtCurPage.Text= DataSource.CurPage.ToString();//目前頁數
DataControl.AutoGenerateColumns = false;
DataControl.DataSource = DataSource.PageList.Tables[0].DefaultView;//綁定DataGridiew
}
/// <summary>
/// 使用者單擊“首頁”按鈕時的事件處理方法。
/// </summary>
private void btnFirstPage_Click(object sender, EventArgs e)
{
CurPage = 1;
}
/// <summary>
/// 使用者單擊“上一頁”按鈕時的事件處理方法。
/// </summary>
private void btnPrePage_Click(object sender, EventArgs e)
{
CurPage = DataSource.PrevPage;
}
/// <summary>
/// 使用者單擊“下一頁”按鈕時的事件處理方法。
/// </summary>
private void btnNextPage_Click(object sender, EventArgs e)
{
CurPage = DataSource.NextPage;
}
/// <summary>
/// 使用者單擊“最後一頁”按鈕時的事件處理方法。
/// </summary>
private void btnLastPage_Click(object sender, EventArgs e)
{
CurPage = DataSource.PageCount;
}
#region PageBar控件的相關變量及屬性定義
private int pageSize;
private int curPage;
/// <summary>
/// 每頁顯示記錄數。
/// </summary>
public int PageSize
{
get
{
if (pageSize <= 0)
{
pageSize = 10;
}
return pageSize;
}
set
{
pageSize = value;
}
}
/// <summary>
/// 目前頁數
/// </summary>
public int CurPage
{
get
{
if (curPage <= 0)
{
curPage = 1;
}
return curPage;
}
set
{
curPage = value;
if (PageChanged != null)
{
PageChanged(this, null);//觸發當件頁碼變更事件。
}
}
}
#endregion
}
}
PageData類是使用者控件需要指派的一些屬性,即資料實體層,代碼如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.Data;
namespace BaseForm.UserControls
{
/// <summary>
/// 對象名稱:資料分頁實體類(資料實體層)
/// 對象說明:主要用于資料通路層與使用者界面層中的PageBar分頁控件進行資料互動。
/// </summary>
public class PageData
{
/// <summary>
/// [屬性]分頁過後的資料。
/// </summary>
public DataSet PageList
{
get;
set;
}
/// <summary>
/// [屬性]每頁顯示記錄數。
/// </summary>
public int PageSize
{
get;
set;
}
/// <summary>
/// [屬性]所請求的目前頁數。
/// </summary>
public int CurPage
{
get;
set;
}
/// <summary>
/// [屬性]總頁數。
/// </summary>
public int PageCount
{
get;
set;
}
/// <summary>
/// [屬性]總記錄數。
/// </summary>
public int RecordCount
{
get;
set;
}
/// <summary>
/// [屬性]相對于目前頁的上一頁
/// </summary>
public int PrevPage
{
get
{
if (CurPage > 1)
{
return CurPage - 1;
}
return 1;
}
}
/// <summary>
/// [屬性]相對于目前頁的下一頁
/// </summary>
public int NextPage
{
get
{
if (CurPage < PageCount)
{
return CurPage + 1;
}
return PageCount;
}
}
}
}
下面是資料通路層代碼:
/// <summary>
/// 傳回資料清單
/// </summary>
/// <param name="intSta">起始位置</param>
/// <param name="intNum">資料個數</param>
public DataSet GetList(int intSta, int intNum)
{
using (SqlConnection sqlConnection = GetNewConnection())
{
string sqlText = "select * from [OfficeRibbon] order by id desc";
SqlDataAdapter adapter = new SqlDataAdapter(sqlText, sqlConnection);
DataSet dataset = new DataSet();
adapter.Fill(dataset, intSta, intNum, "datasource");
return dataset;
}
}
/// <summary>
/// 傳回分頁資料
/// </summary>
public PageData GetPageList(int pageSize, int curPage)
{
PageData pageData = new PageData();
pageData.PageSize = pageSize;
pageData.CurPage = curPage;
pageData.RecordCount = ExecuteScalar();
pageData.PageCount = 1;
if (pageData.RecordCount > 0)
pageData.PageCount = Convert.ToInt32(Math.Ceiling((double)pageData.RecordCount / (double)pageSize));
pageData.PageList = GetList((curPage - 1) * pageSize, pageSize);
return pageData;
}
然後編譯生成,在工具箱裡就出現了使用者控件,我們可以直接拖一個DatagridView控件和PageBar使用者控件在窗體上引用的代碼為:
public partial class EditFrm : Office2007Form
{
public EditFrm()
{
InitializeComponent();
BindDataGrid();
}
/// <summary>
/// 對DataGridView控件的資料源進行綁定。
/// </summary>
public void BindDataGrid()
{
OfficeRibbonBLL officeRibbonBll = new OfficeRibbonBLL();
pageBar1.DataControl = dataGridView;
pageBar1.DataSource = officeRibbonBll.GetPageList(pageBar1.PageSize,pageBar1.CurPage);
pageBar1.DataBind();
}
private void pageBar1_PageChanged(object sender, EventArgs e)
{
BindDataGrid(); //重新對DataGridView控件的資料源進行綁定。
}
}