WPF DataGrid 与 Windows 窗体 DataGridView

Posted

技术标签:

【中文标题】WPF DataGrid 与 Windows 窗体 DataGridView【英文标题】:WPF DataGrid Vs Windows Forms DataGridView 【发布时间】:2011-06-04 13:05:17 【问题描述】:

我在 WPF 和 Windows 窗体方面有经验,但是只使用过 Windows 窗体 DataGridView 而不是 WPF DataGrid(据我所知,它仅包含在 .Net 4 中,或者可以从 Codeplex 添加到 .Net 3.5)。我即将使用这些控件之一大量开发一个应用程序来处理大量数据并且读取性能是 WPF DataGrid 的一个问题,所以我可能会坚持使用 Windows Forms DataGridView。是这种情况吗?

我不想使用第 3 方控件。

对于大量数据,Windows 窗体 DataGridView 是否比 WPF DataGrid 提供显着的性能?

如果我要使用 WPF,我更愿意使用 .Net 3.5S SP1,除非 .Net 4 中的 DataGrid 明显更好?

我还想将 ADO 与 DataTable 一起使用,我觉得它更适合 Windows 窗体..

【问题讨论】:

【参考方案1】:

如果您首先填充 DataGrid 的 ItemsSource,则可以将 DataGrid WPF 用作 DataGridView。

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

【讨论】:

【参考方案2】:

对于任何做出此决定的初学者(如我),WindowsForms 都非常易于使用。当然,使用 WPF 的原因还有很多其他可能会影响您的决定,但如果您的项目主要是 DataGrid,那么 WinForms 是您的最佳选择。

【讨论】:

我会警告学习“WPF 方式”,例如从头开始的 MVVM 比从 Win Forms 过渡更容易。【参考方案3】:

我认为 WPF DataGrid 的速度要快得多。但是,当我尝试使用 WPF DataGrid 处理大量数据(很多列(大约 40-50)和行)时,它的样式运行缓慢(水平滚动)。来自 3rd 方控件的 DataGrid 工作得更好(我使用 Infragistics XamDataGrid)。

【讨论】:

【参考方案4】:

检查 WPF 的 Xceed 数据网格,它比 WPF DataGrid 好得多,但这是第 3 方,但值得。

【讨论】:

【参考方案5】:

对于您的需求,除非您有其他要求引导您使用 WPF,否则我会推荐 WinForms DataGridView。

WPF DataGrid 是通过 Codeplex 提供的,作为“带外”版本,即这些控件最终会进入 WPF API,但会提前在 codeplex 上发布,以便我们之前可以从中受益下一个主要的 .NET 版本。您可以使用 .NET 4.0 或 codeplex DataGrid。据我所知,它们是一回事。 WPF DataGrid 与 DataTables 配合得非常好。请参阅我以下文章中的示例:

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 控件回收的形式,但不是数据虚拟化。

希望对您有所帮助。

【讨论】:

相比之下,WPF DataGrid 的速度慢得惊人。 我应该补充一点:我已经使用 WPF DataGrid 处理大数据 - 在 .Net 4.0 中,这没问题,它速度较慢,但​​有诸如延迟加载之类的东西 - 仅在滚动时才查询数据对它 - 如果你有一台高规格的机器,它也会有所帮助!

以上是关于WPF DataGrid 与 Windows 窗体 DataGridView的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式将列和行添加到 WPF Datagrid

WPF DataGrid 动态样式

Datagrid WPF中的SelectedItem绑定

WPF DataGrid中的数据绑定未显示在窗体上

wpf datagrid cell 设置焦点

WPF窗口与windowsForm窗体之间的问题,怎么调用close()