我有一个WPF DataGrid,我从DataTable填充。到目前为止,我从未有超过200个记录,因此DataGrid完美填充。但是,我现在必须添加对更大数据库的支持。因此,我想到显示用户200个记录,然后允许他按某种按钮,以显示下一个200等等。这样我就可以更快地加载DataGrid。
最好的方法是什么?我在ASP.NET中有一些分页的经验,但我从来没有在WPF中有这样的要求。
这是我的DataGrid代码:
<DataGrid Name="dgResults"
IsReadOnly="True"
AutoGenerateColumns="True"
AllowDrop="False"
CanUserAddRows="False"
CanUserDeleteRows="False"
CanUserReorderColumns="False"
CanUserResizeColumns="False"
CanUserResizeRows="False"
CanUserSortColumns="False"
Margin="15,10,10,10"
Visibility="Collapsed"
ItemsSource="{Binding}"/>
绑定:
dgResults.DataContext = dtResults.AsDataView();
答案 0 :(得分:1)
我认为您需要通过实施分页来解决数据访问层中的问题 使用 LinqToSql
这样的事情var query = yourPersistenceManager.Context<YourTable>();
-- apply filters
query = query.Skip(pageNumber * pageSize).Take(pageSize);
或者如果使用 ADO.Net ,您可以使用这样的常规分页查询(在oracle中实现)
select * from
(
select yourTable.*, rownum row_number from cc1customer
where rownum <= pageSize*pageNumber
) where row_number > (pageNumber -1) * pageSize
sqlserver上的SELECT TOP
和...
通常建议使用ORDER BY
来获取页面之间的一致数据
在用户界面层中,您必须在WPF DataGrid上手动实现分页,Here是一篇非常有用的文章
答案 1 :(得分:0)
解决问题的一种方法是为用户提供一些搜索条件,以便他们查找特定结果。用户通常至少不会翻阅成千上万的结果,除非必须这样做。您可以通过仅返回任何给定搜索的前X个结果来利用此功能。您可以使用TSQL SELECT TOP 200 *
限制查询返回的结果数量,或者如果您使用的是linq .Take(200)