7
votes

DataGridView Cochez la case Catégorie Valeur des cellules?

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 commentaires

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 était null , que vous essayiez de lancer vers bool . (Un type non nullable)


@Slaks fermer. La valeur était dbnull.value


4 Réponses :


4
votes

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]);
        }
    }
}


0 commentaires

1
votes

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: xxx


0 commentaires

0
votes

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]);
        }
    }
}


0 commentaires

0
votes

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: xxx

Cela résoudra votre problème avec la cellule en train d'être lue comme null.


0 commentaires