2013-02-23 2 views
3

DataTable에서 채우는 WPF DataGrid가 있습니다. 지금까지 200 개가 넘는 레코드가 없었기 때문에 DataGrid에 완벽하게 채워졌습니다. 그러나 이제는 더 큰 데이터베이스에 대한 지원을 추가해야합니다. 따라서 나는 200 명의 사용자 레코드를 보여주고 다음 200 번을 표시하기 위해 어떤 종류의 단추를 누를 수있게하려고 생각했다. 이것은 DataGrid를 더 빨리로드하기위한 것입니다.DataGrid에 많은 수의 행을 표시하는 방법

어떤 점이 최선의 방법일까요? ASP.NET에서 페이징에 대한 경험이 있지만 WPF에서 이와 같은 요구 사항을 한 번도 경험하지 못했습니다. 바인딩

<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]을 (를) 참조하십시오. 너. [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 결과 만 반환하여이를 활용할 수 있습니다. 당신은 결과의 양을 제한 할 수 있습니다 LINQ 난 당신이 뭔가 같이 페이징
을 구현하여 데이터 액세스 레이어의 문제를 해결하기 위해 필요가 있다고 생각 .Take(200)

+0

문제는 내가 엄격한 요구 사항을 가지고 있다는 것입니다 이것 뒤에. 사용자가이 기능을 사용하지 않는 것이 분명하지만 결과를 헤엄 쳐 가고 싶은 이상한 사용자를 위해 기능이 있어야합니다. –

+0

@DotNET 그럼 검색 방법을 계속 사용하겠습니다. 사용자가 특정 항목을 찾으려면 도구를 제공하십시오. 즉, 요구 사항에 집착하는 경우 도움이되지 않는다는 것을 알고 있습니다. 받아 들일 수있는 대안은 사용자에게 결과를 반환하는 "CSV로 내보내기"버튼을 제공하는 것입니다. 그러면 사용자는 Excel에서로드하고 원하는 행 행 마이닝을 수행하면서 서버의로드를 줄입니다. Woodman이 말했듯이 적절한 풀 온 페이징은 사소한 작업이 아니며 중요한 개발 노력이 필요합니다. – DiskJunky

+0

입력 해 주셔서 감사합니다. 덧붙여서 나는 이미 "CSV로 내보내기"버튼을 가지고 있습니다. 나는이 기능을 곧 추가 할 계획이다. –

1

을 TSQL SELECT TOP 200 *을 사용하거나 사용하는 경우에 의해 쿼리 반환 사용 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 SQLSERVER에 SELECT TOP와 ...는

이 generaly 수동으로, 당신은 페이징을 구현해야 페이지

그리고 사용자 인터페이스 층의 사이에 일관성있는 데이터를 가져 오기 위해 ORDER BY를 사용하는 것이 좋습니다 WPF DataGrid에서
Here은 유용 할 수있는 유용한 기사입니다.

관련 문제