我有一张桌子上有一些值。如果行单元格“名称”不为空,则将背景颜色更改为紫色。
Name ID Customers
Niky 1 yes // here change background to violet
2 no
Donna 3 yes // here change background to violet
Baka 4 no // here change background to violet
5 yes
6 no
我尝试过这段代码,但我不工作,不知道为什么:
foreach (DataGridViewRow row1 in dataGridView1.Rows)
{
if (row1.Cells[0].Value != null)
{
row1.DefaultCellStyle.BackColor = Color.Violet;
}
}
答案 0 :(得分:1)
如果代码位于DataBindingComplete
事件处理程序中,通常会将此类事件置于下面,或者使用设计器附加事件:
dataGridView1.DataBindingComplete += new DataGridViewBindingCompleteEventHandler(dataGridView1_DataBindingComplete);
然后在处理程序中你有这样的东西:
void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
foreach (DataGridViewRow row1 in dataGridView1.Rows)
{
if (row1.Cells.Cast<DataGridViewCell>().Any(c => c.Value == null || string.IsNullOrWhiteSpace(c.Value.ToString())))
{
row1.DefaultCellStyle.BackColor = Color.Violet;
}
else
{
row1.DefaultCellStyle.BackColor = Color.White;
}
}
}
在上面的代码中,我已将原始代码更改为现在查看所有单元格,而不仅仅是第一个单元格。
您也可以将代码放在CellFormatting事件中。
答案 1 :(得分:0)
我不知道你在哪里放置颜色代码,但我总是在绘图部分完成它
Heres oen我在哪里根据状态对线条进行着色,除了依赖于黄色或蓝色的第一列 - 这是进行中的工作代码并且应该整理
private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.RowIndex >= 0 && e.ColumnIndex > 0)
{
if (dataGridView1.Rows[e.RowIndex].Cells[].Value.ToString() == "good")
{
e.CellStyle.BackColor = Color.PaleGreen;
e.CellStyle.SelectionForeColor = Color.Black;
e.CellStyle.SelectionBackColor = Color.Wheat;
}
if (dataGridView1.Rows[e.RowIndex].Cells[3].Value.ToString() == "warning")
{
e.CellStyle.BackColor = Color.LightGoldenrodYellow;
e.CellStyle.SelectionForeColor = Color.Black;
e.CellStyle.SelectionBackColor = Color.Wheat;
}
if (dataGridView1.Rows[e.RowIndex].Cells[3].Value.ToString() == "error")
{
e.CellStyle.BackColor = Color.Salmon;
e.CellStyle.SelectionForeColor = Color.Black;
e.CellStyle.SelectionBackColor = Color.Wheat;
}
if (e.Value.ToString() == "Yellow")
{
e.CellStyle.BackColor = Color.Yellow;
}
else
if (e.Value.ToString() == "Blue")
{
e.CellStyle.BackColor = Color.LightBlue;
}
}
}
或者你可以这样做:
foreach(DataGridViewRow r in dataGridView1.Rows)
{
if(!String.IsNullOrEmpty(r.Cells[0].Value.ToString()))
{
r.DefaultCellStyle.BackColor = Color.Violet;
}
}
所以,如果一行的第一个单元格不为空,则将行着色为紫色。
答案 2 :(得分:0)
您可以在gridview
的rowdatabound事件上执行此操作你也可以使用这个用途可以通过它:
foreach(DataGridViewRow r in dataGridView1.Rows)
{
if(r.Cells.Cast<DataGridViewCell>().Any(c => c.Value.ToString() == string.Empty))
{
r.DefaultCellStyle.BackColor = Color.Violet;
}
}
答案 3 :(得分:0)