这两天在弄大数据显示到ListView中的DataGrid。
不知以前是谁告诉过我还是我自己想的:分页应该会比一次性加载的快。
所以各种百度找了Datagrid分页显示数据,在Test项目中确实可以实现,但是挪用到公司的项目中却不行了,各种排错之后,不能解决的报错是:错误62参数 1: 无法从“Microsoft.Windows.Controls.DataGrid”转换为“System.Windows.Controls.DataGrid”。
老天!什么怨什么仇。我的理解应该是因为DataGrid的页面是Microsoft的UserControl,而分页需要的DataGrid是System下的。好吧,我解决不了。
那么换一种方法,用异步试试。于是又各种百度,恩,有个大神已经有一个现成的项目了。于是准备下载过来各种研究。突然发现,他调用的数据库是现成的已经导出的数据表,而我的数据表是从网上读取的。好吧我是小白,大部分都看不懂,所以也只能放弃辣么好的项目了。
既然不能从根本上解决这个问题(其实是我实在技术不行),那么能不能从页面上做些修改,让数据的加载变的快一点。
实践是检验真理的唯一标准。
我重新看了一下XMAL的文档大纲,我感觉我的文档大纲还是很简单的:
那么从哪里入手呢?a,ha!一个一个试呗:ScrollViewer,就是你了!
去掉<ScrollViewer></ScrollViewer>这层外衣,F5一按。
恩?!我的天,竟然真的快了!
我粗略的估计了一下,之前的数据加载(加载同样多的数据),有ScrollViewer的存在,需要10秒左右的时间,而去掉之后,只需要2秒就足够了!!
那么到底是为什么呢?
还是我的个人猜想:ScrollViewer作为一个滚动条,当页面显示不下的时候,它就会出现,而数据越多,它需要绘制的动作也就越多,数据的加载也就越慢。
各位大神我理解的对不对?
关于分页的错误已经解决了。
下面说下思路。
我是在WPF的群里面询问了一下大神。大神给了我几种解决方案:①重新写ShowPages的方法,将计算分页数和设置分页的功能分开写。②将DataGrid的声明用完整的路径名。③抽象一个接口出来进行分页处理。
因为第②种方法比较简单,所以先试了第②种。
在page.xmal.cs中重新声明。
private DataGrid grdList;
==》private Microsoft.Windows.Controls.DataGrid grdList;
同时ShowPages()的方法中的参数:
DataGrid grd
==》Microsoft.Windows.Controls.DataGrid grd
问题完美解决。
不过经过测试,数据量相对少的时候还是不要分页了,换页的时候会卡。