快捷搜索:

winform下的一个分页控件总结

序言:刚刚整理完这篇,认为有要求把自身在开垦win form程序的时候时临时应用的一个分页程序也总计出来。尽管本身豆蔻梢头度用得领会了,不过怕自个儿介绍的倒霉,外人不肯定掌握毕竟该怎么用,所以本文也计划了多个demo,在本文最终你能够下载试用。

 

1、工程和花色结构

神测网在线预测加拿大 1

本文示例主要正是通过IBatisNet进行贰个简约的数码查询。

 

2、分页控件

神测网在线预测加拿大,(1卡塔尔、分页效果图

在DotNet.Common下的DotNet.Common.WinForm工程下有三个客商控件PagerControl,它的宏图视图首要不外乎八个LinkLabel、一个数字文本框、三个Button控件以致几个和呈现总结数字相关的Label控件。本文示例的三个分页展现效果如下:

神测网在线预测加拿大 2

控件特不佳看陋,是多么未有美术和希图天资啊。

(2卡塔尔、控件使用办法

      //绑定页码相关信息
            PagerControl pager = new PagerControl(this.CurrentPage, this.RecordsPerPage, this.TotalCount, "跳转");
            pager.currentPageChanged += new EventHandler(pager_currentPageChanged);//页码变化 触发的事件
            this.panelPager.Controls.Add(pager);//在Panel容器中加入这个控件

选择这么些控件的时候,只供给轻巧的new叁个控件对象,然后传入准确的参数,如当前页面,每页记录数,数据会集总记录数以致开关上显示的文字就可以。

(3卡塔尔国、怎么样正确传参和分页

对此分页来讲,主要的是流传查询条件和页码参数。查询条件咱们的MainForm窗体有现存的输入文本框,那么怎么样传递当前页码参数呢?无可辩驳,4个LinkLabel以至三个数字输入框和一个按键组合会引发当前页数字的改换,所以我们要在它们所对应的大器晚成部分事变下做一些CurrentPage的管理:

   #region 相关控件事件

        private void lnkFirst_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            CurrentPage = 1;
            DrawControl();
        }

        private void lnkPrev_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            CurrentPage = Math.Max(1, CurrentPage - 1);
            DrawControl();
        }

        private void lnkNext_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            CurrentPage = Math.Min(PageCount, CurrentPage + 1);
            DrawControl();
        }

        private void lnkLast_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            CurrentPage = PageCount;
            DrawControl();
        }

        /// <summary>
        /// enter键功能
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void txtPageNum_KeyPress(object sender, KeyPressEventArgs e)
        {
            string strNum = this.txtPageNum.Text.Trim();
            if (e.KeyChar == (char)Keys.Enter && RegUtil.IsPositiveNumber(strNum))
            {
                CurrentPage = int.Parse(strNum);
                DrawControl();
            }
        }

        /// <summary>
        /// 页数限制
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void txtPageNum_TextChanged(object sender, EventArgs e)
        {
            string strNum = this.txtPageNum.Text.Trim();
            if (strNum.Length > 0 && RegUtil.IsPositiveNumber(strNum) && int.Parse(strNum) > PageCount)
            {
                txtPageNum.Text = PageCount.ToString();
            }
        }

        /// <summary>
        /// 跳转
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnGo_Click(object sender, EventArgs e)
        {
            string strNum = this.txtPageNum.Text.Trim();
            if (RegUtil.IsPositiveNumber(strNum) == false)
            {
                return;
            }
            CurrentPage = int.Parse(strNum);
            DrawControl();
        }

        #endregion

我们注意到DrawControl方法,这是可怜关键的一个函数:

    /// <summary>
        /// 页面控件呈现
        /// </summary>
        private void DrawControl()
        {
            this.btnGo.Text = this.JumpText;
            this.lblCurrentPage.Text = CurrentPage.ToString();
            this.lblPageCount.Text = PageCount.ToString();
            this.lblTotalCount.Text = TotalCount.ToString();
            this.lblRecPerPg.Text = RecordsPerPage.ToString();

            if (currentPageChanged != null)
            {
                currentPageChanged(this, null);//当前分页数字改变时,触发委托事件
            }
            SetFormCtrEnabled();
            if (PageCount == 1)//有且仅有一页
            {
                this.lnkFirst.Enabled = false;
                this.lnkPrev.Enabled = false;
                this.lnkNext.Enabled = false;
                this.lnkLast.Enabled = false;
                this.btnGo.Enabled = false;
            }
            else if (CurrentPage == 1)//第一页
            {
                this.lnkFirst.Enabled = false;
                this.lnkPrev.Enabled = false;
                //this.lnkFirst.ForeColor = Color.Gray;
                //this.lnkPrev.ForeColor = Color.Gray;
            }
            else if (CurrentPage == this.PageCount)//最后一页
            {
                this.lnkNext.Enabled = false;
                this.lnkLast.Enabled = false;
            }
        }

因为它会有规范地接触上面包车型大巴寄托事件:

public event EventHandler currentPageChanged;

我们完全可以那样敞亮:当大家点击按键也许LinkLabel的时候,当前页码发生改动,所以需求再行做一些政工例如查询等等。控件就是通过吸引currentPageChanged事件来触发的:

     if (currentPageChanged != null)
            {
                currentPageChanged(this, null);//当前分页数字改变时,触发委托事件
            }

关于currentPageChanged委托触发的时候具体要做什么,那是每一个现实窗体中的函数要做的政工。举例本文的demo中,在MainForm中,大家因而定义上边那几个情势给pager的currentPageChanged赋值:

        private void pager_currentPageChanged(object sender, EventArgs e)
        {
            PagerControl pager = sender as PagerControl;
            if (pager == null)
            {
                return;
            }
            BindResults(pager.CurrentPage);//查询数据并分页绑定
        }

当分页控件的平地风波委托触发的时候,这里的BindResults函数通过pager的当下页数进行查询和数目绑定。那样说只怕对您通俗地掌握委托和事件有受益。

完全来讲,达成winform的分页效果比webform要轻松一些,因为它无需思索某个参数状态的变迁。

 

演示下载:IBatisWinApp

本文由加拿大28走势图发布于美术,转载请注明出处:winform下的一个分页控件总结

您可能还会对下面的文章感兴趣: