.NET中GRIDVIEW数据源不支持服务器端的分页,请教高手呀!紧急

.NET中GRIDVIEW数据源不支持服务器端的分页,请教高手呀!紧急,第1张

DataReader不支持分页,使用DataSet
protected void GridView1_PageindexChanging(object sender, GridViewPageEventArgs e)
{
thisGridView1PageIndex = eNewPageIndex;
BindData();
}
private void BindData()
{
SqlConnection conn = new SqlConnection();
connConnectionString = "Data Source=17212178;Initial Catalog=FamilyFinanceSystem;Integrated Security=TRUE";
SqlCommand comm = new SqlCommand("Select from rdParentItem", conn);
SqlDataAdapter da = new SqlDataAdapter(comm);
DataSet ds = new DataSet();
connOpen();
daFill(ds);
connClose();
GridView1DataSource = dsTables[0]DefaultView;
GridView1DataBind();
}

传统分页的话,一般只考虑传页数和每页数据条数这两个参数给后端,为了方便后面描述,我们给这个传参方式起个名字叫 传统分页 。这种传参方式对于静态数据(数据不会变动)的分页是没问题的,因为每条数据的顺序、数据的总量,都是不变的。

如果出现数据顺序变动或者数据总量变动的分页需求时,单纯的传page和limit已经不能解决了。

不同的需求需要显示的列表也不一样。关于列表分页我认为主要关系到两个方面, 总量 (列表头插入了新数据) 和 排列顺序 传统分页 总量不变,排列顺序不变 的列表下是没有任何问题的,但只要这两个要素其中一个是变化的, 传统分页 方式就会出现BUG(具体案例后面会讲到)。关于上面提到两个要素对应的需求举例:

现在有一个积分排行榜

假定每页显示3条数据,在某一时刻拿第一页数据时,得到 A、B、C三条数据。就在此时,用户D突然增加了100积分,最新的排行榜情况变成了

传统分页 的情况下,获取第二页数据时,即从当前排行榜第四条数据开始获取,得到 C、E,用户看到的数据就变成 A、B、C、C、E。这里C出现了2次,而且D消失了。这就是传统分页用在 数据排列顺序会改变的列表 时会出现的问题,因为列表顺序改变导致出现重复数据和丢失数据。

这种 总量不变,排列顺序改变 的分页问题我能想到的暂时有两种方案解决:一次性取出、排行榜快照、通过变动记录表拿数据。

这里说的一次性取出是针对类似“top100”这种取有限条数的需求。在比较简单的列表数据结构下一次性取出100条数据对服务器性能来说问题不大,但是在复杂数据结构下(涉及关联多个表、数据格式化、数据处理等)一次性处理100或更多的数据肯定是糟糕的做法。

排行榜主要的分页问题是 影响排名的字段的值在不断变化导致列表顺序不断改变 ,我们现在可以一次性取出整个列表但是又担心复杂的数据结构导致服务器性能问题。那如果我们把整个功能拆分一下,用异步的思想来做这个功能设计如何呢。

我们分两个接口来做这个功能:获取排行榜列表和获取用户排行榜数据。

获取排行榜列表接口 一次性取整个排名列表的用户ID和排名相关的字段数据,这样就保证了整个列表的排序是不变的同时,又不增大服务器性能。

获取用户排行榜数据接口 负责取排行榜要显示的用户的其他数据,这个接口接受多个用户ID的作为参数。这个接口做了类似分页的功能,前端每次从排行榜中按分页的方式按顺序取部分用户ID,然后通过这个接口获取具体数据显示给用户。

下面以例子的方式来做具体说明:

这是一个 积分排行 top100

这里的排行条件是 积分 ,那我们的 获取排行榜列表接口 只需要取“用户ID”和“积分”即可,剩下的 “昵称”、“胜率”等数据通过 获取用户排行榜数据接口 获取。

前端先请求 列表接口,获取到一下数据:

然后根据这个列表数据,先取前10条的用户ID:5、12、60、2、77… 去请求 获取用户排行榜数据接口,把获得的用户数据填充到排行榜中。当用户下滑加载更多数据时再去列表取在11-20的用户ID重复上面的 *** 作。

如果是 top100 的需求,这个方案是比较 推荐 的,因为没有性能和储存空间上的额外消耗。

因为考虑到主要问题出在排列顺序是变化的,而且通过其他APP也有看到过按时刷新的排行榜,所以想到了用快照的方式来解决。

可以通过写一个定时脚本,每5分钟生成一次排行榜的快照信息并存下来。接口请求时直接从快照中取数据,这一定程度上解决了列表排序一直在变化问题。这里之所以说只解决了一定程度,是因为在每次刷新快照数据的时候,可能有用户刚好卡在这个时间点之间去请求(刷新快照前用户请求了第一页数据,刷新快照后用户请求第二页,这就出现 传统分页 同样的问题了)。

