如何在DataGrid中显示大量行

本文关键字:显示 DataGrid | 更新日期: 2023-09-27 18:00:59

我有一个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();

如何在DataGrid中显示大量行

我认为您需要通过实现分页来解决数据访问层中的问题
使用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数据网格上手动实现分页
以下是一篇有用的文章,它可能是有用的

回避问题的一种方法是为用户提供一些搜索条件,用户可以根据这些条件查找特定的结果。除非迫不得已,否则用户通常不会浏览数千个结果。你可以通过只返回任何给定搜索的前X个结果来利用这一点。您可以通过使用TSQL SELECT TOP 200 *或使用linq .Take(200) 来限制查询返回的结果数量