- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 System.Windows.Forms.DataGrid。它填充了大约 3000 行并且重绘非常缓慢。如果我最小化和最大化我的表单,所有其他控件只会显示,但我最终会逐行观看 DataGrid 重绘。如果有所不同,此 DataGrid 中的所有内容都是只读的。
更新:
我不太确定如何为我的项目正确实现 CellValueNeeded() 事件,或者它是否有助于提高 DataGrid 的性能。
我正在创建一个包含 DataGridView 的用户控件(请参阅下面的代码)。当调用 SetProject() 方法时,我的控件被设置为我的 Project 类的特定实例。然后控件使用静态方法 Informa.Data.GetProjectDataTable(Project proj) 从 Project 中提取 DataTable。然后将 DataGrid 的 DataSource 属性设置为返回的 DataTable。
这是我第一次使用 ADO 或 DataGrids 做任何事情,所以请多多包涵。看起来 CellValueNeed() 允许我覆盖 DataGrid 如何为其其中一个单元格查找值,但在我的例子中,这比 MSDN 上的示例复杂得多。我的数据的实际来源是各种 Node 对象的树结构,其根是 Project 实例。每个节点都可以有一组可变的属性,用户也可以在运行时对其进行扩展。然后还有一堆其他的复杂性,节点从它们的父节点继承属性值,并从它们的子节点汇总其他属性。
Informa.Data.GetProjectDataTable() 消除了所有这些疯狂,并生成了一个包含所有节点所有属性的单一平面数据表。在这一点上,我不关心能否将此表的任何更改关联回原始树结构,或在树结构更改时更新表的特定部分。我想要做的就是在 DataGrid 中向用户显示数据。
那么我是否实现 CellValueNeeded() 以从项目提供的数据表中读取数据?我认为 DataGrid 已经知道如何有效地将 DataTable 用作数据源?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Informa;
namespace Informa
{
public partial class ProjectGridControl : UserControl
{
private Project proj;
public ProjectGridControl()
{
InitializeComponent();
}
public void SetProject(Project proj)
{
this.proj = proj;
UpdateGridControl();
}
public void UpdateGridControl()
{
if (this.proj == null)
{
this.dataGrid.DataSource = null;
}
else
{
//Extracts a DataTable from the project and sets it as the
//DataSource of the property grid
this.dataGrid.DataSource = Informa.Data.GetProjectDataTable(proj);
}
}
}
最佳答案
从前有一只名叫 MacroSoft 的小狼,它和小羊 Vidia 一起度过了一段时间。他们制作了地球上最慢的文本和网格渲染,并在硬件进步的繁荣时期将所有工作推到 CPU 上;一直以来,绵羊确保进一步减慢速度。
如果我是对的,你欠这批人一封信 :-)
你正在运行 NVidia 卡和他们蹩脚的驱动程序或类似的东西,并且看到 MSFT 拒绝与友好的供应商一起修复 GDI+ 以硬件加速(即使是 Mono 也会在他们决定给你一些节能和合适的硬件之前完成它重用;你知道体面的工程)。
将您的 DataGridView 包装成一个新类型(即 inherit )并将其 DoubleBuffered 属性设置为 true,更改设计器代码以使用该新类型。
可见的“逐行”渲染是这个行业在 2009/2010 年有多糟糕,桌面上有 super 计算机和单个 DLL,一家大公司拒绝修复,但很乐意为它在 Mounta-Dismounta-Vista 上执行得更慢而收费. clown ..
关于c# - DataGrid 重绘缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/842354/
我是一名优秀的程序员,十分优秀!