我正在处理源自DataGridView
的自定义System.Windows.Forms.DataGridView
。
在我想要的网格中,我的行可能由于它们的状态而具有不同的颜色,并且我希望当前行与其他行略有不同,并且该差异是突出显示的颜色,这是动态的而不是静态的。
当我选择一行时,我只想保留该行的先前颜色,然后相对地高亮显示该颜色,我已经完成了这段代码:
Color oldColor;
private void dgvMain_SelectionChanged(object sender, EventArgs e)
{
oldColor = dgvMain.CurrentRow.DefaultCellStyle.BackColor;
Color newColor = Color.FromArgb(oldColor.R < 235 ? oldColor.R + 20 : 0,
oldColor.G, oldColor.B);
dgvMain.CurrentRow.DefaultCellStyle.BackColor = newColor;
}
但我有两个问题:
CurrentRow
,我知道有些行已经改变了选择状态,但我不确切知道哪一行是我前一行改变它的颜色。有没有解决方法可以做到这一点?任何事件或特殊代码?
如果您知道更好的突出颜色解决方案,我将非常感谢您的帮助。
答案 0 :(得分:3)
SelectionBackColor
中有一个单独的属性DefaultCellStyle
。使用此选项可更改选择颜色。您可以存储默认的单元格样式,并使用它来恢复默认值。
示例代码:
public class BetterDataGridView : DataGridView
{
private DataGridViewCellStyle defaultStyle = new DataGridViewCellStyle();
public BetterDataGridView()
{
}
protected override void OnRowStateChanged(int rowIndex, DataGridViewRowStateChangedEventArgs e)
{
base.OnRowStateChanged(rowIndex, e);
if (rowIndex > -1)
{
DataGridViewRow row = this.Rows[rowIndex];
if (row.Selected)
{
Color oldColor = this.CurrentRow.DefaultCellStyle.SelectionBackColor;
e.Row.DefaultCellStyle.SelectionBackColor = Color.FromArgb(oldColor.R < 235 ? oldColor.R + 20 : 0,
oldColor.G, oldColor.B);
}
else if (!row.Selected)
{
e.Row.DefaultCellStyle.SelectionBackColor = defaultStyle.SelectionBackColor;
}
}
}
}