向DataGridView标头添加索引

时间:2013-12-29 20:08:58

标签: c# winforms datagridview

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

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

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

    grid.AutoResizeRowHeadersWidth(
         DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders);
    
  2. 迭代每一行

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

  4. 但是,所有这些方法都是超级慢!

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

    你建议做什么呢?

1 个答案:

答案 0 :(得分:0)

我确实对这个问题做了初步研究,你已经列出了所有典型的解决方案,遗憾的是设置2.5亿个单元格值需要一些时间。

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

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

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

另一个想法是EyeDropper拾色器,你可以从http://www.codeproject.com/Articles/36540/Adobe-Eyedropper-Control

获得