开发者论坛

 找回密码
 注册 (请使用非IE浏览器)
查看: 4688|回复: 0

[教程] c#.net DataGridView Pager 数据绑定分页功能

[复制链接]

0

精华

100

贡献

33

赞扬

帖子
132
软币
3320
在线时间
53 小时
注册时间
2013-8-31
发表于 2013-9-2 21:58:42 | 显示全部楼层 |阅读模式
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 Nbjjy
{
    /// <summary>
    ///  this.pager1.DataControl = this.dataGridView1;
    ///  this.pager1.PageSize = 10;
    ///  this.pager1.DataSource =DataTable;
    ///  this.pager1.DataBind();
    /// </summary>
    public partial class Pager : UserControl
    {
        public Pager()
        {
            InitializeComponent();
        }
      
        /// <summary>
        /// 首页
        /// </summary>
        private void BtnFirst_Click(object sender, EventArgs e)
        {
            if (CheckFillButton() == false)
            {
                return;
            }
            if (CurPage == 1)
            {
                MessageBox.Show("您已经在第一页了!", "提示");
                return;
            }
            CurPage = 1;
            recNo = 0;
            LoadPage();
        }

        /// <summary>
        /// 第一页
        /// </summary>
        private void BtnPrev_Click(object sender, EventArgs e)
        {
            if (CheckFillButton() == false)
            {
                return;
            }
            if (CurPage == PageCount)
            {
                recNo = PageSize * (CurPage - 2);
            }
            CurPage -= 1;
            if (CurPage < 1)
            {
                MessageBox.Show("您已经在第一页了!", "提示");
                CurPage = 1;
                return;
            }
            else
            {
                recNo = PageSize * (CurPage - 1);
            }
            LoadPage();
        }

        /// <summary>
        /// 下一页
        /// </summary>
        private void BtnNext_Click(object sender, EventArgs e)
        {
            if (CheckFillButton() == false)
            {
                return;
            }
            if (PageSize == 0)
            {
                MessageBox.Show("设置页数,按回车键进行数据填充!", "提示");
                return;
            }
            CurPage += 1;
            if (CurPage > PageCount)
            {
                CurPage = PageCount;
                if (recNo == RecordCount)
                {
                    MessageBox.Show("您已经在最后一页了!", "提示");
                    return;
                }
            }
            LoadPage();
        }

        /// <summary>
        /// 最后页
        /// </summary>
        private void BtnLast_Click(object sender, EventArgs e)
        {
            if (CheckFillButton() == false)
            {
                return;
            }
            if (recNo == RecordCount)
            {
                MessageBox.Show("您已经在最后一页了!", "提示");
                return;
            }
            CurPage = PageCount;
            recNo = PageSize * (CurPage - 1);
            LoadPage();
        }
      
        public static int GetIntOrZero(string value)
        {
            try
            {
                return Convert.ToInt32(value.Trim());
            }
            catch
            {
                return 0;
            }
        }

        private bool CheckFillButton()
        {
            if (PageSize == 0)
            {
                MessageBox.Show("设置页数,按回车键进行数据填充!", "提示");
                return false;
            }
            else
            {
                return true;
            }
        }

        /// <summary>
        /// 绑定数据
        /// </summary>
        public void DataBind()
        {
            try
            {
                if (PageSize == 0 && PageSize == null)
                {
                    PageSize = pageSize;
                }
                RecordCount = DataSource.Rows.Count;
                if (PageSize == 0)
                {
                    MessageBox.Show("页数不能为零,请输入大于零的数值!", "提示");
                    return;
                }
                PageCount = RecordCount / PageSize;
                if ((RecordCount % PageSize) > 0)
                {
                    PageCount += 1;
                }
                CurPage = 1;
                recNo = 0;
                LoadPage();
            }
            catch
            {
                throw;
            }
        }

        public DataTable DataSource
        {
            get
            {
                return myDataTable;
            }
            set
            {
                myDataTable = value;
            }
        }

        public DataGridView DataControl
        {
            get
            {
                return myDataGrid;
            }
            set
            {
                myDataGrid = value;
            }
        }

        private void LoadPage()
        {
            int i;
            int startRec;
            int endRec;
            DataTable dtTemp;
            dtTemp = myDataTable.Clone();
            if (CurPage == PageCount)
            {
                endRec = RecordCount;
            }
            else
            {
                endRec = PageSize * CurPage;
            }
            startRec = recNo;
            for (i = startRec; i < endRec; i++)
            {
                dtTemp.ImportRow(myDataTable.Rows);
                recNo += 1;
            }
            myDataGrid.DataSource = dtTemp;
            this.LblTotalRecord.Text = string.Format("共 {0} 条记录,每页 {1} 条,共 {2} 页", RecordCount.ToString(), PageSize.ToString(), PageCount.ToString());
            LblCurPage.Text = CurPage.ToString() + "/" + PageCount.ToString();
        }

      
        [System.ComponentModel.Browsable(false), System.ComponentModel.Category("分页"), System.ComponentModel.DefaultValue(0), System.ComponentModel.Description("当前的页面索引, 开始为1")]
        public int CurPage
        {
            get
            {
                if (curPage <= 0)
                {
                    curPage = 1;
                }
                return curPage;
            }
            set
            {
                curPage = value;
            }
        }

        [System.ComponentModel.Category("分页"), System.ComponentModel.Description("设置或获取记录总数")]
        public int RecordCount
        {
            get
            {
                return this.recordCount;
            }
            set
            {
                this.recordCount = value;
            }
        }

        [System.ComponentModel.Category("分页"), System.ComponentModel.DefaultValue(0), System.ComponentModel.Description("获取记录总页数")]
        public int PageCount
        {
            get
            {
                return this.pageCount;
            }
            set
            {
                this.pageCount = value;
            }
        }

        [System.ComponentModel.Category("分页"), System.ComponentModel.DefaultValue(15), System.ComponentModel.Description("设置或获取一页中显示的记录数目")]
        public int PageSize
        {
            get
            {
                if (pageSize <= 0)
                {
                    pageSize = 15;
                }
                return pageSize;
            }
            set
            {
                pageSize = value;
            }
        }

        private int recordCount;
        private int pageCount;
        private int pageSize;
        private int curPage;
        private int recNo;
        DataGridView myDataGrid;
        DataTable myDataTable;


    }
}


