我在我的项目中使用WPF Telerik GridView和DataPager,我想使用这两个控件显示Items列表。
我将DataPager的 Source 属性绑定到DataGrid的 Items 属性(与原始演示一样)。 我的问题是:datapager在第一次调用时加载所有实体!我想加载大量的页面大小(20)。
这是我的代码:
private void LoadProductsBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
using (AccountingContext context = new AccountingContext())
{
Dispatcher.Invoke((Action)(() => grdProducts.ItemsSource = new ObservableCollection<Item>(context.Items.Include("UnitType").Include("Producer").ToList())));
}
}
<telerik:RadDataPager Name="dataPager" PageSize="20" Source="{Binding Items, ElementName=grdProducts}" />
<telerik:RadGridView Name="grdProducts">
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn Header="{x:Static sr:EntitiesResource.ID}" DataMemberBinding="{Binding Path=ID}" />
<telerik:GridViewDataColumn Header="{x:Static sr:EntitiesResource.ProductName}" DataMemberBinding="{Binding Path=Name}" Width="200" />
<telerik:GridViewDataColumn Header="{x:Static sr:EntitiesResource.Producer}" DataMemberBinding="{Binding Path=Producer.Name}" Width="200" />
<telerik:GridViewDataColumn Header="{x:Static sr:EntitiesResource.UnitType}" DataMemberBinding="{Binding Path=UnitType.Name}" Width="150" />
<telerik:GridViewDataColumn Header="{x:Static sr:EntitiesResource.Price}" DataMemberBinding="{Binding Path=Price}" Width="150" />
<telerik:GridViewDataColumn Header="{x:Static sr:EntitiesResource.Description}" DataMemberBinding="{Binding Path=Description}" Width="*" />
</telerik:RadGridView.Columns>
</telerik:RadGridView>
答案 0 :(得分:1)
默认情况下,datapager处理数据集合,并在内部拆分为指定的页面大小。所以你说得对,然后是页面就是对的。但是对于您希望在每个页面更改时检索data = pagesize的场景,您需要自定义rad数据分页器Source。基本上,PageSource的类型为IPagedCollectionView。因此,您需要创建一个实现IEnumerable和Telerik.Windows.Data.IPagedCollectionView接口的类,为这些接口成员提供实现,您将能够实现您的需求。在这里解释它非常冗长。但我可以建议 - 下载WPF的RadControls并使用DataPager查看Endless Paging。这提供了您正在寻找的要求。
希望我能够为您提供一些指示。
Lohith(技术传播者,Telerik India)