
分頁效果如上圖所示,用到的控件均為基本控件 ,其方法如下
右擊項目-添加-新建項 選擇用戶控件 然后在用戶控件中拖入所需要的Label,Button,Text

用戶控件全部代碼:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace One.UI { public partial class PagerControl : UserControl { public PagerControl() { InitializeComponent(); } #region 分頁字段和屬性 private int pageIndex = 1; /// <summary> /// 當前頁數 /// </summary> public virtual int PageIndex { get { return pageIndex; } set { pageIndex = value; } } private int pageSize = 100; /// <summary> /// 每頁記錄數 /// </summary> public virtual int PageSize { get { return pageSize; } set { pageSize = value; } } private int recordCount = 0; /// <summary> /// 總記錄數 /// </summary> public virtual int RecordCount { get { return recordCount; } set { recordCount = value; } } private int pageCount = 0; /// <summary> /// 總頁數 /// </summary> public int PageCount { get { if (pageSize != 0) { pageCount = GetPageCount(); } return pageCount; } } #endregion #region 頁碼變化時觸發事件 public event EventHandler OnPageChanged; #endregion #region 分頁及相關事件功能實現 /// <summary> /// 設窗體控件全部可用 /// </summary> private void SetFormCtrEnabled() { linkFirst.Enabled = true; linkPrevious.Enabled = true; linkNext.Enabled = true; linkLast.Enabled = true; } /// <summary> /// 計算總頁數 /// </summary> /// <returns></returns> private int GetPageCount() { if (PageSize == 0) { return 0; } int pageCount = RecordCount / PageSize; if (RecordCount % PageSize == 0) { pageCount = RecordCount / PageSize; } else { pageCount = RecordCount / PageSize + 1; } return pageCount; } /// <summary> /// 用於客戶端調用 /// </summary> public void DrawControl(int count) { recordCount = count; DrawControl(false); } /// <summary> /// 根據不同的條件,改變頁面控件的呈現狀態 /// </summary> private void DrawControl(bool callEvent) { txtCurrentPage.Text = PageIndex.ToString();//當前頁 lblPageCount.Text = PageCount.ToString();//總頁數 lblTotalCount.Text = RecordCount.ToString();//總記錄數 txtPageSize.Text = PageSize.ToString();//每頁記錄數 if (callEvent && OnPageChanged != null) { OnPageChanged(this, null);//當前分頁數字改變時,觸發委托事件 } SetFormCtrEnabled(); if (PageCount == 1)//有且僅有一頁時 { linkFirst.Enabled = false; linkPrevious.Enabled = false; linkNext.Enabled = false; linkLast.Enabled = false; } else if (PageIndex == 1)//當前頁為第一頁時 { linkFirst.Enabled = false; linkPrevious.Enabled = false; } else if (PageIndex == PageCount)//當前頁為最后一頁時 { linkNext.Enabled = false; linkLast.Enabled = false; } } #endregion #region 相關控件事件 //首頁按鈕 private void linkFirst_Click(object sender, EventArgs e) { PageIndex = 1; DrawControl(true); } //上一頁按鈕 private void linkPrevious_Click(object sender, EventArgs e) { PageIndex = Math.Max(1, PageIndex - 1); DrawControl(true); } //下一頁按鈕 private void linkNext_Click(object sender, EventArgs e) { PageIndex = Math.Min(PageCount, PageIndex + 1); DrawControl(true); } //尾頁按鈕 private void linkLast_Click(object sender, EventArgs e) { PageIndex = PageCount; DrawControl(true); } /// <summary> /// 按下enter鍵,執行跳轉頁面功能 /// </summary> private void txtPageNum_KeyPress(object sender, KeyPressEventArgs e) { int num = 0; if (int.TryParse(txtCurrentPage.Text.Trim(), out num) && num > 0) { PageIndex = num; DrawControl(true); } } /// <summary> /// 跳轉頁數限制 /// </summary> private void txtCurrentPage_TextChanged(object sender, EventArgs e) { int num = 0; if (int.TryParse(txtCurrentPage.Text.Trim(), out num) && num > 0) { //TryParse 函數,將字符串轉換成等效的整數,返回bool型,判斷是否轉換成功。 //輸入除數字以外的字符是轉換不成功的 if (num > PageCount) //輸入數量大於最大頁數時,文本框自動顯示最大頁數 { txtCurrentPage.Text = PageCount.ToString(); } } } #endregion bool isTextChanged = false; /// <summary> /// 每頁顯示的記錄數改變時 /// </summary> private void txtPageSize_TextChanged(object sender, EventArgs e) { int num = 0; //輸入不符合規范時,默認設置為100 if (!int.TryParse(txtPageSize.Text.Trim(), out num) || num <= 0) { num = 100; txtPageSize.Text = "100"; } else { isTextChanged = true; } pageSize = num; } /// <summary> /// 光標離開 每頁設置文本框時,顯示到首頁 private void txtPageSize_Leave(object sender, EventArgs e) { if (isTextChanged) { isTextChanged = false; linkFirst_Click(null, null); } } } }
用戶控件完成后,生成解決方案就會在左側工具欄中看到剛寫好的分頁控件,拖入到需要分頁的窗體中賦值調用即可;
在窗體加載事件中激活分頁控件方法
private void OneForm_Load(object sender, EventArgs e) { ShowData(); //激活OnPageChanged事件 pagerControl1.OnPageChanged += new EventHandler(pagerControl1_OnPageChanged); }
分頁控件頁碼發生變化時執行方法
private void pagerControl1_OnPageChanged(object sender, EventArgs e) { ShowData(); }
綁定Datagridview方法
private void ShowData() { int count;///4.6日 string strWhere = " 1=1 "; //可以添加where條件 pagerControl1.PageSize = 30;//設置顯示記錄數 ds = bll.GetList(pagerControl1.PageIndex, pagerControl1.PageSize, strWhere, out count);//4.6 dataGridViewX1.DataSource = ds.Tables[0]; pagerControl1.DrawControl(count); }
bll.GetList為數據讀取返回dataset類型
public DataSet GetList(int PageIndex, int PageSize, string strWhere, out int count) { StringBuilder strSql = new StringBuilder(); //strSql.Append(" select * from ( "); strSql.Append(" select ROW_NUMBER() over(order by Material_TimeAdd) num,* "); strSql.Append(" FROM tabel"); if (strWhere.Trim() != "") { strSql.Append(" where " + strWhere); } count = DbHelperSQL.Query(strSql.ToString()).Tables[0].Rows.Count; strSql.Append(" ) t where t.num between " + ((PageIndex - 1) * PageSize + 1) + " and " + PageSize * PageIndex); DataSet ds = DbHelperSQL.Query(" select * from ( " + strSql.ToString()); return ds; }
第一次寫東西,希望能夠幫助需要的人。。。。。。
