2013-10-23 10 views
17

Ho un'app Winforms scritta in C#.Evento DataGridView da acquisire quando il valore della cella è stato modificato dall'utente

In una delle mie DataGridView ho impostato tutte le colonne tranne una chiamata "Riferimento" a ReadOnly = true;

Desidero che l'applicazione sappia quando un utente ha modificato qualcosa nella colonna "Riferimento", ma tutti gli eventi che ho provato finora generano molto più fuoco di quando un utente ha apportato delle modifiche. Per esempio CurrentCellChanged incendi quando il DataGridView viene inizialmente reso e ogni volta che l'utente fa clic semplicemente o linguette lungo i filari, ecc

Mi interessa solo a prendere le modifiche degli utenti ai dati nella colonna 'di riferimento', che è la colonna solo quando ReadOnly = false;

Qual è l'evento migliore da utilizzare per questo?

risposta

21

CellValueChanged è quello che vi serve:

private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e){ 
    if(dataGridView1.Columns[e.ColumnIndex].Name == "Reference"){ 
    //your code goes here 
    } 
} 

penso che l'evento CellEndEdit è adatto anche per la vostra voglia:

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e){ 
    if(dataGridView1.Columns[e.ColumnIndex].Name == "Reference"){ 
    //your code goes here 
    } 
} 
+7

Io voto per la seconda soluzione: ' private void dataGridView1_CellEndEdit (mittente dell'oggetto, DataGridViewCellEventArgs e) { if (data GridView1.Columns [e.ColumnIndex] .Name == "Riferimento") {// il codice va qui }} ' perché i primi incendi ogni volta un valore della cella viene modificato anche se l'azione non ha essere innescato dall'utente I.E. se ho un metodo che aggiunge righe sullo sfondo, verrà attivato CellValueChanged. – Luke

+2

Anche la seconda soluzione (evento CellEndEdit) si attiva quando il valore non è stato modificato, ad esempio, anche quando l'utente preme "esc" per terminare la modifica senza modificare il valore. – JPProgrammer

Problemi correlati