Tester une cell d'un datagridview est vide

Résolu
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 - 20 févr. 2008 à 17:31
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 - 20 févr. 2008 à 22:16
Bonjour

Je cherche toujours la maniere efficace de tester si une cellule d'un datagridview est vide !!

Contexte

A chaque rowenter, je prends une valeur d'une cellulle dans une colonne du dgv
Mais quand j'arrive sur la derniere row vide crak il m'insulte
Le debugger me dis que cRow.Cells["X"].Value vaut {}
Je contourne en faisant des bricolage pas possible mais j'aimerais connaitre une maniere efficace de tester !!

Voici mon code

      DataGridViewRow cRow; 
      cRow = dgv_chauff.Rows[RowIndex];
      if (null == cRow.Cells["X"].Value)
      {
        return;
      }
      pa.X = (int)cRow.Cells["X"].Value;

10 réponses

oximoron Messages postés 149 Date d'inscription mercredi 23 juillet 2003 Statut Membre Dernière intervention 30 janvier 2009
20 févr. 2008 à 21:33
N'ai pas peur je parle du TryParse c'est une fonction des classes int, doubles, ...
C'est une fonction qui à un bon rapport en terme de temps d'execution. Qui te renvoi un booléen si il a réussi la conversion et le resultat de cette conversion. De plus dans ton cas c'est critique cette vérif, si l'utilisateur arrive à rentrer autre chose qu'un nombre (ils sont très fort pour ca ) ca plante méchament alors que là tu peut faire le traitement.
Toi Tu confond avec les try catch ...
3
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 6
20 févr. 2008 à 22:16
Yep !

Merci beaucoup !
1
oximoron Messages postés 149 Date d'inscription mercredi 23 juillet 2003 Statut Membre Dernière intervention 30 janvier 2009
20 févr. 2008 à 20:19
Pourquoi ca n'est pas efficace "if (cRow.Cells["X"].Value == null)" ?
Fait une fonction si ca te dérange CelluleVide(int anIndexCol, int anIndexLigne) qui te renvoi true ou false en testant si la cellule est différent de null et différent de string.empty.
0
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 6
20 févr. 2008 à 20:49
Bonsoir


A mon avis on ne s'est pas bien compris : le code que j'ai montré ne MARCHE PAS : donc n'est pas efficace


Le test passe, je n'ai aucune valeur visible dans ma cell {}


Et je recois une erreur : When casting from a number the value must be less than infinity ???


Mais je dois avouer que ce n'est pas sur le dernier row Vide mais sur un row que j'a ajouté programaticaly sans spécifier de valeur pour X ?


On va me dire tu n'a qu'a .... mais j'aimerais comprendre comment interpreter ce genre de situation qui peut se presenter !


 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
oximoron Messages postés 149 Date d'inscription mercredi 23 juillet 2003 Statut Membre Dernière intervention 30 janvier 2009
20 févr. 2008 à 20:59
ok j'avais pas compris 

Donc ta cellule.value n'est pas null si il passe le test. Mais c'est quand tu fait quoi que ca plante ? tu peux tester si la cellule est diférente de string.empty ?
0
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 6
20 févr. 2008 à 21:09
Bonsoir,

Apres le test, Je fais ca (qui plante) :

      pa.X = (int)cRow.Cells["X"].Value;

J'avais aussi testé ceci

      if (null == cRow.Cells[4].Value || cRow.Cells["X"].Value=="")
     {
        return;
     }

Mais ca passe a travers ???
0
oximoron Messages postés 149 Date d'inscription mercredi 23 juillet 2003 Statut Membre Dernière intervention 30 janvier 2009
20 févr. 2008 à 21:13
bon tu peux essayer ca :
int lnValCellule;
if(Int.TryParse(cRow.Cells["X"].Value, out lnValCellule)
{
   //c'est ok
}
else
{
   //erreur
}

pa.X = (int)
0
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 6
20 févr. 2008 à 21:15
Caramba !

J'ai trouvé

     if ((null == cRow.Cells[4].Value) || (""==cRow.Cells["X"].Value.ToString()))
    {
       return;
    }

Mais c'est quand meme chipoteux....
0
oximoron Messages postés 149 Date d'inscription mercredi 23 juillet 2003 Statut Membre Dernière intervention 30 janvier 2009
20 févr. 2008 à 21:19
ok, mais il aurait pu raler à la compilation ...
mais c'est quand même pas mal si tu fait quand même le int.tryParse
0
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 6
20 févr. 2008 à 21:26
Bonsoir

Dans ta proposition tu fais un try

Honnetement j'apprends le csharp depuis 3-4 semaines mais je change de trottoir pour eviter les try, j'ai des tres mauvais souvenir des "on error" en Basic, et le concept du try me fait penser a ca

J'avais revu des programmes bourrés de on error qui ne faisaient rien sans que l'on sache pourquoi !!

Mon experience c'est le C ou on apprends a negocier chaque bit et chaque virages dangereux sans attendre la ménagere l'ambulance et le ramasse miette !
0
Rejoignez-nous