【c#】DataTable分页处理

【c#】DataTable分页处理【c#】DataTable分页处理

大家好,又见面了,我是你们的朋友全栈君。

   最近在做项目的过程中,需要将从数据库查出来的数据传输给另外一个系统进行分析,我是通过http的post请求发送的,但是在传输的过程中,当传输两万多条的数据是,请求很慢,而且每次只能穿五千多条的数据,剩下的就都丢失了,出现这个问题的原因是对方对http请求最大数据量的设置是2M,所以我们协商的结果是在我们上传数据之前对数据进行分片。所以我就对查出来的数据进行分页,然后按页传输。

  这个分页跟我们平时页面上做的分页的思路一样,我是一次性从数据库里把数据查出来,然后对datatable进行分页,也就是假分页吧。

抽象出来的分页的方法:

        /// <summary>
        /// DataTable分页处理
        /// </summary>
        /// <param name="dt">想要进行分页的DataTable</param>
        /// <param name="PageIndex">当前页数</param>
        /// <param name="PageSize">每页记录数</param>
        /// <returns></returns>
        public DataTable GetPagedTable(DataTable dt, int PageIndex, int PageSize)
        {
            if (PageIndex == 0)
                return dt;//0页代表每页数据,直接返回

            DataTable newdt = dt.Copy();
            newdt.Clear();//copy dt的框架

            int rowbegin = (PageIndex - 1) * PageSize;
            int rowend = PageIndex * PageSize;

            if (rowbegin >= dt.Rows.Count)
                return newdt;//源数据记录数小于等于要显示的记录,直接返回dt

            if (rowend > dt.Rows.Count)
                rowend = dt.Rows.Count;
            for (int i = rowbegin; i <= rowend - 1; i++)
            {
                DataRow newdr = newdt.NewRow();
                DataRow dr = dt.Rows[i];
                foreach (DataColumn column in dt.Columns)
                {
                    newdr[column.ColumnName] = dr[column.ColumnName];
                }
                newdt.Rows.Add(newdr);
            }
            return newdt;
        }

具体调用:

//总记录数,dt为想要对其进行分页的DataTable
int parkingCount = dt.Rows.Count;
int pageSize = 4000; //每页显示记录数
int pageCount;       //总页数
if (parkingCount % pageSize == 0)
{
    pageCount = parkingCount / pageSize;
}
else
{
    pageCount = parkingCount / pageSize + 1;
}

//pageIndex:当前页数
//在这里因为是控制台程序,所以不能实时接收pageIndex
List<String> list = new List<String>();
for (int pageIndex = 1; pageIndex <= pageCount; pageIndex++)
{
        DataTable pageDt = GetPagedTable(dt, pageIndex, pageSize);
        String json = JsonHelper.Serialize(dt);
        list.Add(json);
        LogHelper.Info("查询出来的停车记录" + json);
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/105678.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • c#操作数据库(winform如何修改数据库设置)

    鉴于很多童鞋们对数据库操作不是很熟悉,这里对数据库操作的相关知识做个介绍。首先介绍ADO.NET中的几个常用的对象,介绍的很简单。1.SqlConnection 这是数据库连接对象,通过对其进行实例化来创建针对数据库的连接,其参数为数据库连接字符串。如下:S

    2022年4月13日
    80
  • Ubuntu下使用SSH 命令用于登录远程桌面

    Ubuntu下使用SSH 命令用于登录远程桌面问题描述基础:ssh命令连接step1:SSH程序的安装step2:服务器启动ssh服务step3:查询服务器的ip地址step4:在本地主机端ssh远程登录服务器step5:退出远程登录进阶:利用公钥省去口令输入step1生成密钥对step2复制公钥至服务器参考资料问题描述做DL的经常需要在一台电脑(本地主机)上写代码,另一台电脑(服务器…

    2022年10月21日
    2
  • 微信小程序+java后台[通俗易懂]

    微信小程序+java后台[通俗易懂]      博主是大四学生,毕业设计做的是微信小程序+java后台。陆陆续续经历了三个月(因为白天要实习又碰上过年玩了一阵子),从对微信小程序一无所知到完成毕设,碰到许多问题,在跟大家分享一下自己的经历和一个小程序怎么从零开始。希望像我一样的小程序初学者看了这篇文章,可以少花费一些不必要的时间,少踩一点坑。          开发一个微信小程序需要https域名以及服务器,博主购买的是阿里…

    2022年7月8日
    48
  • linux shell 进去 uefi,怎么进入EFI Shell及怎么为UEFI截图「建议收藏」

    linux shell 进去 uefi,怎么进入EFI Shell及怎么为UEFI截图「建议收藏」目前大多数主板都采用了UEFI代替了原始的BIOS,其功能与可玩性也大大的增强了。EFIShell功能相当强大。有些主板内建EFIShell,有些没有,但也可以将EFIShell放进U盘中加载EFIShell以达到同样的效果。EFIShell自带许多功能强大的应用软件。它本身就是一个小小的操作系统了。这里我提供华擎UEFI进入EFIShell的办法及对截图工具的简要说明。$v1z’…

    2022年7月24日
    32
  • ubuntu clion激活码【2021.8最新】[通俗易懂]

    (ubuntu clion激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html1STL5S9V8F-eyJsa…

    2022年3月27日
    115
  • spa 单页面_浅谈数学在生活中的应用论文

    spa 单页面_浅谈数学在生活中的应用论文https://blog.csdn.net/huangpb123/article/details/86183453单页Web应用(singlepagewebapplication,SPA):SPA是一种特殊的Web应用,是加载单个HTML页面并在用户与应用程序交互时动态更新该页面的。它将所有的活动局限于一个Web页面中,仅在该Web页面初始化时加载相应的HTML…

    2022年4月19日
    51

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号