Silverlight RIA服务-分页
我正在测试RIA服务。我建立了一个RIA服务库,并构建了一个自定义域服务(即,不是实体框架域服务)。我正在从Silverlight应用程序访问库,一切正常。我可以调用RIA服务函数并获得结果 我的问题是分页。我在任何地方都找不到对使用自定义域服务的RIA服务使用分页的描述。我的RIA服务正在访问专门的DAL以访问数据(与实体框架不兼容)。我所发现的是将分页参数(即页面、页面大小)传递给RIA服务函数的指示。我已经完成了这项工作——创建了一个RIA服务函数,它为页面[索引]和页面大小提供了额外的参数。我正在Silverlight中使用DataGrid和DataPager进行测试。调用带有分页参数的RIA服务(并返回数据),然后填充DataGrid。我遇到的问题是当我转到另一页时。发生的是RIA服务被调用了两次。第一次使用正确的参数(即正确的页面索引),然后再次使用页面索引(零)。即,始终重置为第一页。我不明白为什么会这样;我相信我把每件事都安排妥当了(希望如此)。以下是XAML脚本:Silverlight RIA服务-分页,silverlight,pagination,wcf-ria-services,Silverlight,Pagination,Wcf Ria Services,我正在测试RIA服务。我建立了一个RIA服务库,并构建了一个自定义域服务(即,不是实体框架域服务)。我正在从Silverlight应用程序访问库,一切正常。我可以调用RIA服务函数并获得结果 我的问题是分页。我在任何地方都找不到对使用自定义域服务的RIA服务使用分页的描述。我的RIA服务正在访问专门的DAL以访问数据(与实体框架不兼容)。我所发现的是将分页参数(即页面、页面大小)传递给RIA服务函数的指示。我已经完成了这项工作——创建了一个RIA服务函数,它为页面[索引]和页面大小提供了额外的参
<riaControls:DomainDataSource
Name="ddsScheduleTemplates"
LoadSize="20"
QueryName="GetPagedScheduleTemplates"
AutoLoad="True"
>
<riaControls:DomainDataSource.DomainContext>
<ds:ScheduleEngineDomainContext/>
</riaControls:DomainDataSource.DomainContext>
<riaControls:DomainDataSource.QueryParameters>
<riaControls:Parameter ParameterName="UserLogonName" Value="admin" />
<riaControls:Parameter ParameterName="UserPassword" Value="admin" />
<riaControls:Parameter ParameterName="Page" Value="{Binding ElementName=dpScheduleTemplates, Path=PageIndex}" />
<riaControls:Parameter ParameterName="PageSize" Value="{Binding ElementName=dpScheduleTemplates, Path=PageSize}" />
</riaControls:DomainDataSource.QueryParameters>
</riaControls:DomainDataSource>
<StackPanel>
<dg:DataGrid
Name="ScheduleTemplatesGrid"
MinHeight="100"
MaxHeight="300"
IsReadOnly="True"
ItemsSource="{Binding ElementName=ddsScheduleTemplates, Path=Data}"
/>
<dg:DataPager
x:Name="dpScheduleTemplates"
PageSize="10"
Source="{Binding ElementName=ddsScheduleTemplates, Path=Data}"
PageIndexChanged="dpScheduleTemplates_PageIndexChanged"
/>
</StackPanel>
我修改了上面的脚本以调用常规加载函数(GetPagedScheduleTemplates-返回所有记录),并调整了该函数的QueryParameters列表。DataGrid加载正确,分页工作正常
这让我很困惑——看起来DataPager需要加载所有数据才能正常工作——但我做了一个测试,在一个分页请求操作中加载了所有数据;(即分页属性设置并调用RIA服务函数的分页版本),但DataGrid仍会重置
注意:我已经读到DataPager要求对返回列表进行排序-所以我这样做了-但并不影响操作-页面总是重置为第1页-下面是RIA服务功能的返回列表
newList.ToArray().AsQueryable().OrderBy(x=>x.ScheduleTemplateID)
所以,;我的问题是——有没有人见过这种行为——或者我犯了一个可怕的错误——如果有,我做错了什么
彼得好吧——这需要一些调查。我不知道Ria服务的一些局限性,也不知道如何与客户沟通。据我所知,分页信息通过基于linq的操作传送到ria服务。我不太喜欢Ria服务,但我发现有人做了一些不错的工作,建立了一个库,通过自定义域服务公开分页信息。图书馆的网址为:
有关使用图书馆的人员和方式的信息:
ryanmwright.com/tag/ria-services
此库的目的是提供更一般的功能,但重点是MS提供的Ria DomainServices的分页限制
彼得好吧——这需要一些调查。我不知道Ria服务的一些局限性,也不知道如何与客户沟通。据我所知,分页信息通过基于linq的操作传送到ria服务。我不太喜欢Ria服务,但我发现有人做了一些不错的工作,建立了一个库,通过自定义域服务公开分页信息。图书馆的网址为:
有关使用图书馆的人员和方式的信息:
ryanmwright.com/tag/ria-services
此库的目的是提供更一般的功能,但重点是MS提供的Ria DomainServices的分页限制
彼得看来你做了什么让人困惑的事。我认为您已经加倍了分页逻辑,您正在服务器上手动分页,并且在客户端上有域数据源控制分页 您已将
LoadSize
属性设置为20。这告诉RIA服务,您希望一次翻页20条记录的数据块。因此,如果基础域操作ddsScheduleTemplates返回50条记录,您将得到三个页面,域数据源控件将自动附加.Take(20)
和.Skip(##)
,以一次只过滤一个页面的结果集
但是,您似乎还向域操作添加了参数以支持分页,因为您有页面
和页面大小
的参数。我假设如果您传入Page=2
和PageSize=20
,那么您在服务器上的Linq查询中添加了.Skip(40)
和.Take(20)
。如果是这种情况,那么域数据源控件将认为只有20条记录,因为这是您的操作将返回的最多记录。所以,只有一页
如果这没有帮助,那么发布服务器端域操作的代码,我会看看是否可以为您解决问题。好吧,看起来您做了一些令人困惑的事情。我认为您已经加倍了分页逻辑,您正在服务器上手动分页,并且在客户端上有域数据源控制分页 您已将
LoadSize
属性设置为20。这告诉RIA服务,您希望一次翻页20条记录的数据块。因此,如果基础域操作ddsScheduleTemplates返回50条记录,您将得到三个页面,域数据源控件将自动附加.Take(20)
和.Skip(##)
,以一次只过滤一个页面的结果集
但是,您似乎已将参数添加到域操作中以支持