可以通过在快照中加上 版本号 来解决问题。例如在生成快照的时候以当前时间戳作为版本号跟快照数据一起保存,同时需要系统保存多份快照数据以便用户获取旧快照数据。请求接口时默认拿最新版本的快照,如果接口传入了版本号就拿对应版本号的快照数据。

每个完备的系统都会有数据变动的记录表,用于追踪数据变动和 *** 作明细。记录变记录着数据每次变动前后的变化和变动时间,这一特性为使得数据的每次变动都有迹可循,我们就是利用这一点来做排行榜的分页。

我们分页出问题的地方就是因为数据在不断变化导致排序不停改变。上面说到每次数据变动都会有记录,那我们只需要根据某一时刻之前用户的数据来做排名,是不是就解决数据不断变动这个问题。文字表达可能不太直观,看下面的数据演示应该能比较好理解。

假定用户 A、B、C 初始默认都是100积分

表: score_log

假定在03分的时候请求了数据,通过下面的SQL语句就可以拿到03分之前的数据排行。

得到第一页数据:

第二页数据:

关于这种方式的请求,前端需要记录发起第一次请求时的时间,以后每页的请求都带着这个时间。

评论列表一般按照倒叙排列,而且顺序不变。因为是倒叙排列,所以最新的用户评论会放在最顶部,这就会导致问题了。我们还是用实际例子来说。

假定每页拿3条数据,此时请求第一页,得到ID分别5、4、3的评论。在请求第二页之前,突然又来了一条留言,此时列表变成:

传统分页 方式,此时获取第二页会得到ID 3、2、1,这里ID 3 就重复取出来了。

这个问题的解决方案相比排行榜列表分页问题简单而且易懂。评论ID是一个自增的int字段,新的评论ID总是比旧评论ID要大,利用这一点我们可以很好的解决问题。

接口传参:

limit 就不用作解释,说一下lastid。当获取第一页数据时,因为没有上一页所以 lastid 传空或者不传,此时服务器取最新的数据即可。获取第二页数据时,lastid 传第一页最后一条数据的ID,此时服务器取 ID < lastid 的数据,这就保证最新的评论不会影响到当前用户的分页。

这里做一个扩展,我们有时候看到有的页面在刷新的时候,会提示有多少条新的未查看评论(即列表头新的数据),这个功能的实现原理跟我们上面分页的原理差不多。在获取第一页数据时,把第一页的第一条数据ID保存下来,后面请求每一页时都把第一条ID( firstid )带上,服务器每次查 ID > firstid 的数据条数,如果大于0即表示有新的评论。

首先说一下,下面提供的方法我自己也不满意(如果有什么想法欢迎大家留言交流)。参考了微博的评论排序也存在上面说到的分页bug,感觉要完美解决这个需求的分页问题花费的代价(实现时间、服务器性能、存储空间等)大于功能本身,所以建议读者选择比较折中的方式来处理(与产品或上级沟通实现的难度)。

这个需求相比评论列表,多了点赞的功能,列表按点赞数量倒叙排列。先说一下不严谨情况下这个分页的实现方式:

这种方式会有两个问题:

我们可以沿用上面讲到的两个需求的解决方案。在解决列表排序问题上,我们可以沿用排行榜的 通过变动记录表拿数据 方式,增加一个表去记录评论的点赞变动记录(用空间换效率)。

表结构:

分页用到的查询语句:

问题一:数据库 分页是什么意思 数据库分页也是在数据库里写查询语句,不同的是查询的都是指定条数到指定条数的数据,不是一次性把数据全查出来。

问题二:分页是什么意思 后台分页则是指后台仅返回某个范围内的数据,如第100到200条的数据,每次都需要与后台进行查询交互。
因为把所有的数据返回到前台时,前台压力太大,数据从后台传到前台所需要的时间太多,导致系统变得响应很慢。这时候就要考虑使用后台分页了,每次只查询所需要的数据,由后台返回,这样每次只需要返回少量的数据就可以了。

问题三:word中的分页符是什么意思? word文档是连续文档,前一个段落直接连着后一个段落。
如果想到某一段以后,后面就不在连着了,下一个段落放到下一页去,这时候就需要在这个段落后面加一个分页符。
具体分页符的插入方法可以参考经验里面的这篇文档。
jingyanbaidu/3

问题四:什么叫“分页查询”? 当数据量过大时,可能会导致各种各样的问题发生,例如:服务器资源被耗尽,因数据传输量过大而使处理超时,等等。最终都会导致查询无法完成。
解决这个问题的一个策略就是“分页查询”,也就是说不要一次性查询所有的数据,每次只查询一“页“的数据。这样分批次地进行处理,可以呈现出很好的用户体验,对服务器资源的消耗也不大。
打一个比方,有很多很多人要过河,而只有一条船摆渡。若让所有人都上船,肯定会导致沉船(资源耗尽);若换一条超大的船,除了换船要很高的成本外,上船下船也要耗费很长时间。
所以最好的解决方法是,根据船的容量,每次只上一部分人。等这一船人过河以后,再摆渡下一批人。

