События ячейки в отключенном DataGridView

У меня есть DataGridView на форме. Мне нужно отключить его только для режима просмотра, без выделения выделенной строки и т. Д.

Один столбец с изображением должен быть кликабельным, с ручным курсором.
CellClick события CellMouseEnter не сработали, потому что сетка отключена.

Любое решение?

1 ответ

Сначала определите некоторые свойства, используя DataGridView Дизайнер.
Выберите DataGridViewв списке свойств найдите DefaultCellStyle и откройте редактор.

Нам нужно установить SelectionForeColor а также SelectionBackColor равный ForeColor а также BackColor свойства. Это предотвратит изменение цвета ячейки при выборе.
Здесь я устанавливаю Color.White для BackGround а также Color.Black для ForeGround,
Измените его на что угодно, они просто должны быть одинаковыми для обеих пар.

Свойства DataGridView DefaultCellStyle

Сразу после того, как вы установили DataSource из DataGridView (или вставьте строки данных другим способом), измените свойства ReadOnly и, если необходимо, свойства Frozen всех столбцов, кроме столбца, отображающего изображения. Здесь я просто использую int Поле установлено на Индекс столбца.
Он также может быть получен путем проверки [Cell].ValueType каждой колонки.

//Define which Column contains an Image
int ImageColumn = 2;

foreach (DataGridViewColumn column in dataGridView1.Columns)
{
    if (column.Index != ImageColumn)
    {
        column.Frozen = true;
        column.ReadOnly = true;
    }
}

Подпишитесь на события CellMouseEnter и CellMouseLeave.
Они используются для изменения курсора на классическую форму руки, когда указатель мыши входит в ячейку, содержащую изображение, и для сброса его значения по умолчанию, когда он покидает его.

Здесь я подписываюсь на события в конструкторе формы, но вы также можете использовать обработчики событий, сгенерированные конструктором, через список событий DataGridView Контроль.

public form1()
{
    InitializeComponent();

    this.dataGridView1.CellMouseEnter += (s, e) => 
        { if (e.ColumnIndex == ImageColumn) dataGridView1.Cursor = Cursors.Hand; };

    this.dataGridView1.CellMouseLeave += (s, e) => 
        { if (e.ColumnIndex == ImageColumn) dataGridView1.Cursor = Cursors.Default; };
}
Другие вопросы по тегам