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

I think you need to solve the problem in your data access layer by implementing paging
something like this using LinqToSql

var query = yourPersistenceManager.Context<YourTable>();
-- apply filters
query = query.Skip(pageNumber * pageSize).Take(pageSize);

Or If using ADO.Net you may use some general paged query like this (implementation in oracle)

select * from 
(
     select yourTable.*, rownum row_number from cc1customer 
     where  rownum <= pageSize*pageNumber 
) where row_number > (pageNumber -1) * pageSize

Similary SELECT TOP on sqlserver and ...

It is generaly recommended to use an ORDER BY to fetch consistent data between pages

And in User Interface Layer you must implement paging, manually on WPF DataGrid
Here is a useful article that may be usful

于 2013-02-24T09:52:28.657 に答える
0

この問題を回避する方法は、特定の結果を探すための検索基準をユーザーに提供することです。ユーザーは、少なくとも一般的に、必要がない限り、何千もの結果をページングすることはありません。これを利用して、特定の検索の上位 X 件の結果のみを返します。SELECT TOP 200 *TSQL を使用するか、linq を使用している場合は、クエリが返す結果の量を制限できます。.Take(200)

于 2013-02-23T16:58:07.083 に答える