Вот мой пример.Добавьте обработчик событий для CellPainting, затем определите, отключен элемент или нет.Если он отключен, просто нарисуйте фон и сделайте ячейку доступной только для чтения.
У меня есть собственный класс BoardStatusView, связанный с сеткой данных, который имеет логическую функцию, определяющую, должна ли ячейка иметьфлажок или нет (Upgradeable()
)
private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.RowIndex >= 0)
{
BoardStatusView bs = dataGridView1.Rows[e.RowIndex].DataBoundItem as BoardStatusView;
bool disabled = !bs.Upgradeable();
dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].ReadOnly = disabled;
if (disabled && e.ColumnIndex == 0)
{
e.PaintBackground(e.ClipBounds, false);
e.Handled = true;
}
}
}