C# изменить цвет строки, если она не пуста
У меня есть таблица с некоторыми значениями. Если ячейка строки "Имя" не пуста, измените цвет фона на фиолетовый.
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;
}
}
4 ответа
Обычное место для размещения такого рода, если код внутри 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
из сетки данных. Вы можете прочитать всю документацию в MSDN. Суть в том, что вы подписываетесь на событие форматирования, и в этом вы можете решать свои проблемы форматирования.
Таким образом, вы можете быть уверены, что цвета и т. Д. Просто прекрасны, независимо от того, изменяет ли пользователь размер, прокручивает ли он что угодно.
Кстати: я бы не стал делать это в событии рисования, так как я узнал, что обычно вы нарушаете что-то из автоматизированной логики рисования;)
Для получения дополнительной информации в MSDN есть статья о стилях ячеек, которая в этом случае будет излишней. Но вы никогда не можете знать, достаточно:)
Вы можете сделать это на событии связанного с строкой вида сетки
Вы также можете использовать это использование может пройти через это:
foreach(DataGridViewRow r in dataGridView1.Rows)
{
if(r.Cells.Cast<DataGridViewCell>().Any(c => c.Value.ToString() == string.Empty))
{
r.DefaultCellStyle.BackColor = Color.Violet;
}
}
Я не знаю, где вы положили свой цветовой код, но я всегда делал это в разделе рисования
Вот где я покрасил линию в зависимости от состояния, за исключением первого столбца, который зависел от желтого или синего цвета - это код незавершенного производства и должен быть приведен в порядок
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;
}
}
поэтому, если все первые ячейки строки не пусты, закрасьте строку фиолетовым цветом.