关于winform中Datagridview控件的分页

      最近很多朋友聊到在winform中使用Datagridview控件实现的分页的问题,对于数据之间的关系比较头疼,以下是我个人完成得分页代码,和大家共享,希望对有需要的朋友有所帮助。

       使用的控件有BindingNavigator,BindingSource和BindingSource,数据库使用SQL SERVER2008,数据源于一个点歌系统的歌手信息列表,即songInfo,下面是代码和部分注释。

    public partial class FrmMain : 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 FrmMain()
        {
            InitializeComponent();//初始化
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            DBHelper dbhelper = new DBHelper();
            string sql = "select song_id,song_name from song_info";
            SqlDataAdapter adapter = new SqlDataAdapter(sql,dbhelper.Connection);
            adapter.Fill(ds,"ds");
            dtInfo=ds.Tables[0];//把数据集中虚拟表的内容付给表dtInfo
            InitDataSet();
        }

        private void InitDataSet()
        {
            pageSize = 10;//设置每页行数
            nMax = dtInfo.Rows.Count;//计算总行数
            pageCount = (nMax / pageSize);//计算出总页数
            if (nMax % pageSize > 0)//有余数,有一页没有满
            {
                pageCount++;//单独作为一页
            }
            pageCurrent = 1;//当前页号从第一页开始
            ncurrent = 0;//当前记录行初始值
            LoadData();
        }

        private void LoadData()
        {
            int start = 0;//当前页面记录行;
            int end = 0;//当前页面结束行
            DataTable dtTemp = dtInfo.Clone();//复制表给dtTemp
            if (pageCurrent == pageCount)//当前页号是最后一页
            {
                end = nMax;//结束行是总行数
            }
            else
            {
                end = pageSize * pageCurrent;//结束行是当前页数*每页行数
            }
            start = ncurrent;//当前记录行
            lblCount.Text = pageCount.ToString();
            txtPagecount.Text = Convert.ToString(pageCurrent);

            for (int i = start; i < end; 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();
              }
        }
    }

  以上是个人完成得一个分页效果,有不妥之处希望各位不吝赐教!

 

你可能感兴趣的:(关于winform中Datagridview控件的分页)