C# 向DataGridView标题添加索引

C# 向DataGridView标题添加索引,c#,winforms,datagridview,C#,Winforms,Datagridview,我正在开发一个VSPackage(VisualStudio2010的扩展),我有一个工具窗口,它承载一个DataGridView控件。 我有一个非常大的数据集(例如大小为16384 x 16384的2D数组),我通过VirtualMode更新数据 grid.AutoResizeRowHeadersWidth( DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders); 我想给行标题单元格和列标题单元格添加索引, 所

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

grid.AutoResizeRowHeadersWidth(
     DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders);
我想给行标题单元格和列标题单元格添加索引, 所以我试着:

grid.AutoResizeRowHeadersWidth(
     DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders);
  • 通过网格方法自动调整大小

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

    grid.AutoResizeRowHeadersWidth(
         DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders);
    
    foreach (DataGridViewRow row in grid.Rows) {
       row.HeaderCell.Value = (row.Index + 1).ToString();
    }
    
  • 订阅RowsAdded/OnPaint并更新其中的值

  • grid.AutoResizeRowHeadersWidth(
         DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders);
    
    但是,所有这些方法都非常慢

    grid.AutoResizeRowHeadersWidth(
         DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders);
    
    它们显著降低了DGV的渲染效果(在每种方法之后渲染视图大约需要5秒或更长时间,甚至更糟)

    grid.AutoResizeRowHeadersWidth(
         DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders);
    

    您建议怎么做?

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

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

    grid.AutoResizeRowHeadersWidth(
         DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders);
    
    我仍然认为解决方案需要更好的设计。下面是对你问题的间接回答

    grid.AutoResizeRowHeadersWidth(
         DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders);
    
    制作带有放大功能的图片对话框。当用户/开发人员放大到像素级别时,向他们显示RGB值。这里是用基于MFC CLiDraw的C#编写的,它有一个示例向您展示如何放大

    grid.AutoResizeRowHeadersWidth(
         DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders);
    

    另一个想法是一个滴管颜色选择器,您可以从以下位置获得:

    DataGridView,2D数组大小为16384 x 16384?谁能用这个?建议您更改设计。数据链接到图像/缓冲区,它显示每个[x,y]中像素的值,有时用户对图像中的特定区域感兴趣,当然图像作为一个整体毫无价值。感谢回复@Jeremy。这些都是有趣的链接,我会仔细看看,看看我是否能得到一些东西。关于“设置2.5亿单元格值”,我没有这样做,数据是按需填充的(CellValueRequired事件),索引是在滚动/数据更新时添加的。不幸的是,它仍然非常慢,我怀疑网格被重新绘制了太多次,仍然找不到瓶颈。
    grid.AutoResizeRowHeadersWidth(
         DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders);