c# winfrom 分页实现,无DLL引用分享源代码和实现过程

说明:为了方便后续的使用我们做成一个通用的版本

1.  首先添加用户控件,布局如图所示


2. 修改变量名称,我的命名如下

共计100的lable :lblTotalCount
每页文本框 :txtPageSize

当前页1 lable :lblCurrentPage

            100 lable:lblPageCount

按钮命名分别为 :linkFirst ,linkPrevious,linkNext,linkLast

 转到前面的文本框:txtPageNum

转到按钮:btnGo

3. 开始用户控件代码编写


 public partial class winpageing : UserControl
    {
        public winpageing()
        {
            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;
            btnGo.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)
        {


            lblCurrentPage.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;
                btnGo.Enabled = false;
            }
            else if (PageIndex == 1)//当前页为第一页时
            {
                linkFirst.Enabled = false;
                linkPrevious.Enabled = false;
            }
            else if (PageIndex == PageCount)//当前页为最后一页时
            {
                linkNext.Enabled = false;
                linkLast.Enabled = false;
            }
        }


        #endregion


        bool isTextChanged = false;
        /// <summary>
        /// 每页显示的记录数改变后点击回车变化
        /// </summary>
        private void txtPageSize_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                int num = 0;
                //输入不符合规范时,默认设置为100
                if (!int.TryParse(txtPageSize.Text.Trim(), out num) || num <= 0)
                {
                    num = 100;
                    txtPageSize.Text = "100";
                }
                else
                {
                    isTextChanged = true;


                }
                pageSize = num;
                linkFirst_Click(null, null);
            }
        }
        //首页
        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);
        }


        private void btnGo_Click(object sender, EventArgs e)
        {
            int num = 0;
            if (int.TryParse(txtPageNum.Text.Trim(), out num) && num > 0)
            {
                PageIndex = num;
                DrawControl(true);
            }
        }

        private void winpageing_Load(object sender, EventArgs e)
        {
            lblCurrentPage.Text = "";
            lblPageCount.Text = "";
            lblTotalCount.Text = "";
            txtPageSize.Text = "";
            txtPageNum.Text = "";
            //this.BackColor = Color.FromArgb(179, 212, 255);
        }

4.   用户前段调用页面布局

代码编写如下

 public partial class frmPagerDemo : Form
    {
        public frmPagerDemo()
        {
            InitializeComponent();
        }
        DataTable dtinfo=new System.Data.DataTable();
        int  icount;
        private void StartForm_Load(object sender, EventArgs e)
        {
            BandData();
            LoadCurrentData();   
            //激活OnPageChanged事件
            pagerControl1.OnPageChanged += new EventHandler(pagerControl1_OnPageChanged);
        }


        /// <summary>
        /// 页数变化时调用绑定数据方法
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void pagerControl1_OnPageChanged(object sender, EventArgs e)
        {
            LoadCurrentData();
            pagerControl1.DrawControl(icount);
        }


        /// <summary>
        ///   得到当前数据源
        /// </summary>
        /// <param name="pagesize">每页条数</param>
        /// <param name="currentpage">当前页数</param>
        /// <param name="currentpageTotal">总共页数</param>
        private void BandData()
        {
            string strconstring = System.Configuration.ConfigurationManager.ConnectionStrings["condb"].ConnectionString.ToString();
            string strSql = "";
            strSql = "SELECT   RCPT_NO,BIZ_DAY,RCPT_TIME,STTL_AMT,TTL_AMT, GUEST_NUM,TTL_QTY  FROM  TRN_HDR";
             dtinfo = AccessHelper.ExecuteDataTable(strconstring,strSql);
             icount = dtinfo.Rows.Count;
            pagerControl1.DrawControl(icount);
            
        }
        private void LoadCurrentData()
        {
            //DataTable dtCurrrntdata = null;
            try
            {
                DataTable dtTemp = new System.Data.DataTable();
           
                int nStartPos = 0;   //当前页面开始记录行
               int nEndPos = 0;     //当前页面结束记录行
                dtTemp = dtinfo.Clone();   //克隆DataTable结构框架
               int pageCurrent = pagerControl1.PageIndex;
               int pageCount = pagerControl1.PageCount;
               int pageSize = pagerControl1.PageSize;
               if (pageCurrent==1)
               {
                   nStartPos = 0;
                   nEndPos = pageSize * pageCurrent;
                    if (icount<=nEndPos)   //防止只有1页的情况
                    {
                        nEndPos = icount;
                    }
               }
               else if (pageCurrent == pageCount)
              {
                  nStartPos = pageSize * (pageCurrent - 1);
                  nEndPos = icount; 
               }
              else
               {
                   nStartPos = pageSize * (pageCurrent - 1);
                    nEndPos = pageSize * pageCurrent;
               }


             //从原数据源复制记录行
               for (int i = nStartPos; i < nEndPos; i++)
               {
                  dtTemp.ImportRow(dtinfo.Rows[i]);
              
               }
              dataGridView1.DataSource = dtTemp;
            }
            catch (Exception ex)
            {


                throw;
            }


        }
        //自动序号
        private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
        {
            Rectangle rectangle = new Rectangle(e.RowBounds.Location.X, e.RowBounds.Location.Y, dataGridView1.RowHeadersWidth, e.RowBounds.Height);
            TextRenderer.DrawText(e.Graphics, (e.RowIndex + 1).ToString(),
                dataGridView1.RowHeadersDefaultCellStyle.Font, rectangle, dataGridView1.RowHeadersDefaultCellStyle.ForeColor,
                TextFormatFlags.VerticalCenter | TextFormatFlags.Right);
        }
    }
6. 最终运行的效果图


源码下载地址:
http://download.csdn.net/detail/bdb1018/9808666

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值