我正在开发一个 VSPackage(Visual Studio 2010 的扩展),并且我有一个托管 DataGridView 控件的工具窗口。 我有一个非常大的数据集(例如,大小为 16384 x 16384 的二维数组),我通过 VirtualMode 更新数据。
我想为行标题单元格和列标题单元格添加索引, 所以我尝试了:
通过网格方法自动调整大小
grid.AutoResizeRowHeadersWidth( DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders);
遍历每一行
foreach (DataGridViewRow row in grid.Rows) { row.HeaderCell.Value = (row.Index + 1).ToString(); }
订阅 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/