Запретить выбор ячейки в DataGridView - PullRequest
1 голос
/ 26 августа 2011

У меня небольшая проблема с DataGridView.
1. Удалите элемент управления DataGridView на форме и установите для свойства Visible значение False
2. Добавьте несколько строк и измените видимое значение на True , как показано выше.

private void Form1_Load(object sender, EventArgs e)
{
   dataGridView1.Rows.Add(new object[] { "1", "a" });
   dataGridView1.Rows.Add(new object[] { "2", "b" });
   dataGridView1.Rows.Add(new object[] { "3", "c" });
   dataGridView1.Rows.Add(new object[] { "4", "d" });

   dataGridView1.Visible = true;
               //^ this trigger selection

}

private void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
   Console.WriteLine("selected");
}

После установки значения Visible в True автоматически выбирается первая ячейка и запускается событие SelectionChanged.
Как это предотвратить?

EDIT. РЕШЕНИЕ:

  • Отключение обработчика событий:
  • Установить видимым
  • Очистить выбор
  • Добавить обработчик

dataGridView1.SelectionChanged -= dataGridView1_SelectionChanged;
dataGridView1.Visible = true;
dataGridView1.ClearSelection();
dataGridView1.SelectionChanged += dataGridView1_SelectionChanged;

Ответы [ 3 ]

3 голосов
/ 26 августа 2011

Ваше решение предотвратит запуск события, но я думаю, что первая ячейка все равно будет выбрана, когда будет показана сетка.Простой вызов ClearSelection () в DataGridView должен исправить это.

С уважением, Дрю

1 голос
/ 16 февраля 2013

Установить для DataGridView TabStop значение false

0 голосов
/ 27 августа 2011

Вместо того, чтобы связывать и перемонтировать каждый раз, когда вы изменяете видимое свойство, вы можете просто не возвращаться из метода, если видимость ложна.То есть:

private void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
    if (!dataGridView1.Visible) return;
    Console.WriteLine("selected");
} 
...