2011-01-06 15 views
15

私はWPFとWindows Formsでの経験がありますが、WPF DataGridではなくWindows Forms DataGridViewのみを使用しています(これは.Net 4にのみ含まれていましたか、Codeplex 、 わかりました)。私は大量のデータのためにこれらのコントロールの1つを大量に使用してアプリケーションを開発しようとしており、読み取りパフォーマンスはWPF DataGridの問題であるため、Windows Forms DataGridViewに固執する可能性があります。WPF DataGridとWindowsフォームDataGridView

サードパーティのコントロールを使用したくないです。

WindowsフォームのDataGridViewは、大量のデータに対してWPF DataGridよりも優れたパフォーマンスを提供しますか?

私がWPFを使用する場合、.Net 4のDataGridが大幅に改善されていない限り、.NET 3.5S SP1を使用することをお勧めします。

また、私は、私は、Windowsフォームに適していたと感じたDataTableのでADOを使用したい...

答えて

17

あなたのニーズに合わせて、WPFに向けるための他の要件がない限り、私はWinForms DataGridViewをお勧めします。

WPF DataGridは、「帯域外」リリースとして利用可能になりました。つまり、これらは最終的にWPF APIに移行するコントロールですが、コードックスで早期にリリースされるため、次の主要な.NETリリースの前に。 .NET 4.0またはCodeplex DataGridを使用できます。私が知っている限り、彼らは同じものです。 WPF DataGridはDataTableでとてもうまく動作します。私の次の資料に例を参照してください:

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

しかし、WPFフレームワークとビジュアルがWinFormsのよりわずかにヘビー級です。また、WinForms DataGridViewは非常に成熟しています。非常に大きなデータセットの場合

、WinFormsのDataGridViewのは非常に大規模なグリッド(数百万行)のために不可欠であるWPFのDataGrid、中に存在しない一つの特徴を持っている、これは仮想モードです:

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

データ仮想化とも呼ばれます。このモードでは、データに存在する行の数をグリッドに指示してから、セルに入力するイベントを処理します。これは非常に良いスケールです。私はこれを大規模で複雑なグリッドに使用しました。

WPFには、UIコントロールのリサイクルの一形態であるUI仮想化がありますが、データ仮想化はありません。

希望に役立ちます。

+0

WPF DataGridは非常に遅いです。 –

+0

私は次のように追加する必要があります。私は大きなデータのためにWPF DataGridを使用しました.Net 4.0ではそれは問題ありませんでした。遅いですが、遅延読み込みなどの問題があります。それはハイスペックマシンです! – markmnl

-3

WPFのDataGridはるかに速く、私は思います。しかし、WPF DataGridを大量のデータ(多くの列(約40-50)と行数)に使用しようとすると、スタイルが遅くなる(水平スクロール)。サードパーティ製のコントロールのDataGridははるかに優れています(私はInfragistics XamDataGridを使用しています)。

-2

WPF用のXceed DataGridは、WPF DataGridよりも優れていますが、それは第三者ですが価値があります。

1

この決定を下す(私のような)初心者にとっては、Windowsフォームは非常に使いやすくなります。もちろん、あなたの決定に影響を与える可能性のあるWPFを使用する理由は他にもたくさんありますが、プロジェクトが主にDataGridである場合は、WinFormsを使用する方法があります。

+1

私は "WPFの方法"を学ぶよう警告します。 MVVMは、Windows Formsから移行するよりも簡単に行うことができます。 – markmnl

0

DataGridのItemsSourceを初めて埋めると、DataGrid WPFをDataGridViewとして使用できます。

MyDataGrid.ItemsSource = MySource; 
MyDataGrid.Columns[0].Width = 300; 
MyDataGrid.Columns[0].Header = "MyName"; 
関連する問題