Некоторое решение: сделайте его доступным только для чтения и измените цвет на серый.Для одной конкретной ячейки:
dataGridView1.Rows[2].Cells[1].Style.BackColor = Color.LightGray;
dataGridView1.Rows[2].Cells[1].ReadOnly = true;
Или, лучше, но более «сложное» решение:
предположим, что у вас есть 2 столбца: первый с номером, второй с флажком, который не должен быть виден, когда число> 2Вы можете обрабатывать событие CellPainting
, рисовать только границы (и, например, фон) и прерывать рисование покоя.Добавьте событие CellPainting
для DataGridView (дополнительно проверьте значение DBNull, чтобы избежать исключения при добавлении новых данных в пустую строку):
private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
//check only for cells of second column, except header
if ((e.ColumnIndex == 1) && (e.RowIndex > -1))
{
//make sure not a null value
if (dataGridView1.Rows[e.RowIndex].Cells[0].Value != DBNull.Value)
{
//put condition when not to paint checkbox
if (Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells[0].Value) > 2)
{
e.Paint(e.ClipBounds, DataGridViewPaintParts.Border | DataGridViewPaintParts.Background); //put what to draw
e.Handled = true; //skip rest of painting event
}
}
}
}
Это должно работать, однако, если вы измените значение вручную в первом столбце, где вычтобы проверить условие, необходимо обновить вторую ячейку, поэтому добавьте еще одно событие, например CellValueChanged
:
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 0)
{
dataGridView1.InvalidateCell(1, e.RowIndex);
}
}