//--------------------------/

namespace Nbjjy
{
    partial class Pager
    {
        /// <summary>
        /// 必需的设计器变量。
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// 清理所有正在使用的资源。
        /// </summary>
        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region 组件设计器生成的代码
        /// <summary>
        /// 设计器支持所需的方法 - 不要
        /// 使用代码编辑器修改此方法的内容。
        /// </summary>
        private void InitializeComponent()
        {
            this.LblTotalRecord = new System.Windows.Forms.Label();
            this.LblCurPage = new System.Windows.Forms.Label();
            this.BtnLast = new System.Windows.Forms.Button();
            this.BtnNext = new System.Windows.Forms.Button();
            this.BtnPrev = new System.Windows.Forms.Button();
            this.BtnFirst = new System.Windows.Forms.Button();
            this.SuspendLayout();
            //
            // LblTotalRecord
            //
            this.LblTotalRecord.Location = new System.Drawing.Point(1, 0);
            this.LblTotalRecord.Name = "LblTotalRecord";
            this.LblTotalRecord.Size = new System.Drawing.Size(231, 22);
            this.LblTotalRecord.TabIndex = 13;
            this.LblTotalRecord.Text = "  共 0 条记录,每页 15 条,共 0 页";
            this.LblTotalRecord.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
            //
            // LblCurPage
            //
            this.LblCurPage.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
            this.LblCurPage.Location = new System.Drawing.Point(303, 0);
            this.LblCurPage.Name = "LblCurPage";
            this.LblCurPage.Size = new System.Drawing.Size(60, 22);
            this.LblCurPage.TabIndex = 12;
            this.LblCurPage.Text = "1/1";
            this.LblCurPage.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
            //
            // BtnLast
            //
            this.BtnLast.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
            this.BtnLast.Cursor = System.Windows.Forms.Cursors.Hand;
            this.BtnLast.FlatAppearance.BorderSize = 0;
            this.BtnLast.Location = new System.Drawing.Point(400, 0);
            this.BtnLast.Margin = new System.Windows.Forms.Padding(5);
            this.BtnLast.Name = "BtnLast";
            this.BtnLast.Size = new System.Drawing.Size(25, 22);
            this.BtnLast.TabIndex = 11;
            this.BtnLast.Text = "|>";
            this.BtnLast.UseVisualStyleBackColor = false;
            this.BtnLast.Click += new System.EventHandler(this.BtnLast_Click);
            //
            // BtnNext
            //
            this.BtnNext.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
            this.BtnNext.Cursor = System.Windows.Forms.Cursors.Hand;
            this.BtnNext.FlatAppearance.BorderSize = 0;
            this.BtnNext.Location = new System.Drawing.Point(370, 0);
            this.BtnNext.Margin = new System.Windows.Forms.Padding(5);
            this.BtnNext.Name = "BtnNext";
            this.BtnNext.Size = new System.Drawing.Size(25, 22);
            this.BtnNext.TabIndex = 10;
            this.BtnNext.Text = ">";
            this.BtnNext.UseVisualStyleBackColor = false;
            this.BtnNext.Click += new System.EventHandler(this.BtnNext_Click);
            //
            // BtnPrev
            //
            this.BtnPrev.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
            this.BtnPrev.Cursor = System.Windows.Forms.Cursors.Hand;
            this.BtnPrev.FlatAppearance.BorderSize = 0;
            this.BtnPrev.Location = new System.Drawing.Point(273, 0);
            this.BtnPrev.Margin = new System.Windows.Forms.Padding(5);
            this.BtnPrev.Name = "BtnPrev";
            this.BtnPrev.Size = new System.Drawing.Size(25, 22);
            this.BtnPrev.TabIndex = 9;
            this.BtnPrev.Text = "<";
            this.BtnPrev.UseVisualStyleBackColor = false;
            this.BtnPrev.Click += new System.EventHandler(this.BtnPrev_Click);
            //
            // BtnFirst
            //
            this.BtnFirst.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
            this.BtnFirst.Cursor = System.Windows.Forms.Cursors.Hand;
            this.BtnFirst.FlatAppearance.BorderSize = 0;
            this.BtnFirst.Location = new System.Drawing.Point(240, 0);
            this.BtnFirst.Margin = new System.Windows.Forms.Padding(5);
            this.BtnFirst.Name = "BtnFirst";
            this.BtnFirst.Size = new System.Drawing.Size(25, 22);
            this.BtnFirst.TabIndex = 8;
            this.BtnFirst.Text = "<|";
            this.BtnFirst.UseVisualStyleBackColor = true;
            this.BtnFirst.Click += new System.EventHandler(this.BtnFirst_Click);
            //
            // Pager
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.BackColor = System.Drawing.SystemColors.Control;
            this.Controls.Add(this.LblTotalRecord);
            this.Controls.Add(this.LblCurPage);
            this.Controls.Add(this.BtnLast);
            this.Controls.Add(this.BtnNext);
            this.Controls.Add(this.BtnPrev);
            this.Controls.Add(this.BtnFirst);
            this.Name = "Pager";
            this.Size = new System.Drawing.Size(430, 22);
            this.ResumeLayout(false);

        }
        #endregion
        private System.Windows.Forms.Label LblTotalRecord;
        private System.Windows.Forms.Label LblCurPage;
        private System.Windows.Forms.Button BtnLast;
        private System.Windows.Forms.Button BtnNext;
        private System.Windows.Forms.Button BtnPrev;
        private System.Windows.Forms.Button BtnFirst;
    }
}

回复

使用道具 举报

Archiver|手机版|小黑屋|开发者网 ( 苏ICP备08004430号-2 )
版权所有:南京韵文教育信息咨询有限公司

GMT+8, 2024-5-23 15:55

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表