• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#datagridview分页功能

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

  winform开发是或多或少都会接触datagridview控件,如果数据量大,那么必须使用分页功能,但是datagridview自身并没有分页,所以我们要自己实现。在网上搜了一些发现没有太适合自己的,要么嫌代码过于多不想看,要么自己理解差无法明白其原理,所以打算自己写一个,也希望帮到大家。

第一步:设置4个变量分别记录每页记录数、总记录数、总页数、当前页

        /// <summary>
        /// 每页记录数
        /// </summary>
        public int pageSize = 100;

        /// <summary>
        /// 总记录数
        /// </summary>
        public int recordCount = 0;

        /// <summary>
        /// 总页数
        /// </summary>
        public int pageCount = 0;

        /// <summary>
        /// 当前页
        /// </summary>
        public int currentPage = 0;  

第二步:构造一个虚拟table用于显示(这里不连接数据库,如果需要自行更改),并算出总页数、总记录数。

DataTable table = new DataTable();

/// <summary>
/// 分页的方法
/// </summary>
/// <param name="str"></param>
private void PageSorter()     
{ 

    //创建虚拟表
    DataColumn column1 = new DataColumn("test1", Type.GetType("System.String"));  
    DataColumn column2 = new DataColumn("test2", Type.GetType("System.String"));
    DataColumn column3 = new DataColumn("test3", Type.GetType("System.String"));

    table.Columns.Add(column1);             //将列添加到table表中
    table.Columns.Add(column2);
    table.Columns.Add(column3);
    for (int i = 1; i <= 30000; i++)
    {
        DataRow dr = table.NewRow();            //table表创建行
        dr["test1"] = "资产编号" + i.ToString();
        dr["test2"] = "资产名称" + i.ToString();
        dr["test3"] = "规格型号" + i.ToString();
        table.Rows.Add(dr);                     //将数据加入到table表中
    }

    recordCount = table.Rows.Count;     //记录总行数
    pageCount = (recordCount / pageSize);
    if ((recordCount % pageSize) > 0)
    {
        pageCount++;
    }

    //默认第一页
    currentPage = 1;

    LoadPage( );//调用加载数据的方法
}

第三步:进行加载显示数据

/// <summary>
/// LoadPage方法
/// </summary>
private void LoadPage( )
{
    if (currentPage < 1) currentPage = 1;
    if (currentPage > pageCount) currentPage = pageCount;

    int beginRecord;    //开始指针
    int endRecord;      //结束指针
    DataTable dtTemp;
    dtTemp = table.Clone();

    beginRecord = pageSize * (currentPage - 1);
    if (currentPage == 1) beginRecord = 0;
    endRecord = pageSize * currentPage;

    if (currentPage == pageCount) endRecord = recordCount;
    for (int i = beginRecord; i < endRecord; i++)
    {
        dtTemp.ImportRow(table.Rows[i]);
    } 

    dataGridView1.Rows.Clear();

    for (int i = 0; i < dtTemp.Rows.Count; i++)
    { 
        dataGridView1.Rows.Add(new object[] { dtTemp.Rows[i][0] , dtTemp.Rows[i][1] , dtTemp.Rows[i][2] });
    } 

    labPageIndex.Text = "当前页: " + currentPage.ToString() + " / " + pageCount.ToString();//当前页
    labRecordCount.Text = "总行数: " + recordCount.ToString() + "";//总记录数
}

第四步:设置按钮点击事件

/// <summary>
/// 首页
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnFirst_Click(object sender, EventArgs e)
{
    if (currentPage == 1)
    { return; }
    currentPage = 1;
    LoadPage();
}
/// <summary>
/// 上一页
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnPrev_Click(object sender, EventArgs e)
{
    if (currentPage == 1)
    { return; }
    currentPage--;
    LoadPage();
}
/// <summary>
/// 下一页
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnNext_Click(object sender, EventArgs e)
{
    if (currentPage == pageCount)
    { return; }
    currentPage++;
    LoadPage();
}
/// <summary>
/// 尾页
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnLast_Click(object sender, EventArgs e)
{
    if (currentPage == pageCount)
    { return; }
    currentPage = pageCount;
    LoadPage();
}

第五步:load事件加载时显示数据

private void Form1_Load(object sender, EventArgs e)
{
    PageSorter();//分页 
}

最终展示结果

最后附上源码地址

  链接: https://pan.baidu.com/s/1J4qI5RZ2AhV3ycml2a2htA

  提取码: 49ie


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C# 实现(阿姆斯特朗数)发布时间:2022-07-13
下一篇:
C#只允许运行应用程序的一个实例的正确写法发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap