Я создаю программу, которая использует DataGridView
для редактирования записей в базе данных SQL. Мой менеджер проектов требует, чтобы строки были зелеными, желтыми или красными в зависимости от того, были ли они вставлены, обновлены или помечены для удаления во временном окне. Он также хочет, чтобы колонка использовала для сортировки цветного светло-серого цвета DataGridView
. Чтобы справиться с этим, я создал следующие обработчики событий в моей форме:Раскраски строк перед столбцами в DataGridView
private void OnRowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
{
//get the row
DataRow row = ((DataRowView)this.dataGridView.Rows[e.RowIndex].DataBoundItem).Row;
//color the row
try
{
//REDACTED
//gets booleans used below
//REDACTED
if (softDeleted)
this.dataGridView.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.FromArgb(255, 213, 91, 95); //red
else if (inserted)
this.dataGridView.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.FromArgb(255, 83, 223, 146); //green
else if (updated)
this.dataGridView.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.FromArgb(255, 234, 218, 106); //yellow
else
this.dataGridView.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Empty;
}
//on failure, abort coloring
catch(Exception ex)
{
MessageBox.Show("Unable to get data required for coloring - " + ex.Message + ".\n Coloring disabled.");
Logging.logException(ex);
this.dataGridView.RowPrePaint -= OnRowPrePaint;
}
}
private void OnSorted(object sender, EventArgs e)
{
//remove color from previous sort column and add to new
if (this.mLastSortColumnIndex != -1)
{
this.dataGridView.Columns[this.mLastSortColumnIndex].DefaultCellStyle.BackColor = Color.Empty;
}
this.mLastSortColumnIndex = this.dataGridView.SortedColumn.Index;
this.dataGridView.SortedColumn.DefaultCellStyle.BackColor = Color.LightGray;
}
Это прекрасно работает, и я очень счастлива с ним! Или было, пока мой руководитель проекта не настаивал на том, что цвет сортировки (раскраска столбцов) переопределяет окраску строк. Мои попытки все встретились с провалом - есть ли способ снять это с чистого листа?
Иллюстрация ниже - текущий слева, желательно справа.
Я понятия не имею, как я пропустил это событие при поиске на API для возможных исправлений. .. Работает как шарм; Спасибо! – Conduit