winform 自定義分頁控件 及DataGridview數據綁定


 

 

分頁效果如上圖所示,用到的控件均為基本控件 ,其方法如下

右擊項目-添加-新建項 選擇用戶控件 然后在用戶控件中拖入所需要的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;


        }

第一次寫東西,希望能夠幫助需要的人。。。。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM