如何获取共享行中单元格的值?

问题描述 投票:0回答:2

我有一个专门针对 DataGridViewCell 的类,并以不同的方式处理绘制。它还需要重写 GetPreferredSize 函数来为要绘制的内容请求合适的尺寸。 Paint 函数获取“value”和“formattedValue”作为参数,但 GetPreferredSize 函数仅获取 rowIndex。

我想知道检索单元格值的正确方法(计算最佳大小所必需的)。

如果我理解正确的话,我应该避免做这样的事情:

text = (string)this.DataGridView.Rows[rowIndex].Cells[this.ColumnIndex].Value;

以避免取消共享行。可能相关:我在虚拟模式下使用 DataGridView。

c# winforms datagridview
2个回答
0
投票

这个怎么样?

text = (string)this.DataGridView.CurrentCell.Value;

0
投票

要获取单元格的值而不取消共享行,需要访问底层

DataSource

例如为了一个

DataTable

DataGridView dgv = ...;
DataTable table = (DataTable) dgv.DataSource;
DataView dv = table.DefaultView;
int numVisibleRows = dv.Count;
int rowIndex = ...;
int colIndex = ...; // this has to be mapped based on DisplayIndex
List<DataGridViewColumn> columns = dgv.Columns.Cast<DataGridViewColumn>().Where(t => t.Visible).OrderBy(t => t.DisplayIndex).ToList();
colIndex = columns[colIndex].Index;

DataRowView drv = dv[rowIndex];
Object value = drv[colIndex];

这就得到了价值。如果目标是获得显示的值(即

FormattedValue
),那么它可以在一定程度上完成。从
InheritedStyle
获取
DataGridViewColumn
并应用
Format
将给出一个不错的近似值。但是,显示的文本可能会因行高或列宽而被截断。

© www.soinside.com 2019 - 2024. All rights reserved.