问题五:word里每章节要求独立分页 什么意思 1打开要编辑的word 文档。
2将鼠标光标移到你需要分页的地方,
3在菜单栏中找到页面布局选项卡,选择分隔符。
4点击分隔符。在下拉列表中选择分页符,点击选择即设置成功,将会福到成功分页。
5还有更为简单的一种方法,首先将鼠标光标放在需要分页的地方。
6然后按住ctrl键再按回车键,这样便一次性达到了分页的目的。使用起来非常的方便快捷。

问题六:什么是分页显示? 分页啊,应该是一页显贰不完,分多页显示。
比如:数据库有2万条记录,在页面显示的时候一个页面显示不完,就采用分页,每页显示多少条,就有“首页 上一页 下一页 尾页”
不知道是不是问的这个

问题七:word中段落设置中段前分页是什么意思? 直接从当前页跳至下页就是你分段的时候敲回车就会跳到下页

问题八:页面文件、分页文件,“页面”、“分页”是什么意思啊 页面文件,是指 *** 作系统反映构建并使用虚拟内存的硬盘空间大小所使用的文件。要整理页面文件,首先将页面文件从原先所在的驱动器移动到其他驱动器,然后对原来驱动器进行整理,最后再将页面文件移回到原驱动器上,此时页面文件就会存放在连续的磁盘空间中了。具体来说,在 windows *** 作系统下(Windows 2000/XP)pagefilesys这个文件,它就是系统页面文件(也就是大家熟知的虚拟内存文件),它的大小取决于打开的程序多少和你原先设置页面文件的最小最大值,是不断变化的,有时可能只有几十M,有时则达到600M以上。
什么是分页?
无论你的NT服务器的内存有多大,它总是显得不够充足。当物理RAM从低端开始运行时,Windows NT使用了分页文件Pagefilesys。为了运行不同的进程和应用程序,Pagefilesys给物理内存分配了一些空间。在这些空间内允许交换数据页。
显然,系统在文件系统缓存中查找数据而不是在驱动器上搜索数据会提高系统的性能。太多的搜索 *** 作会使处理器停顿下来。这就是短语“买更多的内存”成为计算机时代的陈词滥调的原因之一:RAM是你的朋友。管理内存可使你的“朋友”更高效。
Windows NT下的Windows Task Manager ([Ctrl][Alt][Delete] | Task Manager)是一个可以为访问内存使用情况提供快捷重要信息的察看工具。考虑物理内存的大小并计算MEM Usage计数器的值,Memory Usage History提供了内存活动的即时情况。正如图22A所示,把CPU Usage计数器和CPU Usage History与MEM Usage计数器一作比较,就可以简单地得到性能的总的评价。如果你必须决定是否要立刻启动
Diskperf以进一步调查分页过多问题那就非常便利了。
Windows NT的分页文件可以通过Control Panel |System | Performance 标签| Virtual Memo锭y进行管理。在这里,你可以控制分页文件的几个设置(包括大小和区域)。显然,你可以允许系统对它进行处理,但是为了获得最佳配置还是使用Vitual Memory Manager (VMM)为好。
222 Windows NT分页文件的基本原则
Windows NT最初通过在物理RAM的数量上加上12MB以设定开始的分页文件大小。这12MB考虑到在系统故障时分页文件内容可被倾倒到一个日志中以防万一。如果看见了“停止”框和接着出现蓝屏死机,你就在 *** 作中遇上了这个问题。如果开始的分页文件的大小小于这个数(物理RAM的数量上加上12MB),就会开始收到Running Out Of Memory消息。
Windows NT *** 作系统和其应用程序使用了大约10MB的RAM。所以,应该从物理RAM的数量上减去这个值。这会给你充分的回旋余地决定你的服务器的内存要求。
Windows NT要求分页文件的最小值为2MB。如果分页文件太小或者根本不存在,启动时就会出现警告消息。
分页文件应该总是遵循RAM的最小值+12的规则。在任何情况下,分页文件都不能比服务器中的RAM的大小小。如果系统有32 MB的物理RAM,加上12MB后分页文件总的大小就是44MB。显然,分页文件越大于好。但是,我的意思是增加对物理RAM的投资,而不是简单地增加分页文件的大小。如果没有足够的RAM,驱动器就会花太多的时间对分页文件进行读写。这只会降低你的服务器的速度,如果你不得>>

问题九:虚拟内存里的分页是什么意思 分页文件:硬盘上一个或者多个隐藏文件pagefilesys,Windows用于存储未存入内存的部分程序和数据文件。页面文件和物理内存或随机存取内存(RAM)构成了虚拟内存。Windows会根据需要将数据从页面文件移至内存,或将数据从内存移至页面文件以便为新数据释放内存。也叫“交换文件”。
望采纳!!!

问题十:打印机自动分页什么意思 根据你页面设置的尺寸大小
打印机将会自动根据你页面设置的尺寸大小将文档分页打印。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13488652.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-17
下一篇 2023-08-17

发表评论

登录后才能评论

评论列表(0条)

保存