2009-06-01 7 views
2

J'utilise le code suivant pour mettre à jour la valeur d'une cellule DataGridView. Ceci est appelé dans le gestionnaire d'événements 'CellDoubleClick' pour DataGridView.UpdateCellValue() dans un Datagridview

Le problème est la mise à jour de la cellule uniquement après avoir cliqué sur une autre cellule. Existe-t-il une meilleure façon de le faire?

string value = ""; 
if (_dataGrid1.CurrentRow.Cells[e.ColumnIndex].Value != null) 
    value = _dataGrid1.CurrentRow.Cells[e.ColumnIndex].Value.ToString(); 

FormEdit form = new FormEdit(value); // takes a string value 
if (form.ShowDialog() == DialogResult.OK) 
{ 
    _dataGrid1.CurrentRow.Cells[e.ColumnIndex].Value = form.SourceText; 
    _dataGrid1.UpdateCellValue(e.ColumnIndex, e.RowIndex); 
} 

Quelques noms de variables ont été changés pour protéger leur identité

Répondre

0

Je suis retourné au projet que c'est pour aujourd'hui, et j'ai découvert que ma réponse était facile. Suspendre/ResumeLayout était la solution:

if (form.ShowDialog() == DialogResult.OK) 
{ 
    _dataGridView.SuspendLayout(); 

    _dataGridView.CurrentRow.Cells[e.ColumnIndex].Value = form.TextBoxText; 
    _dataGridView.UpdateCellValue(e.ColumnIndex, e.RowIndex); 

    _dataGridView.ResumeLayout(true); 
} 

C'était pour un double clic sur une cellule gridview et édition du contenu sous une forme modale avec une zone de texte.

0

Est-ce que l'appel _dataGrid1.CommitEdit résoudre le problème?

0

Essayez d'appeler Actualiser sur le contrôle. Les données peuvent être mises à jour, mais la représentation visuelle ne peut pas être redessinée avant le clic ailleurs.

Questions connexes