Penso che l'opzione migliore sia utilizzare RowValidating con una condizione bool per verificare se si chiama .Validate().
EDIT
Per il tuo ultimo commento, perché non aggiungere un controllo per dataGridView.IsCurrentRowDirty
? Per esempio:
private void dataGridView1_RowValidating(object sender, DataGridViewCellCancelEventArgs e) {
if (dataGridView1.IsCurrentRowDirty) {
if (dataCheck())
if (MessageBox.Show("Ok?", "Save?", MessageBoxButtons.YesNoCancel) == DialogResult.Cancel) {
e.Cancel = true;
}
}
}
Se non ci sono dati sporchi, non importa chi chiama la convalida del dataCheck non sarà reso e non apparirà la messageBox.
EDIT
è possibile sostituire il 'se' clausole con alcun controllo che si desidera, tra cui una per dataGridView2.
È anche possibile estendere il controllo dataGridView se si hanno requisiti molto complicati.
EDIT
Ora capisco la vostra esigenza. Non penso che esista una soluzione rapida e pulita. Vorrei utilizzare l'evento SelectionChanged e impostare la logica per impedire la modifica. Qualcosa di simile:
//rember the selection of the index
private int _currentIndex;
private bool _rollingBackSelection;
private void SelectionChanged(...){
//when changing back to the selection in dgv1 prevent dgv2 check
if (_rollingBackSelection) {
_rollingBackSelection = false;
return;
}
if (dgv2IsDirty()) {
var result = MessageBox.Show("Ok?", "Save?", MessageBoxButtons.YesNoCancel);
if (result == DialogResult.Cancel) {
_rollingBackSelection = true;
//rollback to the previous index
dgv1.Rows[_currentIndex].Selected = true;
return;
}
if (result == DialogResult.Yes)
dgv2Save();
dgv2Load();
_currentIndex = dgv1.SelectedRows[0].Index;
}
}
Penso che qualcosa come sopra sia la soluzione migliore.
se non si desidera che all'utente di cambiare qualche cosa usare CellEndEdit? Se si desidera impedire all'utente di modificare qualcosa impostato readonly = true – Ehsan
A seconda di quando si desidera impedire un tipo di input, l'impostazione dell'evento KeyPress Handled = true bloccherà un carattere o un formato non valido dei caratteri. - Inoltre, non fa distinzione tra celle diverse, quindi dovrai testare quale colonna o riga è stata modificata per il tuo test corretto. –
Puoi ampliare ciò che vuoi raggiungere? – CristisS