2011-01-06 5 views
15

WPF 및 Windows Forms에서 경험이 있지만 WPF DataGrid (WPF DataGrid는 .NET 4에만 포함되었거나 Codeplex에서 .Net 3.5에 추가 될 수 있음)는 사용하지 않았습니다. , 이해 했어). 나는 많은 양의 데이터에 대해 이러한 컨트롤 중 하나를 사용하는 앱을 devlop하려고하고 WPF DataGrid의 읽기 성능이 WPF DataGridView와 관련된 문제 일 수 있습니다.이 경우인가요?WPF DataGrid 대 Windows Forms DataGridView 대

타사 컨트롤을 사용하고 싶지 않습니다.

Windows Forms DataGridView는 많은 양의 데이터에 대해 WPF DataGrid보다 뛰어난 성능을 제공합니까?

WPF를 사용하는 경우 .Net 4의 DataGrid가 크게 개선되지 않는 한 .Net 3.5S SP1을 사용하는 것이 좋습니다.

또한 나는 DataTable을의 나는 윈도우 폼에 더 적합하다고 생각하는 .. WPF DataGrid에 훨씬 더 빨리, 내가 생각

답변

17

WPF로 향하는 다른 요구 사항이 없으면 필요에 따라 WinForms DataGridView를 사용하는 것이 좋습니다.

WPF DataGrid는 '대역 외'릴리스로서 Codeplex를 통해 사용할 수 있습니다. 즉, 이들은 결국 WPF API로 나아갈 수있는 컨트롤이지만 초기에 코드 플렉스에서 릴리스되므로 우리는 그 혜택을 누릴 수 있습니다 다음 주요 .NET 릴리스 전에. .NET 4.0 또는 코드 플렉스 DataGrid를 사용할 수 있습니다. 내가 아는 한 그들은 동일하고 동일합니다. WPF DataGrid는 DataTable에서 아주 잘 작동합니다. 내 다음 문서의 예를 참조 :

http://www.codeproject.com/KB/WPF/WPFDataGridExamples.aspx

그러나, WPF 프레임 워크와 비주얼 윈폼보다 약간 더 헤비급이다. 또한 WinForms DataGridView는 매우 성숙합니다.

http://msdn.microsoft.com/en-us/library/ms171622.aspx

: 매우 큰 데이터 세트

에서, 윈폼 DataGridView에 매우 큰 격자 (수백만 개의 행)에 매우 중요하다 WPF 데이터 그리드에 존재하지 않는 하나 개의 특징을 가지며,이 가상 모드

데이터 가상화라고도합니다. 이 모드에서는 데이터에 몇 개의 행이 있는지 그리드에 알려주고 이벤트를 처리하여 셀을 채 웁니다. 이것은 매우 잘 조절됩니다. 나는 이것을 거대한 격자에 사용했다.

WPF에는 UI 가상화가 있지만 UI 가상화는 없지만 데이터 가상화는 아닙니다.

희망이 있습니다.

+0

WPF DataGrid는 놀라 울 정도로 속도가 느립니다. –

+0

나는 다음과 같이 추가해야한다 : 나는 닷넷 4.0에서 큰 데이터를 위해 WPF DataGrid를 사용했다. 느린 속도이지만 느린 로딩과 같은 것들을 가지고있다. 스크롤하면 데이터를 쿼리한다. 도움이되는 고사양 기계! – markmnl

-3

와 ADO를 사용하고 싶습니다. 하지만 WPF DataGrid를 많은 양의 데이터 (많은 열 (약 40-50) 및 행)와 스타일을 사용하여 느리게 (수평 스크롤) 사용하려고 할 때. 타사 컨트롤의 DataGrid가 훨씬 더 잘 작동합니다 (Infragistics XamDataGrid 사용).

-2

WPF에 대한 Xceed DataGrid를 확인하십시오. 이는 WPF DataGrid보다 좋지만 3rd 파티이지만 그만한 가치가 있습니다.

1

이 결정을 내리는 초보자들에게 WindowsForms는 사용하기가 훨씬 쉽습니다. 물론 WPF를 사용하여 다른 결정을 내리는 데는 여러 가지 이유가 있지만 프로젝트가 주로 DataGrid 인 경우 WinForms를 사용하는 것이 좋습니다.

+1

"WPF 방식"을 배우고 경고합니다. MVVM은 처음부터 Win Forms에서 전환하는 것보다 훨씬 쉬울 수 있습니다. – markmnl

0

DataGrid의 ItemsSource를 처음 채우는 경우 DataGridView로 사용할 수 있습니다.

MyDataGrid.ItemsSource = MySource; 
MyDataGrid.Columns[0].Width = 300; 
MyDataGrid.Columns[0].Header = "MyName";