【发布时间】:2011-10-04 14:01:31
【问题描述】:
我已经尝试使用自定义的 DataGrid 以及 WPF 中的库存。我尝试过手动填充它们以及通过绑定填充它们。在这两种情况下,它们都很慢。
我有一个场景,用户单击一个按钮,然后出现一个带有适当数据的 DataGrid。目前我处于概念验证模式并且仅使用示例数据。我有一个包含 10 行的表的 DataSet。
如果我在单击按钮时没有将任何数据附加到 DataGrid,那么空的 DataGrid 会立即显示,用户不会察觉到延迟。我一添加 10 行数据,对于 6 列,延迟大约是 2 秒,对用户来说非常明显。
我什至尝试填充空数据,只是为了显示一个空网格,而且速度同样慢。
for (int i = 0; i < 10; i++)
_dataGrid.Items.Add("");
我放了一个计时器来计算从单击按钮到执行所有代码以绘制 DataGrid 时的滴答声,大约是 20 毫秒,因此代码执行得非常快,但在屏幕上是大滞后是。我尝试了一个 GridView,它在屏幕上的渲染速度非常快。
我听说过各种关于复杂场景和使用 1000 行的缓慢 DataGrid 绘制的报告,但这很简单,6 列 x 10 行填充了空数据。
对于只读显示,GridView 是否与 DataGrid 一样可行?
更新
这是我的专栏的创建。
DataGridTextColumn column = new DataGridTextColumn();
column.ColumnWidthChanged += new ColumnWidthChangedEventHandler(column_ColumnWidthChanged);
column.Header = entity.GetPropertyValue("ColumnLabel");
column.Binding = new Binding(entity.GetPropertyValue("Tag"));
column.Width = new DataGridLength(entity.GetPropertyDouble("DisplaySize"));
_dataGrid.Columns.Add(column);
这是我绑定 10 行数据集的方法。
_dataGrid.ItemsSource = ds.Tables[0].DefaultView;
_dataGrid.DataContext = ds.Tables[0];
不确定我可以做些什么不同的事情。
【问题讨论】:
-
我在另一个系统上也试过这个应用程序,它也很慢。问题是某些视图上有多个 DataGrid,因此每个额外的 DataGrid 延迟只会增加。
-
我使用带有动态列和超过 10000 行的标准 wpf 数据网格,对此没有任何问题。你的物品来源是什么?数据表或某种集合?希望您没有像您发布的那样在 foreach 中添加项目??
-
我在帖子中尝试了 for 循环,只是想看看它是否会有所作为,我不确定绑定是否是问题所在。在实际情况下,我有一个要绑定的 DataSet。我会更新帖子。
-
我目前遇到了同样的问题,代码执行得非常快,但是 UI 会在 6 分钟内更新(我的 DataGrid 有超过 60k 项)。其他 cmets 似乎都没有帮助,您是否设法以某种方式修复它?
标签: wpf performance datagrid render