c# - 将索引添加到 DataGridView header

标签 c# winforms datagridview

我正在开发一个 VSPackage(Visual Studio 2010 的扩展),并且我有一个托管 DataGridView 控件的工具窗口。 我有一个非常大的数据集(例如,大小为 16384 x 16384 的二维数组),我通过 VirtualMode 更新数据。

我想为行标题单元格和列标题单元格添加索引, 所以我尝试了:

  1. 通过网格方法自动调整大小

    grid.AutoResizeRowHeadersWidth(
         DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders);
    
  2. 遍历每一行

    foreach (DataGridViewRow row in grid.Rows) {
       row.HeaderCell.Value = (row.Index + 1).ToString();
    }
    
  3. 订阅 RowsAdded/OnPaint 并更新那里的值。

但是,所有这些方法都 super 慢!

它们显着降低了 DGV 的渲染效果(在每种方法之后渲染 View 大约需要 5 秒或更长时间,甚至更糟)。

您建议改为做什么?

最佳答案

我确实对该问题进行了初步研究,您已经列出了所有典型的解决方案,不幸的是,设置 2.5 亿个单元格值需要一些时间。

我唯一没有看到你提到的是伪造标题单元格(即第一列和第一行的灰色背景)并用源数据填充它们。由于用像素值填充 DataGridView 单元格值,一个想法是在您加载的每个图像的左侧和顶部附加 1 个像素 strip 。

我仍然认为解决方案需要更好的设计。以下是对您问题的间接回答。

制作一个带有放大功能的图片对话框。当用户/开发人员放大到像素级别时,向他们显示 RGB 值。这是 an excellend Drawing Tool example用基于 MFC CLiDraw 的 C# 编写,并有一个示例向您展示如何放大。

另一个想法是 EyeDropper 颜色选择器,您可以从以下位置获得:http://www.codeproject.com/Articles/36540/Adobe-Eyedropper-Control

关于c# - 将索引添加到 DataGridView header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20829570/

相关文章:

c# - System.Windows.Forms.WebBrowser 有时会进行 NTLM 验证 - 为什么?

c# - 如何制作可滚动的文本框列表?

c# - 如何在c#中将dataGridView行文本插入数据库

c# - DataGridView 中的 InvalidCastException

c# - 在 gridview 中显示数据集(C# windows 应用程序)

c# - 将批处理文件输出重定向到 winform 文本框问题

c# - C# 中 ENUM 的命名约定通常都是大写吗?

c# - 如何使用 OneDrive SDK 按文件哈希搜索

c# - 为我的插件在 "SolutionExplorer\Project\references\MyReference"中选择的项目

c# - 如何在 C# 中捕获通用异常的所有变体