DataGridView分頁功能的實現

hemeinvyiqiluoben發表於2014-12-03


最近做了一個DataGridView的分頁顯示Demo。也是看見網路上很多人詢問關於DataGridView如何做分頁。根據我的認識,Visual Sutido2005裡的DataGridView控制元件是沒有帶分頁屬性的,因此我們們必須通過寫程式碼去實現分頁功能。
好了,先看一下Demo的介面。

從介面可以看到,在設計時需要一個DataGridViewBindingNavigateBindingSource控制元件,分別命名為dgvInfobdnInfobdsInfo
bdnInfo控制元件中新增幾個用於選擇頁面的lablebotton,如上圖所示。
設計時:

  1 // 1、定義幾個所需的公有成員:
  2 
  3       int pageSize = 0;     //每頁顯示行數
  4       int nMax = 0;         //總記錄數
  5       int pageCount = 0;    //頁數=總記錄數/每頁顯示行數
  6       int pageCurrent = 0;   //當前頁號
  7       int nCurrent = 0;      //當前記錄行
  8       DataSet ds = new DataSet();
  9       DataTable dtInfo = new DataTable();
 10 
 11 //2、在窗體載入事件中,從資料來源讀取記錄到DataTable中:
 12 
 13       string strConn = "SERVER=127.0.0.1;DATABASE=NORTHWIND;UID=SA;PWD=ULTRATEL";   //資料庫連線字串
 14       SqlConnection conn = new SqlConnection(strConn);
 15       conn.Open();
 16       string strSql = "SELECT * FROM CUSTOMERS";
 17       SqlDataAdapter sda = new SqlDataAdapter(strSql,conn);
 18       sda.Fill(ds,"ds");
 19       conn.Close();
 20       dtInfo = ds.Tables[0];
 21       InitDataSet();
 22   
 23 //3、用當前頁面資料填充DataGridView
 24 
 25       private void InitDataSet()
 26       {
 27           pageSize = 20;      //設定頁面行數
 28           nMax = dtInfo.Rows.Count;
 29           pageCount=(nMax/pageSize);    //計算出總頁數
 30           if ((nMax % pageSize) > 0) pageCount++;
 31           pageCurrent = 1;    //當前頁數從1開始
 32           nCurrent = 0;       //當前記錄數從0開始
 33           LoadData();
 34        }
 35 
 36       private void LoadData()
 37       {
 38           int nStartPos = 0;   //當前頁面開始記錄行
 39           int nEndPos = 0;     //當前頁面結束記錄行
 40           DataTable dtTemp = dtInfo.Clone();   //克隆DataTable結構框架
 41 
 42           if (pageCurrent == pageCount)
 43           {
 44               nEndPos = nMax;
 45           }
 46           else
 47           {
 48                nEndPos = pageSize * pageCurrent;
 49           }
 50 
 51           nStartPos = nCurrent;
 52           lblPageCount.Text = pageCount.ToString();
 53           txtCurrentPage.Text = Convert.ToString(pageCurrent);
 54   
 55 
 56           //從後設資料源複製記錄行
 57           for (int i = nStartPos; i < nEndPos; i++)
 58           {
 59               dtTemp.ImportRow(dtInfo.Rows[i]);
 60               nCurrent++;
 61           }
 62           bdsInfo.DataSource = dtTemp;
 63           bdnInfo.BindingSource = bdsInfo;
 64           dgvInfo.DataSource = bdsInfo;
 65      }
 66 
 67     //   4、選單響應事件:
 68  
 69     private void bdnInfo_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
 70     {
 71          if (e.ClickedItem.Text == "關閉")
 72           {
 73              this.Close();
 74           }
 75          if (e.ClickedItem.Text == "上一頁")
 76           {
 77               pageCurrent--;
 78               if (pageCurrent <= 0)
 79               {
 80                  MessageBox.Show("已經是第一頁,請點選下一頁檢視!");
 81                  return;
 82               }
 83               else
 84               {
 85                  nCurrent = pageSize * (pageCurrent - 1);
 86               }
 87               LoadData();
 88            }
 89           if (e.ClickedItem.Text == "下一頁")
 90           {
 91               pageCurrent++;
 92               if (pageCurrent > pageCount)
 93               {
 94                   MessageBox.Show("已經是最後一頁,請點選上一頁檢視!");
 95                   return;
 96                }
 97                else
 98               { 
 99                   nCurrent=pageSize*(pageCurrent-1);
100               }
101               LoadData();
102            }
103      }

 

相關文章