BindingSource и DataGridView текущая позиция по умолчанию - PullRequest
1 голос
/ 21 апреля 2011

Имеет ли BindingSource автоматическую текущую позицию по умолчанию? У меня есть обработчик события CurrentCellChanged, и он запускается дважды. Я программно устанавливаю начальную позицию, используя метод BindingSource Find, который работает, но перед тем, как я установлю эту начальную позицию, CurrentCellChanged уже запускается, и исходная выбранная ячейка - столбец 0 строки 0. Когда вы создаете BindingSource, он уже устанавливает Current свойство

Ответы [ 2 ]

1 голос
/ 22 апреля 2011

MSDN для DataGridView.CurrentCell Свойство указывает, что значением свойства CurrentCell по умолчанию является первая ячейка в первой строке (или ноль, если в DGV нет ячеек).

Установка этого значения по умолчанию вызовет событие CurrentCellChanged, объясняя, почему вы видите событие для ячейки 0, 0.

1 голос
/ 22 апреля 2011

Я почти уверен, что вы видите, что DataGridView запускает различные события выбора (CurrentCellChanged, SelectionChanged и т. Д.) Во время процесса привязки данных. Поскольку вы прикрепили обработчик событий к одному из этих событий, он запускается.

Способ обойти это - присоединить обработчик событий к DataBindingComplete объекта DataGridView и присоединить к нему обработчик CurrentCellChanged.

// Attach the event in the form's constructor
this.dataGridView1.DataBindingComplete += new DataGridViewBindingCompleteEventHandler(dataGridView1_DataBindingComplete);

// And in the eventhandler, attach to the CurrentCellChanged event.
void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    dataGridView1.CurrentCellChanged += new EventHandler(dataGridView1_CurrentCellChanged);
}
...