我制作了一些自定义DataGridViewTextBoxCell
个实例。在大多数情况下,我设置了自定义ForeColor
值,并且工作正常。但是当SelectionMode
为FullRowSelect
时,它会覆盖此单元格的ForeColor
值。
当我选择单元格时,我尝试在Draw事件中设置它,但它不起作用。
我的细胞定义如下。
public class CustomCell : DataGridViewTextBoxCell
{
protected override object GetFormattedValue(object value, int rowIndex, ref DataGridViewCellStyle cellStyle, TypeConverter valueTypeConverter, TypeConverter formattedValueTypeConverter, DataGridViewDataErrorContexts context)
{
if (string.IsNullOrEmpty(value.ToString()))
{
return base.GetFormattedValue(value, rowIndex, ref cellStyle, valueTypeConverter, formattedValueTypeConverter, context);
}
if (value.ToString().Contains("test"))
{
cellStyle.ForeColor = Color.Blue;
}
return base.GetFormattedValue(value, rowIndex, ref cellStyle, valueTypeConverter, formattedValueTypeConverter, context);
}
}
我不想更改选择模式,但我希望显示此单元格的右ForeColor
,但选择BackColor
。
这个解决方案怎么样?
答案 0 :(得分:1)
您可以覆盖Paint
单元格方法,并将cellStyle.SelectionForeColor
设置为ForeColor
的相同颜色:
protected override void Paint(Graphics graphics, Rectangle clipBounds,
Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState,
object value, object formattedValue,
string errorText, DataGridViewCellStyle cellStyle,
DataGridViewAdvancedBorderStyle advancedBorderStyle,
DataGridViewPaintParts paintParts)
{
if (string.Format("{0}", formattedValue) == "something")
{
cellStyle.ForeColor = Color.Red;
cellStyle.SelectionForeColor = cellStyle.ForeColor;
}
base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value,
formattedValue, errorText, cellStyle, advancedBorderStyle, paintParts);
}
注意:您可以使用CellFormatting
或CellPainting
DataGridView
事件执行相同操作,而无需创建自定义单元格。