ibcadmin 发表于 2012-11-28 20:05:17

DataGridView如何分页

普遍的有两种方式:1.写SQL语句 2.用控件实现

本文将解的是用控件实现。一下内容转自博客园


http://images.cnblogs.com/cnblogs_com/sayu115/demo.JPG
从界面可以看到,在设计时需要一个DataGridView、BindingNavigate、BindingSource控件,分别命名为dgvInfo、bdnInfo、bdsInfo。
在bdnInfo控件中添加几个用于选择页面的lable和botton,如上图所示。
设计时:Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->1 // 1、定义几个所需的公有成员:

       int pageSize = 0;   //每页显示行数
       int nMax = 0;         //总记录数
       int pageCount = 0;    //页数=总记录数/每页显示行数
       int pageCurrent = 0;   //当前页号
       int nCurrent = 0;      //当前记录行
       DataSet ds = new DataSet();
       DataTable dtInfo = new DataTable();

//2、在窗体载入事件中,从数据源读取记录到DataTable中:

       string strConn = "SERVER=127.0.0.1;DATABASE=NORTHWIND;UID=SA;PWD=ULTRATEL";   //数据库连接字符串
       SqlConnection conn = new SqlConnection(strConn);
       conn.Open();
       string strSql = "SELECT * FROM CUSTOMERS";
       SqlDataAdapter sda = new SqlDataAdapter(strSql,conn);
       sda.Fill(ds,"ds");
       conn.Close();
       dtInfo = ds.Tables;
       InitDataSet();
   
//3、用当前页面数据填充DataGridView

       private void InitDataSet()
       {
         pageSize = 20;      //设置页面行数
         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;
         }
         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);
               nCurrent++;
         }
         bdsInfo.DataSource = dtTemp;
         bdnInfo.BindingSource = bdsInfo;
         dgvInfo.DataSource = bdsInfo;
      }

   //   4、菜单响应事件:

   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();
            }
      }

wai2dance 发表于 2012-11-29 19:19:11

沙发 顶一个!! 好帖

金贤重 发表于 2012-12-7 22:08:46

:P正在找这个呢,嘻嘻...支持呢~~

chao2332601 发表于 2013-6-16 02:09:42

谢谢分享!!!

chao2332601 发表于 2013-6-16 04:53:53

谢谢分享!!!
页: [1]
查看完整版本: DataGridView如何分页