DataGridView分页功能的实现

最近做了一个DataGridView的分页显示Demo。也是看见网络上很多人询问关于DataGridView如何做分页。根据我的认识,Visual Sutido 2005里的DataGridView控件是没有带分页属性的,因此咱们必须通过写代码去实现分页功能。
      好了,先看一下Demo的界面。

从界面可以看到,在设计时需要一个DataGridView、BindingNavigate、BindingSource控件,分别命名为dgvInfo、bdnInfo、bdsInfo。
     在bdnInfo控件中添加几个用于选择页面的lable和botton,如上图所示。
     设计时:
     1、定义几个所需的公有成员:

  1.         int pageSize = 0;     //每页显示行数
  2.         int nMax = 0;         //总记录数
  3.         int pageCount = 0;    //页数=总记录数/每页显示行数
  4.         int pageCurrent = 0;   //当前页号
  5.         int nCurrent = 0;      //当前记录行
  6.         DataSet ds = new DataSet();
  7.         DataTable dtInfo = new DataTable();
2、在窗体载入事件中,从数据源读取记录到DataTable中:
        
  1.         string strConn = "SERVER=127.0.0.1;DATABASE=NORTHWIND;UID=SA;PWD=ULTRATEL";   //数据库连接字符串
  2.             SqlConnection conn = new SqlConnection(strConn);
  3.             conn.Open();
  4.             string strSql = "SELECT * FROM CUSTOMERS";
  5.             SqlDataAdapter sda = new SqlDataAdapter(strSql,conn);
  6.             sda.Fill(ds,"ds");
  7.             conn.Close();
  8.             dtInfo = ds.Tables[0];
  9.             InitDataSet();
      3、用当前页面数据填充DataGridView
  1. private void InitDataSet()
  2.         {
  3.             pageSize = 20;      //设置页面行数
  4.             nMax = dtInfo.Rows.Count;
  5.             pageCount=(nMax/pageSize);    //计算出总页数
  6.             if ((nMax % pageSize) > 0) pageCount++;
  7.             pageCurrent = 1;    //当前页数从1开始
  8.             nCurrent = 0;       //当前记录数从0开始
  9.             LoadData();
  10.         }

 

  1. private void LoadData()
  2.         {
  3.             int nStartPos = 0;   //当前页面开始记录行
  4.             int nEndPos = 0;     //当前页面结束记录行
  5.             DataTable dtTemp = dtInfo.Clone();   //克隆DataTable结构框架
  6.             if (pageCurrent == pageCount)
  7.                 nEndPos = nMax;
  8.             else
  9.                 nEndPos = pageSize * pageCurrent;
  10.             nStartPos = nCurrent;
  11.             lblPageCount.Text = pageCount.ToString();
  12.             txtCurrentPage.Text = Convert.ToString(pageCurrent);
  13.             //从元数据源复制记录行
  14.             for (int i = nStartPos; i < nEndPos; i++)
  15.             {
  16.                 dtTemp.ImportRow(dtInfo.Rows[i]);
  17.                 nCurrent++;
  18.             }
  19.             bdsInfo.DataSource = dtTemp;
  20.             bdnInfo.BindingSource = bdsInfo;
  21.             dgvInfo.DataSource = bdsInfo;
  22.         }
       4、菜单响应事件:
 
  1. private void bdnInfo_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
  2.         {
  3.             if (e.ClickedItem.Text == "关闭")
  4.             {
  5.                 this.Close();
  6.             }
  7.             if (e.ClickedItem.Text == "上一页")
  8.             {
  9.                 pageCurrent--;
  10.                 if (pageCurrent <= 0)
  11.                 {
  12.                     MessageBox.Show("已经是第一页,请点击“下一页”查看!");
  13.                     return;
  14.                 }
  15.                 else
  16.                 {
  17.                     nCurrent = pageSize * (pageCurrent - 1);
  18.                 }
  19.                 LoadData();
  20.             }
  21.             if (e.ClickedItem.Text == "下一页")
  22.             {
  23.                 pageCurrent++;
  24.                 if (pageCurrent > pageCount)
  25.                 {
  26.                     MessageBox.Show("已经是最后一页,请点击“上一页”查看!");
  27.                     return;
  28.                 }
  29.                 else
  30.                 { 
  31.                    nCurrent=pageSize*(pageCurrent-1);
  32.                 }
  33.                 LoadData();
  34.             }
  35.         }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值