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.         }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值