2010-01-20 36 views
2

的我有了一个DataGrid和DataPager的Silverlight应用程序。这些控件的数据源来自数据库。我通过RIA服务访问这个数据库。Silverlight的 - 无法加载大量数据

当我尝试加载所有记录时,收到一个错误消息: “加载操作失败,查询'GetData'服务器没有提供有意义的回复;这可能是由于合同不匹配造成的,过早会话关机或内部服务器错误。“

通过逐步将结果限制在服务器端设置的大小,我来,因为我的数据集太大,我收到此错误的结论。我的问题是,我如何优雅地将大型数据集加载到DataGrid中?我愿意接受RIA Services以外的方式。

谢谢!

回答

1

首先,如果您有办法并且不需要自己编写此代码,请考虑购买解决您问题的UI组件(找到开放源代码解决方案)。对于这些类型的任务,其他人很有可能花费大量精力来解决像这样的问题。仅供参考,Silverlight的teleric网格控件带有一些演示。

如果你不能买到一个组成部分,这里有一些方法我已经看到了:

  • 建立一个寻呼系统,其中 当前页面数据载入 ,以及新的数据不加载 直到页面切换。你 大概可以缓存以前的结果 ,使这项工作更加顺畅。
  • 需要时加载数据,因此当用户向下/向侧滚动时,一旦到达没有加载数据的单元格,就会加载数据。

想到的最后一个想法是在发送之前将服务器上的数据gzip。如果您的瓶颈是传输时间,那么压缩速度会影响您正在使用的数据类型。

0

您应该考虑到您的数据源可能超出命令超时。 LINQ to SQL的默认值是30秒。如果你想增加这个,一个选项是去构造函数并且改变它如下:

public SomeDataClassesDataContext() : 
       base(global::System.Configuration.ConfigurationManager.ConnectionStrings["SomeConnectionString"].ConnectionString, mappingSource) 
     { 
      this.CommandTimeout = 1200; 
      OnCreated(); 
     }