我正在开发一个VSPackage(Visual Studio 2010的扩展),我有一个托管DataGridView控件的工具窗口。 我有一个非常大的数据集(例如大小为16384 x 16384的2D数组),我通过VirtualMode更新数据。
我想在行标题单元格和列标题单元格中添加索引, 所以我试过了:
通过网格方法自动调整大小
grid.AutoResizeRowHeadersWidth(
DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders);
迭代每一行
foreach (DataGridViewRow row in grid.Rows) {
row.HeaderCell.Value = (row.Index + 1).ToString();
}
订阅RowsAdded / OnPaint并更新那里的值。
但是,所有这些方法都是超级慢!
它们显着降低了DGV的渲染效果(在每种方法之后渲染视图需要约5秒或更长时间,甚至更糟)。
你建议做什么呢?
答案 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
获得