C# Winform DataGridView分頁功能的實現

來源:互聯網
上載者:User
Demo的介面
從介面可以看到,在設計時需要一個DataGridView、BindingNavigate、BindingSource控制項,分別命名為dgvInfo、bdnInfo、bdsInfo。
在bdnInfo控制項中添加幾個用於選擇頁面的lable和botton,如所示。
設計時:// 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[0];
        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[i]);
                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();
           }
     }

url:http://greatverve.cnblogs.com/archive/2011/07/05/DataGridView-pager.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.