WinForm分页控件

分页控件是程序开发的数据加载显示中较常用,为了能够灵活重用,以下使用将该功能包装成用户控件UserControl,整体控件效果图如下:

分页

分页paging完整代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace DiaGramApp
{
   /// <summary>

    /// 声明委托

    /// </summary>

    /// <param name="e"></param>

    public delegate void EventPagingHandler(EventArgs e);

    public partial class Paging : UserControl

    {
        public Paging()

        {
            InitializeComponent();
        }
        public event EventPagingHandler EventPaging;

        #region 公开属性
        private int _pageSize = 20;
        /// <summary>
        /// 每页显示记录数(默认20)
        /// </summary>
        public int PageSize
        {
            get
            {
                return _pageSize;
            }
            set 
            {
                if (value > 0)
                {
                    _pageSize = value;
                    this.comboPageSize.Text = _pageSize.ToString();
                }
               else if (value == -1)
                {
                    _pageSize = -1;
                }
                else
                {
                    _pageSize = 20;
                    this.comboPageSize.Text = _pageSize.ToString();
                }
                
            }
        }

        private int _currentPage = 1;
        /// <summary>
        /// 当前页
        /// </summary>
        public int CurrentPage
        {   
            get 
            {
                return _currentPage;
            }
            set 
            {
                if (value > 0)
                {
                   _currentPage = value;
                }
                else
                {
                    _currentPage = 1;
                }
            }
        }
        private int _totalCount = 0;
        /// <summary>
        /// 总记录数
        /// </summary>
        public int TotalCount
        {
            get
            {
                return _totalCount;
            }
            set 
            {
                if (value>=0)
                {
                    _totalCount = value;
                } 
                else
                {
                    _totalCount = 0;
                }
                this.lblTotalCount.Text = this._totalCount.ToString();

                CalculatePageCount();

                this.lblRecordRegion.Text = GetRecordRegion();
            }
        }
        private int _pageCount = 0;
        /// <summary>
        /// 页数
        /// </summary>
        public int PageCount
        {
            get
            {
                return _pageCount;
            }
            set 
            {
                if (value>=0)
                {
                    _pageCount = value;
                } 
                else
                {
                    _pageCount = 0;
                }
                this.lblPageCount.Text = _pageCount + "";
            }
        }
       #endregion
        /// <summary>
        /// 计算页数
        /// </summary>
        private void CalculatePageCount()
        {
            if (this.TotalCount>0)
            {
                this.PageCount = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(this.TotalCount) / Convert.ToDouble(this.PageSize)));
            }
            else
            {
                this.PageCount = 0;
            }
        }
        /// <summary>
        /// 获取显示记录区间(格式如:1-20)
        /// </summary>
        /// <returns></returns>
        private string GetRecordRegion()
        {
            if (this.PageCount == 1) //只有一页
            {
                return "1-" + this.TotalCount.ToString();
            }
            else  //有多页
            {
                if(this.CurrentPage==1) //当前显示为第一页
                {
                    return "1-"+this.PageSize;
                }
                else if(this.CurrentPage==this.PageCount) //当前显示为最后一页
                {

                    return ((this.CurrentPage-1)*this.PageSize+1) +"-"+this.TotalCount;
                }
                else //中间页
                {
                    return ((this.CurrentPage-1) * this.PageSize+1)   + "-" + this.CurrentPage  * this.PageSize;
                }
            }
        }
        /// <summary>
        /// 数据绑定
        /// </summary>
        public void Bind()
        {
            if (this.EventPaging != null)//当事件不为空时,进行数据绑定
            {
                this.EventPaging(new EventArgs());
            }
            if (this.CurrentPage>this.PageCount)
            {
                this.CurrentPage = this.PageCount;
            }
            this.txtBoxCurPage.Text = this.CurrentPage+"";
            this.lblTotalCount.Text = this.TotalCount+"";
            this.lblPageCount.Text = this.PageCount+"";
            this.lblRecordRegion.Text = GetRecordRegion();
            if (this.CurrentPage==1)
            {
                this.btnFirst.Enabled = false;
                this.btnPrev.Enabled = false;
                //this.btnFirst.Image = global::CHVM.Properties.Resources.page_first_disabled;
                //this.btnPrev.Image = global::CHVM.Properties.Resources.page_prev_disabled;
            }
            else
            {
                this.btnFirst.Enabled = true;
                this.btnPrev.Enabled = true;

            }
            if (this.CurrentPage == this.PageCount)
            {
                this.btnNext.Enabled = false;
                this.btnLast.Enabled = false;
            } 
            else
            {
                this.btnNext.Enabled = true;
                this.btnLast.Enabled = true;
            }
            if (this.TotalCount==0)
            {
                this.btnFirst.Enabled = false;
                this.btnPrev.Enabled = false;
                this.btnNext.Enabled = false;
                this.btnLast.Enabled = false;
            }
        }
        private void btnFirst_Click(object sender, EventArgs e)
        {
            this.CurrentPage = 1;
            this.Bind();
        }
        private void btnPrev_Click(object sender, EventArgs e)
        {
            this.CurrentPage -= 1;            
            this.Bind();
        }
        private void btnNext_Click(object sender, EventArgs e)
        {
            this.CurrentPage += 1;
            this.Bind();
        }
        private void btnLast_Click(object sender, EventArgs e)
        {
            this.CurrentPage = this.PageCount;
            this.Bind();
        }
        /// <summary>
        ///  改变每页条数
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void comboPageSize_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (comboPageSize.Text.Trim() == "全部")
            {
                this.PageSize = -1;//暂时全部时默认为-1
            }
            else
            {
                this.PageSize = Convert.ToInt32(comboPageSize.Text);
            }
            this.Bind();
        } 
   }
}

