Подключите все ваши таблицы данных к одному и тому же обработчику событий Leave. Событие выхода обрабатывается до события щелчка. Внутри события отпуска запишите обзор данных, который только что потерял фокус. При нажатии кнопки сохранения проверьте, есть ли в последнем просмотре таблицы данных несохраненные данные ...
Пример:
DataGridView _lastDataGridView = null;
private void dataGridView_Leave(object sender, EventArgs e)
{
_lastDataGridView = sender as DataGridView;
}
private void saveButton_Click(object sender, EventArgs e)
{
if (_lastDataGridView != null)
{
// check if data needs saving...
}
}
Редактировать 1:
Что касается того, что вы не получили событие выхода до события click, я не вижу такого поведения. Чтобы воспроизвести то, что я сделал, создайте форму с DataGridView и кнопкой. Добавьте два столбца текстового поля в DataGridView, подключите события, как описано, и посмотрите, установлен ли элемент _lastDataGridView при выполнении sendButton_Click. Это на моем конце.
Редактировать 2:
Попробовав мое представление данных, я заметил, что данные всегда сохраняются. Так что я подозревал, что у вас были разные настройки. Я включил «VirtualMode». Это вызывает то же поведение, которое вы описываете. Если возможно, попробуйте отключить VirtualMode и посмотреть, будут ли данные сохранены в DataGridView, как ожидалось. В противном случае попробуйте реализовать рекомендации, изложенные в этой статье MSDN.