Je suis un problème étrange ici.
J'ai un Datagramrid à 3 colonnes qui est rempli par une connexion avec la base de données. Jusqu'ici tout va bien. P>
J'ai une colonne supplémentaire, de type case à cocher. J'ai besoin d'obtenir de la valeur pour perforer une opération en vrac sur elle. Voici la capture: p>
Lorsque toutes les cellules sont sélectionnées, cela fonctionne bien. Mais lorsqu'un utilisateur sélectionne n'importe quelle cellule que ce n'est pas le premier, le logiciel me donne une exception de référence d'objet. P>
Voici le code P>
public List<String> GetSelected() { List<String> selected = new List<String>(); foreach(DataGridViewRow row in datagrid.rows) { if ((Boolean)row.Cells[wantedCell].Value == true) { selected.Add(row.Cells[anotherCell]); } } }
4 Réponses :
Essayez ceci:
public List<String> GetSelected() { List<String> selected = new List<String>(); foreach(DataGridViewRow row in datagrid.Rows) { object value = row.Cells[wantedCell].Value; if (value != null && (Boolean)value) { selected.Add(row.Cells[anotherCell]); } } }
Cela n'a pas fonctionné pour moi (une exception a été jetée de la convertir en booléen).
Je crois que cela fait le travail: p>
Remplacez la ligne 6 avec si (Row.cells [WeardCell] .Value == dbnull.value? Faux: (bool) Row.Cells [WeardCell] .Value == True) Code> Pour faire cela :
public List<String> GetSelected()
{
List<String> selected = new List<String>();
foreach(DataGridViewRow row in datagrid.rows)
{
if (row.Cells[wantedCell].Value == DBNull.Value ? false : (bool)row.Cells[wantedCell].Value == true)
{
selected.Add(row.Cells[anotherCell]);
}
}
}
Valeur par défaut sur la case à cocher "non cochée" dans DataGridView est dbnull. Vous pouvez modifier ceci à sa colonne en paramétrant l'attribut de fauxColumn FaceValue: Cela résoudra votre problème avec la cellule en train d'être lue comme null. P> P>
Quelle ligne jette l'exception?
Juste un exemple d'index. pas le vrai nom de la cellule ou index. La chose drôle est que j'ai déjà résolu celui-ci. Au lieu de convertir la valeur comme: (Boolean) Row.Cells [i] .Value j'ai utilisé Convert.Toboollean (Row.Cells [i]) et fonctionne bien. Merci pour ton aide! :RÉ
Votre problème était probablement que
rangée.Cells [WeatCell] .Value code> était
null code>, que vous essayiez de lancer vers
bool code>. (Un type non nullable)
@Slaks fermer. La valeur était dbnull.value