gpt4 book ai didi

c# - DataGrid 重绘缓慢

转载 作者:太空狗 更新时间:2023-10-29 22:06:00 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com