3

我有一个从 DataTable 填充的 WPF DataGrid。到目前为止,我从未有超过 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();
4

2 回答 2

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

在sqlserverSELECT TOP和 ...

一般推荐使用 anORDER BY来获取页面间一致的数据

用户界面层中,您必须在 WPF DataGrid 上手动实现分页
是一篇有用的文章,可能有用

于 2013-02-24T09:52:28.657 回答
0

回避该问题的一种方法是为用户提供一些搜索条件,他们可以使用这些条件来查找特定结果。至少,用户通常不会翻阅数千个结果,除非他们必须这样做。您可以通过仅返回任何给定搜索的前 X 个结果来利用这一点。您可以使用 TSQLSELECT TOP 200 *或使用 linq来限制查询返回的结果数量.Take(200)

于 2013-02-23T16:58:07.083 回答