protected void HookupEvents() { AddNewButton.Click += (sender, e) => { AddNewButton.Enabled = false; }; SaveButton.Click += (sender, e) => { Save(); }; DataGridView.DataError += (sender, e) => { if (!HandleGridDataError(sender, e)) { MessageBox.Show( e.Exception.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); } e.Cancel = true; e.ThrowException = false; }; DataGridView.RowsRemoved += (sender, e) => { AddNewButton.Enabled = !DbDataSet.HasChanges(); }; Load += (o, args) => { LoadData(); }; FormClosing += (sender, e) => { BindingSource.EndEdit(); if (!DbDataSet.HasChanges() && AddNewButton.Enabled) { return; } var result = MessageBox.Show( "You have unsaved changes. Do you want to save them before closing this form?", "Unsaved changes", MessageBoxButtons.YesNoCancel); if (result == DialogResult.Cancel) { e.Cancel = true; } else if (result == DialogResult.Yes && !this.Save()) { e.Cancel = true; } }; }