[转帖]datagridview 分页

来源:互联网 发布:找保镖什么软件 编辑:程序博客网 时间:2024/06/06 14:26

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

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        int pageSize = 0;
        int maxRec = 0;
        int pageCount = 0;
        int currentPage = 0;
        int recNo = 0;
        DataSet ds = new DataSet();
        DataTable dtSource = new DataTable();

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            string strconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:/My Documents/Visual Studio 2005/Projects/WindowsApplication1/WindowsApplication1/表.mdb";//连接数据库
            OleDbConnection conn = new OleDbConnection(strconn);
            conn.Open();
            OleDbDataAdapter sda = new OleDbDataAdapter("select * from Area", conn);//这里就随便取一数据了
            sda.Fill(ds, "ds");
            conn.Close();
            dtSource = ds.Tables[0];
            getFillDateset();
        }

        #region 数据处理
        /// <summary>
        /// 得到期初数据
        /// </summary>
        private void getFillDateset()
        {
            try
            {
                //每页显示数
                pageSize = 10;
                //得到最大记录数
                maxRec = dtSource.Rows.Count;
                //共有多少页
                pageCount = (maxRec / pageSize);
                //取余数
                if ((maxRec % pageSize) > 0)
                {
                    pageCount++;
                }
                //默认第一页
                currentPage = 1;
                recNo = 0;
                LoadPage();
            }
            catch
            {
            }
        }

        /// <summary>
        /// 判断是否数据已经加载
        /// </summary>
        /// <returns></returns>
        private bool CheckFillButton()
        {
            if (pageSize == 0) return false;
            else return true;
        }

        /// <summary>
        /// 取DataTable的数据
        /// </summary>
        private void LoadPage()
        {
            int startRec;
            int endRec;
            DataTable dtTemp;


            dtTemp = dtSource.Clone();
            if (currentPage == pageCount) endRec = maxRec;
            else endRec = pageSize * currentPage;
            startRec = recNo;
            for (int i = startRec; i < endRec; i++)
            {
                dtTemp.ImportRow(dtSource.Rows[i]);
                recNo++;
            }
            this.dataGridView1.DataSource = dtTemp;
        }

        private void changepage(int m)
        {
            switch (m)
            {
                case 1:
                    if (currentPage == 1)
                    {
                        MessageBox.Show("已经第一页了");
                        return;

                    }
                    currentPage = 1;
                    recNo = 0;
                    LoadPage();
                    break;
                case 2:
                    currentPage++;
                    if (currentPage > pageCount)
                    {
                        currentPage = pageCount;
                        if (recNo == maxRec)
                        {
                            MessageBox.Show("已经最后一页了");
                            return;
                        }
                        else
                            recNo = pageSize * (currentPage + 1);
                    }
                    LoadPage();
                    break;
                case 3:
                    if (currentPage == pageCount)
                        recNo = pageSize * (currentPage - 2);
                    currentPage--;
                    if (currentPage < 1)
                    {
                        MessageBox.Show("已经第一页了");
                        currentPage = 1;
                        return;
                    }
                    else
                        recNo = pageSize * (currentPage - 1);

                    LoadPage();
                    break;

                case 4:
                    if (!CheckFillButton()) return;
                    if (recNo == maxRec)
                    {
                        MessageBox.Show("已经最后一页了");
                        return;
                    }
                    currentPage = pageCount;
                    recNo = pageSize * (currentPage - 1);
                    LoadPage();
                    break;
            }
        }
        #endregion

        private void button1_Click(object sender, EventArgs e)
        {
            changepage(1);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            changepage(2);
        }

        private void button3_Click(object sender, EventArgs e)
        {
            changepage(3);
        }

        private void button4_Click(object sender, EventArgs e)
        {
            changepage(4);
        }
    }

 
原创粉丝点击