IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Cellule vide et/ou null d'un datagridview


Sujet :

C#

  1. #1
    Membre confirmé Avatar de thierry007
    Homme Profil pro
    Autodidacte
    Inscrit en
    Août 2006
    Messages
    876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 876
    Points : 457
    Points
    457
    Par défaut Cellule vide et/ou null d'un datagridview
    Re-bonjour

    Je retrouve de nouveau le même problème ( message: System.NullReferenceException*: 'La référence d'objet n'est pas définie à une instance d'un objet.')

    Explcications:

    J'ai un datagridview ( non lié a un dataset )

    construction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
       DgSessions.RowCount = 99;
                      DgSessions.ColumnCount = 6;
                      DgSessions.BackgroundColor = Color.White;
                      DgSessions.AlternatingRowsDefaultCellStyle.BackColor = Color.LightCyan;
                      DgSessions.Dock = DockStyle.Fill;
                      DgSessions.RowHeadersVisible = false;
                      DgSessions.ScrollBars = ScrollBars.Vertical;
                      DgSessions.Columns[0].Name = "Utilisation";
                      DgSessions.Columns[1].Name = "Login";
                      DgSessions.Columns["Login"].Width = Colonne1;
                      DgSessions.Columns[2].Name = "Password";
                      DgSessions.Columns["Password"].Width = Colonne2;
                      DgSessions.Columns[3].Name = "Libre1";
                      DgSessions.Columns["Libre1"].Width = Colonne3;
                      DgSessions.Columns[4].Name = "Libre2";
                      DgSessions.Columns["Libre2"].Width = Colonne4;
                      DgSessions.Columns[5].Name = "IdClient";
                      DgSessions.Columns[5].Visible = false;
    je remplis le datagridview avec des données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      for (int i = 0; i <= DSPersonalData.Tables["PersonalData"].Rows.Count - 1; i++)
                            {
                                  DgSessions.Rows[i].Cells["IdClient"].Value = DSPersonalData.Tables["PersonalData"].Rows[i]["DT_IdClient"].ToString();
                                  DgSessions.Rows[i].Cells["Utilisation"].Value = DSPersonalData.Tables["PersonalData"].Rows[i]["DT_Utilisation"].ToString().Trim();
                                  DgSessions.Rows[i].Cells["Login"].Value = DSPersonalData.Tables["PersonalData"].Rows[i]["DT_Login"].ToString().Trim();
                                  DgSessions.Rows[i].Cells["Password"].Value = MyEncrypter.DecrypteString(DSPersonalData.Tables["PersonalData"].Rows[i]["DT_Password"].ToString());
                                  DgSessions.Rows[i].Cells["Libre1"].Value = DSPersonalData.Tables["PersonalData"].Rows[i]["DT_Libre1"].ToString().Trim();
                                  DgSessions.Rows[i].Cells["Libre2"].Value = DSPersonalData.Tables["PersonalData"].Rows[i]["DT_Libre2"].ToString().Trim();
                            }
    Je supprimes une donnée dans une cellule avec le backspace, je valides avec ENTER , lorsque je sauvegarde les données , je reçois l'erreur
    la sauvegarde se fais comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    if ((DgSessions.Rows[i].Cells["Utilisation"].Value.ToString().Trim() != ""))
                            {
                                  string My_requete = "INSERT INTO PersonalData (DT_IdClient,DT_Utilisation,DT_Login,DT_Password,DT_Libre1,DT_Libre2,DT_ToDelete) VALUES (@IdClient, @Utilisation, @Login, @Password, @Libre1, @Libre2, @ToDelete)";
     
                                  SqlCommand My_Commande = new SqlCommand(My_requete, My_ConnexionSQL);
     
                                  My_Commande.Parameters.Add("@IdClient", SqlDbType.NVarChar, 65);
                                  My_Commande.Parameters.Add("@Utilisation", SqlDbType.NVarChar, 150);
                                  My_Commande.Parameters.Add("@Login", SqlDbType.NVarChar, 100);
                                  My_Commande.Parameters.Add("@Password", SqlDbType.NVarChar, 500);
                                  My_Commande.Parameters.Add("@Libre1", SqlDbType.NVarChar, 150);
                                  My_Commande.Parameters.Add("@Libre2", SqlDbType.NVarChar, 150);
                                  My_Commande.Parameters.Add("@ToDelete", SqlDbType.Bit);
     
                                   if (DgSessions.CurrentRow.Cells["Libre2"].Value == DBNull.Value | DgSessions.CurrentRow.Cells["Libre2"].Value == null )
                                        DgSessions.CurrentRow.Cells["Libre2"].Value = "";
     
     
     
     
     
     
                                        My_Commande.Parameters["@IdClient"].Value = LblIdDCustomer.Text.Trim();
                                  My_Commande.Parameters["@Utilisation"].Value = DgSessions.Rows[i].Cells["Utilisation"].Value.ToString().Trim();
                                  My_Commande.Parameters["@Login"].Value = DgSessions.Rows[i].Cells["Login"].Value.ToString().Trim();
                                  My_Commande.Parameters["@Password"].Value = MyEncrypter.EncrypteString(DgSessions.Rows[i].Cells["Password"].Value.ToString());
                                  My_Commande.Parameters["@Libre1"].Value = DgSessions.Rows[i].Cells["Libre1"].Value.ToString().Trim();
                                  My_Commande.Parameters["@Libre2"].Value = DgSessions.Rows[i].Cells["Libre2"].Value.ToString().Trim();
                                  My_Commande.Parameters["@ToDelete"].Value = false;
     
     
     
                                  try
                                  {
                                        My_Commande.Connection.Open();
                                        My_Commande.ExecuteNonQuery();
                                        My_Commande.Connection.Close();
     
     
                                  }
                                  catch (Exception ex)
                                  {
     
                                        MessageBox.Show(ex.Message.ToString());
                                  }
                            }
    Quelqu'un peut m'expliquer le problème ou le pourquoi
    La Connaissance est comme la joie elle s'accroît en la partageant!

  2. #2
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Salut,

    sais-tu sur quelle ligne exactement l'exception est levée ?
    La NullReferenceException est en général assez simple à trouver quand on a la ligne.
    Plus je connais de langages, plus j'aime le C.

  3. #3
    Membre confirmé Avatar de thierry007
    Homme Profil pro
    Autodidacte
    Inscrit en
    Août 2006
    Messages
    876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 876
    Points : 457
    Points
    457
    Par défaut
    BOnjour jopopmk
    Merci de prendre mon sujet

    l’exception est levée au moment de la sauvegarde .
    Si par exemple je supprime une données dans la colonne Libre2
    alors elle est levée sur la ligne : My_Commande.Parameters["@Libre2"].Value = DgSessions.Rows[i].Cells["Libre2"].Value.ToString().Trim();
    La Connaissance est comme la joie elle s'accroît en la partageant!

  4. #4
    Membre expérimenté
    Avatar de charouel
    Homme Profil pro
    Freelance
    Inscrit en
    Mars 2009
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 618
    Points : 1 454
    Points
    1 454
    Billets dans le blog
    9
    Par défaut
    Il faut faire un If sur chaque ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(DgSessions.Rows[i].Cells["Libre2"].Value!=null)
    My_Commande.Parameters["@Libre2"].Value = DgSessions.Rows[i].Cells["Libre2"].Value.ToString().Trim();

  5. #5
    Membre confirmé Avatar de thierry007
    Homme Profil pro
    Autodidacte
    Inscrit en
    Août 2006
    Messages
    876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 876
    Points : 457
    Points
    457
    Par défaut
    BOnjour Charouel

    Je ne peux donc pas imaginer faire la verification juste avant le passage des valeurs au paramètres de de la requête
    genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      if (DgSessions.CurrentCell.Value == DBNull.Value | DgSessions.CurrentCell.Value == null )
                                        DgSessions.CurrentCell.Value = "";
    La Connaissance est comme la joie elle s'accroît en la partageant!

  6. #6
    Membre confirmé Avatar de thierry007
    Homme Profil pro
    Autodidacte
    Inscrit en
    Août 2006
    Messages
    876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 876
    Points : 457
    Points
    457
    Par défaut
    Je viens de faire le test et cela a l'air de fonctionner, je vais l'implémenter dans le code

    merci charoulet pour l'aide

    Un peut obligé de faire comme ci-dessous car autrement la requête paramétrée renvoie une erreur elle aussi

    voici bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     if (DgSessions.CurrentCell.Value == null)
                                  {
                                        DgSessions.CurrentCell.Value = "";
                                  }
    La Connaissance est comme la joie elle s'accroît en la partageant!

  7. #7
    Membre expérimenté
    Avatar de charouel
    Homme Profil pro
    Freelance
    Inscrit en
    Mars 2009
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 618
    Points : 1 454
    Points
    1 454
    Billets dans le blog
    9
    Par défaut
    Il faut toujours faire des vérifications NULL pour assurer les données.

Discussions similaires

  1. [Débutant] cellule vide dataGridView
    Par zyhou dans le forum C#
    Réponses: 1
    Dernier message: 20/03/2012, 17h30
  2. [C#] colorier cellule vide dataGridView WinForm
    Par zyhou dans le forum Windows Forms
    Réponses: 2
    Dernier message: 23/02/2012, 10h47
  3. Comment savoir si cellule vide DataGridView ?
    Par savoir dans le forum VB.NET
    Réponses: 4
    Dernier message: 16/01/2011, 16h40
  4. différencier une cellule vide d'une cellule nulle
    Par schwarzy2 dans le forum VB.NET
    Réponses: 4
    Dernier message: 02/09/2008, 13h50
  5. [XSL-FO] Table avec cellule vide
    Par JustAGphy dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 12/05/2004, 14h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo