我有一个数据网格视图,我想知道是否可以仅突出显示包含特定列值的某些行。
所以我希望所有行都默认为带有白色文本的黑色,除了指定列等于 FUJI/UNIVERSAL
的任何行。对于这一行,我希望它是黄色的黑色文本。
所以我的问题是......这可能吗?如果是的话,怎么样?
答案 0 :(得分:2)
最佳位置是DataGridView的RowPrePaint事件。
以下是如何实现这一目标。
void dataGridView1_RowPrePaint(object sender,
DataGridViewRowPrePaintEventArgs e)
{
if (dataGridView1.Rows[e.RowIndex].Cells[0].Value == "YourConditionalValue")
{
dataGridView1.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Yellow;
}
}
答案 1 :(得分:1)
处理DataGridView
控件的OnPaint事件。
解析行,并在包含您要查找的信息的行上设置颜色。
一些示例代码:
int specificColumnIndex = 5;
const string FUJIUNIV = "FUJI/UNIVERSAL";
const Color cFUJIBACK = Color.Yellow;
const Color cFUJITEXT = Color.Black;
public Form1() {
InitializeComponent();
dataGridView1.Paint += new PaintEventHandler(DataGridView_Paint);
}
private void DataGridView_Paint(object sender, PaintEventArgs e) {
foreach (DataGridViewRow row in dataGridView1.Rows) {
if (row.Cells[specificColumnIndex].Value.ToString() == FUJIUNIV) {
foreach (DataGridViewCell cell in row.Cells) {
cell.Style.BackColor = cFUJIBACK;
cell.Style.ForeColor = cFUJITEXT;
cell.Style.SelectionBackColor = Color.Gold;
}
}
}
}
}
答案 2 :(得分:1)
例如,通过处理OnCellFormatting
事件。
这是我的一个旧的WinForms爱好项目的一段实际代码,它正是这样做的。它还告诉我评论的重要性(我现在还没有机会记住它)。
我相信你可以根据自己的目的调整它。
private void sheetCalendar_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (CurrentRota == null)
{
return;
}
/* A word of explanation is needed. We retrieve the DataGridView from sender
* and we access the cell in question directly.
* MSDN advices against it -
* "to avoid performance penalties When handling this event,
* access the cell through the parameters of the event handler
* rather than accessing the cell directly."
*
* The problem is that we don't want to set the same colour to the same cell
* over and over again.
* And e.CellStyle always "forgets" what colour the call had had! */
var dgrid = sender as DataGridView;
var _col = e.ColumnIndex;
var _row = e.RowIndex;
var _highlight = (((Rota) sheetCalendar.Rows[e.RowIndex].DataBoundItem).Monday ==
CurrentRota.Monday);
var color = _highlight ?
Settings.Default.DGRIDCalendar_CurrentlyEditedBackColor :
SystemColors.Window;
if (dgrid[_col, _row].Style.BackColor != color)
dgrid[_col, _row].Style.BackColor = color;
}