InPowerS.Net

 找回密碼
 註冊
搜索
查看: 2454|回復: 0

C#實現DataGridView分頁功能

[複製鏈接]
發表於 2010-8-13 18:58:28 | 顯示全部樓層 |閱讀模式

從介面可以看到,在設計時需要一個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(); <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


  7.         DataTable dtInfo = new DataTable();
複製代碼


    2、在表單載入事件中,從資料來源讀取記錄到DataTable中:
        

  


  1.             string strConn = "SERVER=www.dow88.cn;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();
  10.    
複製代碼


      3、用當前頁面資料填充DataGridView
      
  1.    
  2. private void InitDataSet()
  3.         ...{
  4.             pageSize = 20;      //設置頁面行數
  5.             nMax = dtInfo.Rows.Count;

  6.             pageCount=(nMax/pageSize);    //計算出總頁數

  7.             if ((nMax % pageSize) > 0) pageCount++;

  8.             pageCurrent = 1;    //當前頁數從1開始


  9.             nCurrent = 0;       //目前記錄數從0開始

  10.             LoadData();
  11.         }

  12. private void LoadData()
  13.         ...{
  14.             int nStartPos = 0;   //當前頁面開始記錄行
  15.             int nEndPos = 0;     //當前頁面結束記錄行

  16.             DataTable dtTemp = dtInfo.Clone();   //克隆DataTable結構框架

  17.             if (pageCurrent == pageCount)
  18.                 nEndPos = nMax;
  19.             else
  20.                 nEndPos = pageSize * pageCurrent;

  21.             nStartPos = nCurrent;

  22.             lblPageCount.Text = pageCount.ToString();
  23.             txtCurrentPage.Text = Convert.ToString(pageCurrent);

  24.             //從中繼資料源複製記錄行
  25.             for (int i = nStartPos; i < nEndPos; i++)
  26.             ...{
  27.                 dtTemp.ImportRow(dtInfo.Rows[i]);
  28.                 nCurrent++;
  29.             }


  30.             bdsInfo.DataSource = dtTemp;
  31.             bdnInfo.BindingSource = bdsInfo;
  32.             dgvInfo.DataSource = bdsInfo;
  33.         }
複製代碼


        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.         }
複製代碼

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

小黑屋|Archiver|手機版|InPowerS.Net

GMT+8, 2025-4-11 20:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回復 返回頂部 返回列表