winform自定義分頁
阿新 • • 發佈:2019-02-16
使用bindingNavigator和bindingSource1自定義分頁元件,實現分頁
/// <summary> /// 委託 /// </summary> /// <param name="e"></param> /// <returns></returns> public delegate int EventPagingHandler(EventPagingArg e); public partial class pageControl : UserControl { public pageControl() { InitializeComponent(); } public event EventPagingHandler EventPaging; private object _sourceobj;//資料來源 public object Sourceobj { get { return _sourceobj; } set { _sourceobj = value; } } //每頁記錄數 private int _pageSize = 5; public int PageSize { get { return _pageSize; } set { _pageSize = value; GetPageCount(); } } //總記錄數 private int _PageTotalNum = 0; public int PageTotalNum { get { return _PageTotalNum; } set { _PageTotalNum = value; GetPageCount(); } } //頁數=總數/每頁記錄數 private int _pageCount = 0; public int PageCount { get { return _pageCount; } set { _pageCount = value; } } //當前頁 private int _pageCurrent = 0; public int PageCurrent { get { return _pageCurrent; } set { _pageCurrent = value; } } //頁數 private void GetPageCount() { if (this.PageTotalNum > 0) { this.PageCount = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(this.PageTotalNum) / Convert.ToDouble(this.PageSize))); } else { this.PageCount = 0; } } //繫結源 public void Bind() { if (this.Sourceobj != null) { //繫結資料來源 this.bindingSource1.DataSource = this.Sourceobj; this.bindingNavigator1.BindingSource = this.bindingSource1; } this.FirstItem.Enabled = true; this.PreviousItem.Enabled = true; this.NextItem.Enabled = true; this.LastItem.Enabled = true; if (this.EventPaging != null) { //通過委託事件方法,觸發引用窗體繫結方法獲取 this.PageTotalNum = this.EventPaging(new EventPagingArg()); } if (this.PageCurrent > this.PageTotalNum) { this.PageCurrent = this.PageTotalNum; } if (this.PageCount == 1) { this.PageCurrent = 1; } if (PageCurrent == 1) { this.FirstItem.Enabled = false; this.PreviousItem.Enabled = false; } if (PageCurrent == PageCount) { this.NextItem.Enabled = false; this.LastItem.Enabled = false; } if (this.PageTotalNum == 0) { this.FirstItem.Enabled = false; this.PreviousItem.Enabled = false; this.NextItem.Enabled = false; this.LastItem.Enabled = false; } this.TextPositionItem.Text = PageCurrent.ToString(); this.TextPositionItem.Enabled = true; this.labelCountItem.Text = "共 " + PageCount + " 頁"; this.labelCountItem.Enabled = false; } //首頁 private void FirstItem_Click(object sender, EventArgs e) { PageCurrent = 1; this.Bind(); } //上一頁 private void PreviousItem_Click(object sender, EventArgs e) { PageCurrent--; if (PageCurrent <= 0) { PageCurrent = 1; } this.Bind(); } //下一頁 private void NextItem_Click(object sender, EventArgs e) { this.PageCurrent++; if (PageCurrent > PageCount) { PageCurrent = PageCount; } this.Bind(); } //尾頁 private void LastItem_Click(object sender, EventArgs e) { PageCurrent = PageCount; this.Bind(); } } /// <summary> /// 自定義事件資料基類(當前頁數?) /// </summary> public class EventPagingArg : EventArgs { public EventPagingArg() { } }
生成元件後,拖到使用的窗體
public partial class Form2 : Form { DataTable dtpage; public Form2() { InitializeComponent(); } private void Form2_Load(object sender, EventArgs e) { this.pageControl1.PageCurrent = 1; pageControl1.PageSize = 10; this.pageControl1.Bind(); } /// <summary> /// 分頁控制元件事件 /// </summary> /// <param name="e"></param> /// <returns></returns> private int pageControl1_EventPaging(EventPagingArg e) { return BindView(); } //VIEW資料來源繫結,並返回資料總條數 private int BindView() { dtpage = getdtByNum(pageControl1.PageCurrent, pageControl1.PageSize); this.pageControl1.Sourceobj = dtpage; this.dataGridView1.DataSource = dtpage; return 100; } //每頁源 public DataTable getdtByNum(int pageNum, int pageSize) { DataTable dt = new DataTable(); dt.Columns.Add("ID", typeof(string)); dt.Columns.Add("NAME", typeof(string)); for (int i = (pageNum - 1) * pageSize; i < pageSize * pageNum; i++) { DataRow dr = dt.NewRow(); dr["ID"] = i; dr["NAME"] = "第" + i + "行"; dt.Rows.Add(dr); } return dt; } }
附程式碼例項下載:http://download.csdn.net/detail/sky08050025/9729815