Это один из способов сделать это:
private void dgvLogHeader_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
foreach (DataGridViewColumn col in dgvLogHeader.Columns)
{
if (col.DefaultCellStyle.BackColor != Color.Empty)
col.DefaultCellStyle.BackColor = Color.Empty;
}
dgvLogHeader.Columns[e.ColumnIndex].DefaultCellStyle.BackColor = Color.Gainsboro;
}
Сначала каждый столбец сбрасывается с цветом по умолчанию (Color.Empty
), а затем окрашивает текущий столбец.
Обратите внимание, чтоэто не приведет к сбросу любых цветов, которые вы установили в отдельных ячейках !
Сброс тех, что вам необходимо установить, на Color.Empty
.
Вы можете добавить
dgvLogHeader.ClearSelection();
, чтобы очистить выделенную ячейку, на которую щелкнули.
Но : если вам нужно выбрать цвета на индивидуальной основе, в зависимости от значений ячейки, товам придется ездить на велосипеде по клеткам.Лучше всего это делать в событии CellPainting
, так как оно вызывается оптимизированным образом, чтобы включить только показанные ячейки.Обратите внимание, что он вызывается для каждой ячейки, поэтому вам нужно учитывать значения e.ColumnIndex
и e.RowIndex
.
Обновление: Теперь вы уже прояснили вопросвам нужно зациклить все или все видимые ячейки.
Вот функция, которую вы можете вызвать, чтобы сделать это:
private void markCells(DataGridView dgv, string pattern)
{
dgv.SuspendLayout();
foreach (DataGridViewRow row in dgv.Rows)
foreach (DataGridViewCell cell in row.Cells)
cell.Style.BackColor = cell.Value.ToString() == pattern ?
Color.LightBlue : Color.Empty;
dgv.ResumeLayout();
//dgv.ClearSelection()
}
Если быстро проходит через весь DGV;Вы можете вызвать его, например, из события Textbox.TextChange
.
При установке цветов приостанавливается макет, поэтому он должен быть быстрым и без мерцания.
Если вы хотите искать только в одномВ столбец можно добавить дополнительное условие, например, вот так:
cell.Style.BackColor = cell.Value.ToString() == pattern &&
cell.ColumnIndex == dgv.CurrentCell.ColumnIndex?
, а также поместить его в CellClick
событие