C# DataGridView实现分页显示功能

C# DataGridView实现分页显示功能_第1张图片

以上是效果图

最近项目需要实现分页显示功能,自己写了一个用户控件进行记录一下,demo功能比较简单,数据来源主要以test手动添加为主

思路:

1.分页显示——将要显示的内容按照一次显示的大小建立DataTable 

 DataTable dt = new DataTable(tableName);

对于Table中如果有很多列需要建立,单独一个个手动添加会比较麻烦,可以选择建立一个string[]里面放所有需要建立的列名,

通过遍历的方式进行添加

 

2.将建立好的DataTable放入DataSet

 ds.Tables.Add(dt);

3.将该DataSet绑定为需要显示这些数据对应的DataGridView的数据源

 this.dataGridView1.DataSource = ds.Tables[currentPageNum].DefaultView;

 

4.对于显示过程中会出现每页显示都多一行空行的问题,显示如下

C# DataGridView实现分页显示功能_第2张图片

可以通过设置DataGridView的以下属性为false即可

C# DataGridView实现分页显示功能_第3张图片

代码

namespace PageDataUI
{
    public partial class PageUI : UserControl
    {
        #region 屬性字段定義
        private int maxPageNum=0;     //最大頁數
        private int currentPageNum; //當前頁數
        private int prePageNum;     //上一頁
        private int nextPageNum;    //下一頁
        private int MaxNum = 10; //每頁最大條數
        private int TotalNum = 0; //所有頁總條數
        DataSet ds = new DataSet();
        #endregion
        public PageUI()
        {
            InitializeComponent();
            LoadDataInit();
        }

        #region 屬性字段賦值
        public virtual int MaxPageNum
        {
            get
            {
                return maxPageNum;
            }
            set
            {
                maxPageNum = value;
            }

        }

        public virtual int CurrentPageNum
        {
            get
            {
                return currentPageNum;
            }
            set
            {
                currentPageNum = value;
            }

        }

        public virtual int PrePageNum
        {
            get
            {
                return prePageNum;
            }
            set
            {
                prePageNum = value;
            }

        }

        public virtual int NextPageNum
        {
            get
            {
                return nextPageNum;
            }
            set
            {
                nextPageNum = value;
            }

        }

        #endregion
        private void LoadDataInit()
        {
            for (int j = 1; j <= 3; j++)    //建立三個table
            {
                CurrentPagecomboBox.Text = currentPageNum.ToString();
                currentPageNum = 1;
                int tableNum = maxPageNum + 1;          //有多少個Table建立
                string tableName = "table" + tableNum.ToString(); //table名稱從table1開始計數
                DataTable dt = new DataTable(tableName);
                AddColumeHeader(dt);  //動態添加表頭
                int JudgeRangeMax = TotalNum + MaxNum;
                for (int i = TotalNum+1; i <= JudgeRangeMax; i++)
                {
                    TotalNum = i;
                    DataRow row = dt.NewRow();
                    row["編碼"] = TotalNum;
                    row["姓名"] = "Jerry"+i.ToString();
                    row["年龄"] = 23;
                    dt.Rows.Add(row);
                    
                }
                maxPageNum +=1;
                ds.Tables.Add(dt);
                //this.dataGridView1.DataSource = ds.Tables[j-1];
            }
            ShowData();
            this.dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;     //设置DataGridView全行显示
            //this.dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;  //設置DataGridView列寬自適應顯示
        }

        private void ShowData()
        {
            this.dataGridView1.DataSource = ds.Tables[currentPageNum].DefaultView;
            //foreach (DataTable table in ds.Tables)
            //{
            //    foreach (DataRow row in table.Rows)
            //    {
            //        foreach (DataColumn column in table.Columns)
            //        {
            //            Console.WriteLine(row[column]);
            //        }
            //    }
            //}

        }

        private void AddColumeHeader(DataTable dt)
        {
            dt.Columns.Add("編碼");
            dt.Columns.Add("姓名");
            dt.Columns.Add("年龄");
         
        }

        private void PrePagelabel_Click(object sender, EventArgs e)
        {
            if (currentPageNum != 1)
            {
                currentPageNum = currentPageNum - 1;
                CurrentPagecomboBox.Text = currentPageNum.ToString();
                this.dataGridView1.DataSource = ds.Tables[currentPageNum - 1];
            }
            else
            {

                //PrePagelabel.Enabled = false;
            }
        }

        private void NextPagelabel_Click(object sender, EventArgs e)
        {
            if(currentPageNum+1<=maxPageNum)
            {

                currentPageNum = currentPageNum + 1;
                CurrentPagecomboBox.Text = currentPageNum.ToString();
                this.dataGridView1.DataSource = ds.Tables[currentPageNum -1];
            }
            else
            {
                //NextPagelabel.Enabled = false;

            }
        }


    }
}

 

注:

该Demo只是实现基本的分页显示功能,对于过程出现的一些特殊情况

1.每页填充数据如果非满table的处理

2.如果读取是数据为0个table

等等,就需要对相应的内容进行调整和控制

仅以此来记录学习日常

 

 

 

 

 

你可能感兴趣的:(C#)