События ячейки в отключенном DataGridView
У меня есть DataGridView
на форме. Мне нужно отключить его только для режима просмотра, без выделения выделенной строки и т. Д.
Один столбец с изображением должен быть кликабельным, с ручным курсором.CellClick
события CellMouseEnter не сработали, потому что сетка отключена.
Любое решение?
1 ответ
Сначала определите некоторые свойства, используя DataGridView
Дизайнер.
Выберите DataGridView
в списке свойств найдите DefaultCellStyle и откройте редактор.
Нам нужно установить SelectionForeColor
а также SelectionBackColor
равный ForeColor
а также BackColor
свойства. Это предотвратит изменение цвета ячейки при выборе.
Здесь я устанавливаю Color.White
для BackGround
а также Color.Black
для ForeGround
,
Измените его на что угодно, они просто должны быть одинаковыми для обеих пар.
Сразу после того, как вы установили 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; };
}