如何在DataGrid中显示大量行

时间:2013-02-23 16:36:09

标签: c# .net wpf database performance

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

2 个答案:

答案 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)