在设计时需要一个DataGridView、BindingNavigate、BindingSource控件,分别命名为dgvInfo、bdnInfo、bdsInfo。
     在bdnInfo控件中添加几个用于选择页面的lable和botton,

SqlConnection conn = new SqlConnection(Program.conection);//建立数据库链接

        public Page()

        {

            InitializeComponent();

        }

        //定义全局变量

        int pageSize = 0;     //每页显示行数

        int nMax = 0;         //总记录数

        int pageCount = 0;    //页数=总记录数/每页显示行数

        int pageCurrent = 0;   //当前页号

        int nCurrent = 0;      //当前记录行

        DataSet ds = new DataSet();//声明数据集

        DataTable dtInfo = new DataTable();//数据集中的表

        //窗体事件

        private void Page_Load(object sender, EventArgs e)

        {

            conn.Open();//打开数据库链接

            string strSql = "SELECT * FROM 人员档案";//数据库执行语句

            SqlDataAdapter sda = new SqlDataAdapter(strSql,conn);//声明数据适配器的实例

            sda.Fill(ds);//填充数据集

            conn.Close();//关闭链接

            dtInfo = ds.Tables[0];//用数据集中的数据填充表

            InitDataSet(); //调用自定义方法

        }

 

        private void InitDataSet()

        {

            pageSize = 20;      //设置页面行数

            nMax = dtInfo.Rows.Count;//记录总数表中的行数

            pageCount = (nMax / pageSize); //计算出总页数(总行数/每页的行数)

            if ((nMax % pageSize) > 0)//判断页数如果余数大于0就进行下一页

            {

                pageCount++;

            }

            pageCurrent = 1;    //当前页数从1开始

            nCurrent = 0;       //当前记录数从0开始

            LoadData();//自定义方法loadData

        }

        private void LoadData()

        {

            int nStartPos = 0;   //定义变量表示当前页面开始记录行

            int nEndPos = 0;     //当前页面结束记录行

            DataTable dtTemp = dtInfo.Clone();  //克隆DataTable结构框架

            if (pageCurrent == pageCount)//如果当前页号= 当前页数

                nEndPos = nMax;//当前的行数就等于总行数

            else

                //结束的行数就等于当前页数*每页记录的行数

                nEndPos = pageSize * pageCurrent;

 

            nStartPos = nCurrent;//开始位置等于当前记录行

 

            lblPageCount.Text = pageCount.ToString();//显示当前页数

            txtCurrentPage.Text = Convert.ToString(pageCurrent);//当前记录行数

 

            //从元数据源复制记录行

            for (int i = nStartPos; i < nEndPos; i++)//遍历从开始行起到最后行数

            {

                dtTemp.ImportRow(dtInfo.Rows[i]);//将数据集中表的内容复制到datatable中

                nCurrent++;//记录数

            }

            bdsinfo.DataSource = dtTemp;

            bandInfo.BindingSource = bdsinfo;//数据来源

            dgvinfo.DataSource = bdsinfo;//给datagridview绑定数据

        }

        //bandinfo itemclicked 事件单机时发生
        private void bandInfo_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            if (e.ClickedItem.Text == "关闭")
            {
                this.Close();
            }
            if (e.ClickedItem.Text == "上一页")
            {
                pageCurrent--;//跳到上一页
                if (pageCurrent <= 0)//判断页数
                {
                    MessageBox.Show("已经是第一页,请点击“下一页”查看!");//如果就一页显示信息提示
                    return;//返回
                }
                else
                {
                    nCurrent = pageSize * (pageCurrent - 1);//当前记录行=每页记录的行数*页号-1
                }

                LoadData();//调用方法loaddata
            }

            if (e.ClickedItem.Text == "下一页")//如果点击下一页
            {
                pageCurrent++;//增加当前页号
                if (pageCurrent > pageCount)//如果当前页号>页数
                {
                    MessageBox.Show("已经是最后一页,请点击“上一页”查看!");
                    return;
                }
                else
                {
                    nCurrent = pageSize * (pageCurrent - 1);//当前记录行=每页记录的行数*页号-1
                }               
                LoadData();
            }
        }