Silverlight RIA服务-分页

Silverlight RIA服务-分页,silverlight,pagination,wcf-ria-services,Silverlight,Pagination,Wcf Ria Services,我正在测试RIA服务。我建立了一个RIA服务库,并构建了一个自定义域服务(即,不是实体框架域服务)。我正在从Silverlight应用程序访问库,一切正常。我可以调用RIA服务函数并获得结果 我的问题是分页。我在任何地方都找不到对使用自定义域服务的RIA服务使用分页的描述。我的RIA服务正在访问专门的DAL以访问数据(与实体框架不兼容)。我所发现的是将分页参数(即页面、页面大小)传递给RIA服务函数的指示。我已经完成了这项工作——创建了一个RIA服务函数,它为页面[索引]和页面大小提供了额外的参

我正在测试RIA服务。我建立了一个RIA服务库,并构建了一个自定义域服务(即,不是实体框架域服务)。我正在从Silverlight应用程序访问库,一切正常。我可以调用RIA服务函数并获得结果

我的问题是分页。我在任何地方都找不到对使用自定义域服务的RIA服务使用分页的描述。我的RIA服务正在访问专门的DAL以访问数据(与实体框架不兼容)。我所发现的是将分页参数(即页面、页面大小)传递给RIA服务函数的指示。我已经完成了这项工作——创建了一个RIA服务函数,它为页面[索引]和页面大小提供了额外的参数。我正在Silverlight中使用DataGrid和DataPager进行测试。调用带有分页参数的RIA服务(并返回数据),然后填充DataGrid。我遇到的问题是当我转到另一页时。发生的是RIA服务被调用了两次。第一次使用正确的参数(即正确的页面索引),然后再次使用页面索引(零)。即,始终重置为第一页。我不明白为什么会这样;我相信我把每件事都安排妥当了(希望如此)。以下是XAML脚本:

<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(##)
,以一次只过滤一个页面的结果集

但是,您似乎已将参数添加到域操作中以支持