閱讀748 返回首頁    go 阿裏雲 go 技術社區[雲棲]


C#DataGridView實現分頁顯示

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace dgvCategories
{
    public partial class Form1 : Form
    {
        int _iPageSize = 0;       //每頁顯示行數
        int _iTotalRecords = 0;    //總記錄數
        int _iPageCount = 0;      //頁數=總記錄數/每頁顯示行數
        int _iPageCurrent = 0;    //當前頁號
        int _iCurrent = 0;        //當前記錄行
        DataSet _ds = new DataSet();
        DataTable _dtCategories = new DataTable();

        public Form1()
        {
            InitializeComponent();
        }

        private void InitDataSet()
        {
            _iPageSize = 20;  //每頁顯示20行
            _iTotalRecords = _dtCategories.Rows.Count; //表的總行數
            _iPageCount = _iTotalRecords / _iPageSize; //總頁數

            if (_iTotalRecords % _iPageSize > 0) //如果不是整除,
            {
                _iPageCount++;//不滿20行的也作為一頁來顯示
            }

            _iPageCurrent = 1;  //當前第1頁
            _iCurrent = 0;      //當前第0行

            LoadData();
        }

        private void LoadData()
        {
            int iBeginPos = 0;   //當前頁麵開始記錄行
            int iEndPos = 0;     //當前頁麵結束記錄行

            DataTable dtTemp = _dtCategories.Clone();  //克隆表的結構

            if (_iPageCurrent == _iPageCount) //如果當前頁是最後一頁
            {
                iEndPos = _iTotalRecords;
            }
            else//當前頁麵結束位置=頁麵大小*當前頁碼
            {
                iEndPos = _iPageSize * _iPageCurrent;
            }

            iBeginPos = _iCurrent; //當前記錄行號

            txtPageCount.Text = Convert.ToString(_iPageCount); //顯示總頁數
            txtCurentPage.Text = Convert.ToString(_iPageCurrent); //顯示當前第一頁

            //從元數據表複製數據
            for (int i = iBeginPos; i < iEndPos; i++ )
            {
                dtTemp.ImportRow(_dtCategories.Rows[i]);
                _iCurrent++;
            }

            dgvCategories.DataSource = bdsCategories;
            bdnCategories.BindingSource = bdsCategories;
            bdsCategories.DataSource = dtTemp;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            string strConnectionString = "server=localhost;database=NorthWind;" +
                "uid=sa;pwd=tianshi520;";
            SqlConnection sqlConn = new SqlConnection(strConnectionString);
            sqlConn.Open();

            string strSql = "select * from orders";
            SqlDataAdapter sda = new SqlDataAdapter(strSql, sqlConn);

            sda.Fill(_ds, "Categories");
            _dtCategories = _ds.Tables["Categories"];
            sqlConn.Close();

            InitDataSet();
        }

        private void bdnCategories_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            if (e.ClickedItem.Text == "關閉")
            {
                this.Close();
            }
            else if (e.ClickedItem.Text == "下一頁")
            {
                _iPageCurrent++;//頁數加1
                if (_iPageCurrent > _iPageCount)//如果當前頁碼>最大頁數
                {
                    MessageBox.Show("已經是最後一頁,請點擊“上一頁”查看!");
                    return;
                }

                _iCurrent = _iPageSize * (_iPageCurrent - 1);//當前行號
                LoadData();
            }
            else if (e.ClickedItem.Text == "上一頁")
            {
                _iPageCurrent--;
                if (_iPageCurrent <= 0)
                {
                    MessageBox.Show("當前已經是第一頁,請點擊下一頁查看!");
                    return;
                }
                _iCurrent = _iPageSize * (_iPageCurrent - 1);
                LoadData();
            }
        }
    }
}

最後更新:2017-04-02 00:06:48

  上一篇:go 一個ajax簡單例子
  下一篇:go xdoj Problem 1047 - Let&#39;s SPFA