调用方式:
在调用的窗体中拖入该控件,在InitializeComponent();下加入
this.paging1.EventPaging += new EventPagingHandler(paging1_EventPaging);//初始化自定义事件
然后实现该事件,主要在其中绑定分页数据
        void paging1_EventPaging(EventArgs e)//事件实现
        {
            GvDataBind(); //DataGridView数据绑定   
        }
        private void GvDataBind()
        {
            int SumCount=0;
            DataTable _Dt = new DataTable();
            //获取分页
            if (paging1.PageSize == -1)//为显示全部时的情况
            {
                _Dt = cutlineBLL.GetPaging_BLL(paging1.PageSize, paging1.CurrentPage, out SumCount);
                paging1.PageSize = SumCount;
            }
            else
            _Dt= cutlineBLL.GetPaging_BLL(paging1.PageSize, paging1.CurrentPage, out SumCount);
            dataGridView1.AutoGenerateColumns = false;
            dataGridView1.DataSource = _Dt;
            paging1.TotalCount = SumCount;
            
        }

Load事件中初始化数据并关联分页控件
       GvDataBind();
       paging1.Bind();
本文采用的轻量型数据库sqlite,其分页sql语句如下

/// <summary>
        /// 通用分页查询方法
        /// </summary>
        /// <param name="connString">连接字符串</param>
        /// <param name="tableName">表名</param>
        /// <param name="strColumns">查询字段名</param>
        /// <param name="strWhere">where条件</param>
        /// <param name="strOrder">排序条件</param>
        /// <param name="pageSize">每页数据数量</param>
        /// <param name="currentIndex">当前页数</param>
        /// <param name="recordOut">数据总量</param>
        /// <returns>DataTable数据表</returns>
public static DataTable SelectPaging(string tableName, string strColumns, string strWhere, string strOrder, int pageSize, int currentIndex, out int recordOut)
        {
            DataTable dt = new DataTable();
            recordOut = Convert.ToInt32(ExecuteScalar( "select count(*) from " + tableName));
            string pagingTemplate = "select {0} from {1} where {2} order by {3} limit {4} offset {5} ";
            int offsetCount = (currentIndex - 1) * pageSize;
            string commandText = String.Format(pagingTemplate, strColumns, tableName, strWhere, strOrder, pageSize.ToString(), offsetCount.ToString());
            DataSet ds= ExecuteDataSet(commandText);
            dt = ds.Tables[0];
            return dt;
        }

其中在sqlite中limit为显示的条数,offset为从多少条后开始读取数据。

分页示例

 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Winform+DevExpress分页件是一种用于Windows桌面应用程序开发的件,它可以帮助开发者实现数据分页显示的功能。DevExpress是一个知名的UI件库,它提供了丰富的件和组件,可以大大提高开发效率和用户体验。分页件可以帮助用户快速浏览大量数据,同时也可以提高应用程序的性能和响应速度。 ### 回答2: WinForm DevExpress分页件是一个强大的工具,它使用户能够快速而可靠地管理大量数据。该件可以在WinForm应用程序中轻松实现常见的数据分页方案,并且具有灵活的布局和样式选项。以下是一些关于这个件的主要特点和功能: 1. 高度可定制:可以自定义件的行数、页码样式、默认选中颜色等; 2. 支持大数据量:对于海量数据,件可以极快地将其分页,显示出一页一页数据; 3. 轻松互动和导航:用户可以轻松进行分页,并且快速能够找到所需的数据; 4. 灵活的事件和属性:提供了一系列事件和属性,便于用户轻松地自定义件的行为和外观; 5. 查找和过滤功能:件允许用户按照特定标准进行筛选和查找数据; 6. 高度可定制的主题:用户可以自定义主题、颜色和字体等特性,使件更符合实际的需求。 需要注意的是,WinForm DevExpress分页件可能会对一些软件开发者提出一些挑战,因此在使用过程中一定要对其进行认真学习和测试。不过,如果合理使用,该件可以大大提高数据管理的效率和质量,为软件开发者带来极大的价值。 ### 回答3: WinForm DevExpress是一种方法,用于创建用户友好的Windows桌面应用程序,包括数据绑定和视觉效果。在WinForm中可以使用许多件来开发应用程序,例如文本框、按钮、标签、复选框等,这些件可用于显示数据和收集用户输入。其中一个重要的件就是分页件。 分页件在WinForm应用程序中非常常见,因为它允许用户浏览大量的数据,并按照需要进行分页。DevExpress分页件提供了丰富的功能,可以让用户以非常灵活的方式对分页进行定制。 在DevExpress分页件中,我们可以设置每页显示的记录数,可以选择要显示的页码,还可以自定义分页按钮的外观和行为。此外,分页件还可以根据需要自动调整页面大小,并支持跳转到指定页码。 与其他分页件相比,DevExpress分页件具有较高的灵活性和可定制性。通过使用分页件,我们可以使应用程序更加用户友好,让用户以最高效和最直观的方式来浏览和处理数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xizhjxust_GIS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值