C# Winform DataGridView分页,不利用VS2008的BindingNavigator控件,自己设置按钮前一页,后一页,首页,末页,每页显示条数等按钮,该如何实现,   很急  求助

解决方案 »

  1.   

    那就要自己做分页咯,上网搜搜吧,这个东西挺多的。关键就是:数据集合(DataTable),PageSize,PageNumber,PageCount了。
      

  2.   

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.SqlClient;namespace WindowsFormsApplication1
    {
        public partial class Form2 : Form
        {
            int pageSize = 0;     //每页显示行数
            int nMax = 0;         //总记录数
            int pageCount = 0;    //页数=总记录数/每页显示行数
            int pageCurrent = 0;   //当前页号
            int nCurrent = 0;      //当前记录行
            DataSet ds = new DataSet();
            DataTable dtInfo = new DataTable();        public Form2()
            {
                InitializeComponent();
            }        private void Form2_Load(object sender, EventArgs e)
            {
                string strConn = "SERVER=yutai;DATABASE=YUTAIDB;UID=SA;PWD=yutai2008";   //数据库连接字符串
                SqlConnection conn = new SqlConnection(strConn);
                conn.Open();
                string strSql = "SELECT ID,Accounts,Photo_Max,IsEnter FROM MEMBER";
                SqlDataAdapter sda = new SqlDataAdapter(strSql, conn);
                sda.Fill(ds, "ds");
                conn.Close();
                dtInfo = ds.Tables[0];
                InitDataSet();        }        private void InitDataSet()
            {
                pageSize = 10;      //设置页面行数
                nMax = dtInfo.Rows.Count;
                pageCount = (nMax / pageSize);    //计算出总页数
                if ((nMax % pageSize) > 0) pageCount++;
                pageCurrent = 1;    //当前页数从1开始 
                nCurrent = 0;       //当前记录数从0开始
                LoadData();
            }
            private void LoadData()
            {
                int nStartPos = 0;   //当前页面开始记录行
                int nEndPos = 0;     //当前页面结束记录行            DataTable dtTemp = dtInfo.Clone();   //克隆DataTable结构框架            if (pageCurrent == pageCount)
                {
                    nEndPos = nMax;
                    toolStripButton2.Enabled = false;
                }
                else
                {
                    nEndPos = pageSize * pageCurrent;
                    toolStripButton2.Enabled = true;
                }            nStartPos = nCurrent;
                if (nStartPos == 0)
                    toolStripButton1.Enabled = false;
                else
                    toolStripButton1.Enabled = true;
                lblPageCount.Text = "/" + pageCount.ToString();
                txtCurrentPage.Text = Convert.ToString(pageCurrent);            //从元数据源复制记录行
                for (int i = nStartPos; i < nEndPos; i++)
                {
                    dtTemp.ImportRow(dtInfo.Rows[i]);
                    nCurrent++;
                }
                bdsInfo.DataSource = dtTemp;
                bdnInfo.BindingSource = bdsInfo;
                dgvInfo.DataSource = bdsInfo;            
            }        private void bdnInfo_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);
                    }
                    LoadData();
                }
                if (e.ClickedItem.Text == "下一页")
                {
                    pageCurrent++;
                    if (pageCurrent > pageCount)
                    {
                        MessageBox.Show("已经是最后一页,请点击“上一页”查看!");  
                        return;
                    }
                    else
                    {
                       nCurrent=pageSize*(pageCurrent-1);
                    }
                    LoadData();
                }
                if (e.ClickedItem.Text == "第一页")
                {
                    nCurrent = 0;
                    pageCurrent = 1;
                    LoadData();
                }
                if (e.ClickedItem.Text == "最后一页")
                {
                    nCurrent = pageSize*(pageCount-1);
                    pageCurrent = pageCount;
                    LoadData();
                }
                if (e.ClickedItem.Text == "跳转")
                {
                    try
                    {
                        nCurrent = pageSize * (Convert.ToInt32(txtCurrentPage.Text.Trim()) - 1);
                        pageCurrent = Convert.ToInt32(txtCurrentPage.Text.Trim());
                        LoadData();
                    }
                    catch
                    {
                        MessageBox.Show("请输入正确的数字!");
                        txtCurrentPage.Focus();
                    }
                }
            }
           
        }
    }