Impossible d’identifier les valeurs de DataGridViewCheckBoxCell

J’ai donc vu plusieurs billets ici et j’ai essayé toutes les solutions en vain. J’ai essayé plusieurs exemples sur le Web et rien n’a fonctionné. C’est me narguer! Le code ci-dessous correspond à ce que je lance actuellement. Ce qui, à mon avis, devrait fonctionner mais ne fonctionne pas. Le problème est que si la valeur n’est pas true ou false, elle explose avec une dissortingbution non valide car la valeur est affichée sous la forme {}. Si la valeur est true, elle n’est jamais identifiée comme vraie, où cell.Value = cell.TrueValue. J’ai défini TrueValue et FalseValue dans la configuration de datagridview sur true et false respectivement. Qu’est-ce que j’ai manqué?

DataGridViewCheckBoxCell cell = (DataGridViewCheckBoxCell) ((DataGridView) sender).Rows[e.RowIndex].Cells[e.ColumnIndex]; if (cell.ValueType == typeof(bool)) { if (cell.Value != null && !(bool)cell.Value) cell.Value = cell.TrueValue; else cell.Value = cell.FalseValue; } 

Je pense que j’ai finalement eu une partie. cell.Value == DBNull.Value pour une nouvelle case à cocher vierge. cell.Value == cell.FalseValue ne fonctionne toujours pas.

Code mis à jour

  if (cell.ValueType == typeof (bool)) { if (cell.Value == DBNull.Value || cell.Value == cell.FalseValue) { cell.Value = cell.TrueValue; } else if ((bool)cell.Value) { cell.Value = cell.FalseValue; } } 

Je l’ai finalement cloué. Le dernier problème a été résolu en utilisant Convert.ToBoolean (cell.Value) == false plutôt cell.Value == cell.FalseValue

Code final:

 DataGridViewCheckBoxCell cell = (DataGridViewCheckBoxCell)((DataGridView)sender).Rows[e.RowIndex].Cells[e.ColumnIndex]; if (cell.ValueType != typeof (bool)) return; if (cell.Value == DBNull.Value || Convert.ToBoolean(cell.Value) == false) { cell.Value = cell.TrueValue; ((DataGridView)sender).Rows[e.RowIndex].Cells["Comment"].Value = "Not in source."; } else { cell.Value = cell.FalseValue; ((DataGridView)sender).Rows[e.RowIndex].Cells["Comment"].Value = ""; } 

Peut-être pas la bonne solution pour ce problème en particulier, mais m’a été utile pour obtenir la valeur de vérification de cellule:

Utilisez l’événement CellContentClick au lieu de CellClick. Le premier ne se déclenche que lorsque la vérification est correctement cliquée, le second se déclenche par un clic dans une partie quelconque de la cellule, ce qui pose problème. En outre, pour une raison quelconque, DataGridViewCheckBoxCell.EditedFormattedValue renvoie mal sa valeur avec CellClick et nous allons utiliser EditedFormattedValue.

Utilisez ce code:

 DataGridViewCheckBoxCell currentCell = (DataGridViewCheckBoxCell)dataGridView.CurrentCell; if ((bool)currentCell.EditedFormattedValue) //do sth else //do sth 
 DataGridView.Rows[0].Cells[0].Value = true; or DataGridView.Rows[0].Cells[0].Value = false;