2013-02-23 3 views
3

У меня есть DataGrid WPF, который я заполняю из DataTable. До сих пор у меня никогда не было более 200 записей, поэтому DataGrid был заполнен безупречно. Однако теперь я должен добавить поддержку более крупных баз данных. Таким образом, я подумал о том, чтобы показать 200 записей пользователя, а затем позволить ему нажимать какую-то кнопку, чтобы отобразить следующие 200 и так далее. Это значит, что я быстрее загружу DataGrid.Как отобразить большое количество строк в 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], есть несколько ответов, которые могут быть h elp вы. [1]: http://stackoverflow.com/questions/14793759/paged-data-in-a-wpf-grid-control/14987256#14987256 – Woodman

+0

@Woodman - Я принял взглянуть на что, однако, я не уверен, что пейджинг - это решение, за которым я работаю. Я просто упомянул об этом, поскольку у меня есть опыт работы с ASP.NET. Я бы предпочел простую кнопку «Показать следующие 200 результатов» или что-то подобное. –

+0

«простой» Показать следующие 200 результатов »« на самом деле означает «пейджинг». поэтому пользователь работает со «страницами данных». Вы можете google для этого ключевого слова для набора возможных решений. Мой ответ в упомянутой теме посвящен более продвинутому сценарию - Виртуализация данных, что означает, что данные легко загружаются на фон. – Woodman

ответ

0

Способ бокового шаговый вопрос заключается в предоставлении пользователю с некоторыми критериями поиска, с которыми они могут выглядеть для конкретных результатов. Пользователи, как правило, по крайней мере не просматривают тысячи результатов, если они этого не делают. Вы используете это, возвращая только лучшие результаты X для любого заданного поиска. Вы можете ограничить количество результатов ваш возвращает запрос, используя TSQL SELECT TOP 200 * или если вы используете LINQ .Take(200)

+0

Проблема в том, что у меня есть строгое требование за этим. Очевидно, что пользователям не следует использовать эту функцию, но функция должна быть там для странного пользователя, который хочет проплыть через результаты. –

+0

@DotNET, тогда я все равно пойду с поиском. Если пользователь ищет что-то конкретное, предоставит им инструменты для его поиска. Тем не менее, я знаю, что это не полезно, если вы придерживаетесь требований. Альтернативой, которая могла бы быть приемлема, было бы предоставление пользователю кнопки «Экспорт в CSV», которая возвращала бы все результаты, и пользователь мог бы затем загрузить ее в Excel и выполнить любой класс, который они хотели бы, все еще уменьшая нагрузку на сервер. Как сказал Вудман, правильная, полноценная подкачка не является тривиальной задачей и потребует значительных усилий по развитию с вашей стороны. – DiskJunky

+0

Спасибо за ввод. Кстати, у меня уже есть кнопка «Экспорт в CSV». Я планирую добавить эту функциональность и вскоре. –

1

Я думаю, вам нужно решить эту проблему в вашем слое доступа данных путем реализации пейджинга
что-то подобное используя LinqToSql

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

Или При использовании ADO.Net вы можете использовать некоторые общие выгружаемого запрос, как это (внедрение в оракула)

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

Similary SELECT TOP на SQLServer и ...

Он Generaly рекомендуется использовать ORDER BY для выборки последовательных данных между страницами

И в Слой пользовательского интерфейса необходимо реализовать подкачки вручную на WPF DataGrid
Here - полезная статья, которая может быть полезной

Смежные вопросы