我有一个表中的一些关于它的价值。 如果行单元格“名称”不是背景,紫色的空变色。
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;
}
}
通常的地方把这种如果代码中内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事件。
实现一个很好的(但不是高性能的)的方式是事件cell-formatting
在DataGridView的。 你可以阅读在整个文档MSDN 。 其实质是,你订阅格式事件在这,你可以做你与格式的问题。
这样你可以肯定的是,颜色等就好了无论用户是在调整,滚动不管。
BTW:我不会做它在客厅事件,因为我了解到,通常你会打破自动绘制逻辑的东西;)
欲了解更多信息,有关于在cellstyles的文章MSDN ,这将是在这种情况下矫枉过正。 但你永远无法知道的足够多的:)
I dont know where you put your colour code but Ive always done it in the drawing section
Heres oen where I coloured the line depending on a status, except for the first column which was dependant on yellow or blue - this is work in progress code and should be tidied up
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;
}
}
}
Or you can do:
foreach(DataGridViewRow r in dataGridView1.Rows)
{
if(!String.IsNullOrEmpty(r.Cells[0].Value.ToString()))
{
r.DefaultCellStyle.BackColor = Color.Violet;
}
}
so if all the first cell of a line is not empty, colour the row violet.
你可以做的GridView控件的RowDataBound事件
您也可以使用这个应用可以去throught它:
foreach(DataGridViewRow r in dataGridView1.Rows)
{
if(r.Cells.Cast<DataGridViewCell>().Any(c => c.Value.ToString() == string.Empty))
{
r.DefaultCellStyle.BackColor = Color.Violet;
}
}