Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight 使用DomainCollectionView和自定义DomainService无法正确显示分页项目_Silverlight_Ria_Wcf Ria Services_Domainservices - Fatal编程技术网

Silverlight 使用DomainCollectionView和自定义DomainService无法正确显示分页项目

Silverlight 使用DomainCollectionView和自定义DomainService无法正确显示分页项目,silverlight,ria,wcf-ria-services,domainservices,Silverlight,Ria,Wcf Ria Services,Domainservices,我正在开发一个RIA服务应用程序,在服务器端分页和DataGrid中分页项目的显示方面遇到问题。我正在使用一个定制的DomainService,其中PageIndex和PageSize通过查询和几个过滤器参数传递 问题是我的第一页结果显示正确,但当我转到下一组结果时,我的项目会被添加到列表的末尾,而不仅仅是显示从服务器返回的新结果。也就是说,我的DataGrid显示的是从服务器返回的所有累积对象,而不是只显示返回结果的最新页面 首先,我使用的是DomainCollectionView和Domai

我正在开发一个RIA服务应用程序,在服务器端分页和DataGrid中分页项目的显示方面遇到问题。我正在使用一个定制的DomainService,其中PageIndex和PageSize通过查询和几个过滤器参数传递

问题是我的第一页结果显示正确,但当我转到下一组结果时,我的项目会被添加到列表的末尾,而不仅仅是显示从服务器返回的新结果。也就是说,我的DataGrid显示的是从服务器返回的所有累积对象,而不是只显示返回结果的最新页面

首先,我使用的是DomainCollectionView和DomainCollectionViewLoader:


 _context = new StudyQueryContext();
_entityList = new EntityList(_context.PortalStudies);
_loader = new DomainCollectionViewLoader(Load, LoadComplete);
PortalStudies = new DomainCollectionView(_loader, _context.PortalStudies);      
然后我有了相当标准的Load()和LoadComplete()方法:

请注意,我在PortalCountAll方法返回时分配TotalItemCount

为了完整起见,my DomainService查询方法的签名如下:


[Query]
public IEnumerable<PortalStudy> GetPortalStudy(string patientsName, string patientId, string accessionNumber, int startIndex, int pageSize)
{ }  
我假设问题在于如何设置_entityList以及LoadComplete()方法中结果的分配:

在所有基于LINQ的示例中,这个赋值似乎只允许在DataGrid中显示当前结果。由于某些原因,在使用自定义查询方法时,情况似乎并非如此

我想知道当我更改页面时,清除DataGrid的首选方法是什么?我知道我可以在查询之前调用_context.PortalStudies.Clear()来清除结果,但这会导致页面上出现一个flash,其中的项目被清除,并且在查询从服务器返回之前不会再次填充。使用自定义DomainService时,显示当前结果页面的正确方式是什么

使用不支持LINQ的自定义ORM时,可以(而且应该)传递PageIndex和PageSize。它将允许您针对ORM进行分页,但也会使分页稍微复杂化。你要么去,要么去

但是,在您的情况下,错误似乎是您将EntitySet(_context.PortalStudies)传递给了DCV构造函数,而不是EntityList(_EntityList)。

在使用不支持LINQ的自定义ORM时,您可以(也应该)传递PageIndex和PageSize。它将允许您针对ORM进行分页,但也会使分页稍微复杂化。你要么去,要么去


然而,在您的例子中,错误似乎是您将EntitySet(_context.PortalStudies)传递给了DCV构造函数,而不是EntityList(_EntityList)。

RIA服务和IEnumerable的一个主要卖点是,当生成的LINQ序列化到服务器进行处理时,您添加了过滤器和分页客户端。通常不需要将页面索引和页面大小作为参数传递。你能解释一下为什么要手动分页吗?我的搜索结果集可能有上万个结果,所以我想进行服务器端分页,而不是等待在客户端加载搜索的所有结果。从RIA服务文档中可以看出,在使用LINQ时,可以在查询中使用Skip()和Take()进行服务器端分页。我使用的是一个自制的ORM,并且没有LINQ作为接口,因此最简单的实现似乎是通过查询直接传递PageSize和PageIndex来进行服务器端分页。如果不能使用LINQ服务器端,是的,您会遇到严重的问题。Silverlight中所有的酷东西都假设LINQ。有没有可能为了EF而放弃ORM?不幸的是,没有,我真的不可能放弃实体框架的ORM。RIA服务和IEnumerable的一个主要卖点是,当生成的LINQ被序列化到服务器进行处理时,您添加了过滤器和分页客户端。通常不需要将页面索引和页面大小作为参数传递。你能解释一下为什么要手动分页吗?我的搜索结果集可能有上万个结果,所以我想进行服务器端分页,而不是等待在客户端加载搜索的所有结果。从RIA服务文档中可以看出,在使用LINQ时,可以在查询中使用Skip()和Take()进行服务器端分页。我使用的是一个自制的ORM,并且没有LINQ作为接口,因此最简单的实现似乎是通过查询直接传递PageSize和PageIndex来进行服务器端分页。如果不能使用LINQ服务器端,是的,您会遇到严重的问题。Silverlight中所有的酷东西都假设LINQ。有没有可能为了EF而放弃ORM?不幸的是,没有,我真的不可能放弃实体框架的ORM。Kyle——谢谢你的回复,这解决了我的问题!我现在觉得有点傻,没有注意到实体列表应该与DCV一起使用。另外,感谢关于totalCount out参数的提示,我一直在做另一次到服务器的往返以获取总计数,但没有意识到可以这样做。在自定义ORM中使用RIA似乎没有太多问题,希望这能帮助其他人更快地跟上进度。Kyle--感谢您的回复,这解决了我的问题!我现在觉得有点傻,没有注意到实体列表应该与DCV一起使用。另外,感谢关于totalCount out参数的提示,我一直在做另一次到服务器的往返以获取总计数,但没有意识到可以这样做。在将RIA与定制的ORM结合使用方面似乎没有太多问题,希望这能帮助其他人更快地跟上进度。

[Query]
public IEnumerable<PortalStudy> GetPortalStudy(string patientsName, string patientId, string accessionNumber, int startIndex, int pageSize)
{ }  
_entityList.Source = op.Entities;