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

VB.NET Discussion :

la référence d'objet n'est pas définie à une instance d'un objet [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 12
    Par défaut la référence d'objet n'est pas définie à une instance d'un objet
    Bonsoir les développeurs

    J'essaie de remplir ma table Tapis à partir de ma datagridview remplie par l'utilisateur, je déclare les colonnes de ma datagridview dans ma form_load.
    Mon problème est au niveau de ma commande Insert into, les valeurs sont bien insérés dans ma base mais le message d'erreur : la référence d'objet n'est pas définie à une instance d'un objet est tjrs là, je sais pas pkoi

    Je vous copie mon code, merci d'avance pour votre aide
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     'Définition de la datagridview
     
                'ref
                Dim ColRef As New DataGridViewTextBoxColumn
                Me.DataGridView1.Columns.Add(ColRef)
                ColRef.Name = "Référence"
                ColRef.HeaderText = "Référence"
                'controle
                Dim ColCon As New DataGridViewTextBoxColumn
                Me.DataGridView1.Columns.Add(ColCon)
                ColCon.HeaderText = "Contrôle"
                ColCon.Name = "Contrôle"
                'Texture
                Dim ColTexture As New DataGridViewComboBoxColumn
                DataGridView1.Columns.Add(ColTexture)
                ColTexture.Name = "Texture"
                ColTexture.HeaderText = "Texture"
                ColTexture.Items.Add("CU*IR")
                ColTexture.Items.Add("KL*IM")
                ColTexture.Items.Add("12*12")
                ColTexture.Items.Add("20*20")
                ColTexture.Items.Add("25*26")
                ColTexture.Items.Add("30*30")
                ColTexture.Items.Add("40*40")
                ColTexture.Items.Add("50*50")
                ColTexture.Items.Add("60*60")
                ColTexture.AutoSizeMode = DataGridViewAutoSizeColumnMode.None
                ColTexture.Width = 80
                Dim ColLong As New DataGridViewTextBoxColumn
                DataGridView1.Columns.Add(ColLong)
                ColLong.HeaderText = "Longueur"
                ColLong.Name = "Longueur"
                Dim ColLarg As New DataGridViewTextBoxColumn
                DataGridView1.Columns.Add(ColLarg)
                ColLarg.HeaderText = "Largeur"
                ColLarg.Name = "Largeur"
                Dim ColSur As New DataGridViewTextBoxColumn
                DataGridView1.Columns.Add(ColSur)
                ColSur.HeaderText = "Surface"
                ColSur.Name = "Surface"
                'Matière
                Dim ColMatiere As New DataGridViewComboBoxColumn
                DataGridView1.Columns.Add(ColMatiere)
                ColMatiere.Name = "Matière"
                ColMatiere.HeaderText = "Matière"
                ColMatiere.Items.Add("Laine")
                ColMatiere.Items.Add("Soie")
                ColMatiere.AutoSizeMode = DataGridViewAutoSizeColumnMode.None
                ColMatiere.Width = 80
                'Genre
                Dim ColGenre As New DataGridViewComboBoxColumn
                DataGridView1.Columns.Add(ColGenre)
                ColGenre.Name = "Genre"
                ColGenre.HeaderText = "Genre"
                ColGenre.Items.Add("1")
                ColGenre.Items.Add("2")
                ColGenre.AutoSizeMode = DataGridViewAutoSizeColumnMode.None
                ColGenre.Width = 80
     
                Dim ColDep As New DataGridViewTextBoxColumn
                DataGridView1.Columns.Add(ColDep)
                ColDep.HeaderText = "Département"
                ColDep.Name = "Département"
                Dim ColDate As New DataGridViewTextBoxColumn
                DataGridView1.Columns.Add(ColDate)
                ColDate.HeaderText = "Date"
                ColDate.Name = "Date"
                Dim ColPrix As New DataGridViewTextBoxColumn
                DataGridView1.Columns.Add(ColPrix)
                ColPrix.HeaderText = "Prix Achat"
                ColPrix.Name = "Prix Achat"
    L'exception est générée au niveau de ma commandText:
    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
     
     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim cmdAdd As New SqlCommand
            Dim i As New Integer
     
     
            If Not Myconnexion.State = ConnectionState.Open Then
                Myconnexion.Open()
            End If
            cmdAdd.Connection = Myconnexion
     
     
            For i = 0 To Me.DataGridView1.Rows.Count - 1
                Me.DataGridView1.Rows(i).Cells(3).Value = Replace((Me.DataGridView1.Rows(i).Cells(3).Value), ",", ".")
                Me.DataGridView1.Rows(i).Cells(4).Value = Replace((Me.DataGridView1.Rows(i).Cells(4).Value), ",", ".")
                Me.DataGridView1.Rows(i).Cells(5).Value = Replace((Me.DataGridView1.Rows(i).Cells(5).Value), ",", ".")
                cmdAdd.CommandText = "INSERT INTO Tapis ( Référence, Contrôle, Texture, Longueur, Largeur, Surface, Matière, Genre, Département, Date, PrixAchat, IdBazar, NBonAchat) VALUES ( " & _
                 Me.DataGridView1.Rows(i).Cells(0).Value & " , " & Me.DataGridView1.Rows(i).Cells(1).Value & " , '" & Convert.ToString(Me.DataGridView1.Rows(i).Cells(2).Value) & "' , " & Me.DataGridView1.Rows(i).Cells(3).Value & " , " & Me.DataGridView1.Rows(i).Cells(4).Value & " , " & Me.DataGridView1.Rows(i).Cells(5).Value & _
                " , '" & Me.DataGridView1.Rows(i).Cells(6).Value.ToString & "' , '" & Me.DataGridView1.Rows(i).Cells(7).Value.ToString & "' , '" & Convert.ToString(Me.DataGridView1.Rows(i).Cells(8).Value) & "' , '" & Convert.ToString(Me.DataGridView1.Rows(i).Cells(9).Value) & _
                "' , '" & Me.DataGridView1.Rows(i).Cells(10).Value & _
                "' , " & Me.TextBox1.Text & " , " & Me.TextBox2.Text & ")"
                cmdAdd.ExecuteNonQuery()
            Next
            MsgBox("Bon d'achat confirmé !", MsgBoxStyle.Information)
            cmdAdd.Dispose()
            Myconnexion.Close()
     
        End Sub

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 81
    Par défaut
    Tes index de colonnes ont l'air corrects.

    Pour les colonnes 6 et 7, tu fais un Value.ToString. Si la valeur est à Nothing, tu auras une NullReferenceException.

    Le plus simple pour trouver d'où ça vient, c'est de mettre un point d'arrêt sur ta ligne, et tu ajoutes des espions sur les propriétés. Comme ça quand le point d'arrêt sera atteint, tu verras exactement quelles valeurs sont dans tes propriétés.

  3. #3
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    Il vaudrait mieux utiliser les requêtes paramétrées, cela évite pas mal de soucis.
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  4. #4
    Membre averti
    Femme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 12
    Par défaut
    Merci pour vos réponses, problème résolu .

    Faute d'inattention: La faute était dans ma boucle for, elle doit s'arreter à i = Me.DataGridView1.Rows.Count - 2 car la dernière ligne Me.DataGridView1.Rows.Count - 1 avait des valeurs null, aucune donnée saisie par l'utilisateur, c'est une ligne ajoutée automatiquement par la datagridview.

    Merci Sokhz & infosam76, vous m'avez bcp aidé

  5. #5
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    Je pense si c'est comme un composant que je connais bien en vb6 que vous devez pouvoir supprimer cette ligne ce qui serais quand même plus propre que le -2
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  6. #6
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 81
    Par défaut
    La DataGridView possède une propriété CanUserAddRow qui mise à False supprime la ligne ajoutée automatiquement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 28/09/2007, 10h38
  2. Réponses: 2
    Dernier message: 09/09/2007, 14h25
  3. Réponses: 8
    Dernier message: 04/06/2007, 16h20
  4. Réponses: 24
    Dernier message: 01/06/2007, 09h26
  5. Réponses: 8
    Dernier message: 11/07/2006, 17h27

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