我有一个具有DataGrid和DataPager的Silverlight应用程序。这些控件的数据源来自数据库。我通过RIA Services访问此数据库。
当我尝试加载所有记录时,收到错误消息: “查询'GetData'的加载操作失败。服务器没有提供有意义的回复;这可能是由于合同不匹配,过早的会话关闭或内部服务器错误引起的。”
通过逐渐限制服务器端结果集的大小,我得出的结论是我收到此错误,因为我的数据集太大了。我的问题是,如何优雅地将大型数据集加载到DataGrid中?我对RIA Services以外的方法持开放态度。
谢谢!
答案 0 :(得分:1)
首先,如果您有手段并且不需要自己编写此代码,请考虑购买解决您问题的UI组件(找到开源解决方案)。对于这些类型的任务,很有可能其他人已经付出了很多努力来解决像这样的问题。作为参考,Silverlight有一个teleric网格控件和一些演示。
如果你不能买一个组件,这里有一些我见过的方法:
最后一个想法是在发送之前在服务器上gzip数据。如果您的瓶颈是传输时间,那么压缩会加快您正在使用的数据类型的速度。
答案 1 :(得分:0)
您应该考虑到可能超出数据源的命令超时。例如,LINQ to SQL的默认值为30秒。如果你想增加它,一个选项是转到构造函数并按如下所示进行更改:
public SomeDataClassesDataContext() :
base(global::System.Configuration.ConfigurationManager.ConnectionStrings["SomeConnectionString"].ConnectionString, mappingSource)
{
this.CommandTimeout = 1200;
OnCreated();
}