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 :

Problème datagridcombobox et insertion


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 59
    Par défaut Problème datagridcombobox et insertion
    Bonjour à tous,
    Bon voila je suis sur un petit agenda en vb , un prof m'avait donné un chemin à suivre mais j'ai préférer m'en écarter car tout le monde le faisait comme ca je voulais me départager un peu devant le jury^^.
    Donc voila mon problème j'ai un datagridview dans lequel j'ai 3 colonnes la première comportant une liste déroulante contenant les tranches horaires (alimenté par une base de données avec le libellé de la tranche en displayed et le codetranche en value), une colonne sujet et une dernière détail.
    Bon j'arrive à renseigner la liste déroulante nickel mais j'ai un gros problème quand je tente de faire une insertion dans la base de données acces à l'aide du bouton valider

    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
    Private Sub valider_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles valider.Click 'lorsque l'on clique sur le button1 (temporaire)
            Dim chaineconnexion As String
            chaineconnexion = "provider = microsoft.jet.oledb.4.0 ; data source = " &
                                                 Application.StartupPath & "\Baseagen.mdb;" 'connexion à la base de donnée
     
            Dim maconnexion As New OleDbConnection(chaineconnexion)
            maconnexion.Open()
     
            Dim i As Integer
            Dim datum As Date
     
            datum = (Day(Calendrier.SelectionStart) & "/" & Month(Calendrier.SelectionStart) & "/" & Year(Calendrier.SelectionStart))
            i = 0
            For Each row As DataGridViewRow In DataGridView1.Rows
                Dim req As String
     
                While i <= DataGridView1.DisplayedRowCount(True)
     
                    req = "insert into Agenda (Codetranche,Daterdv,Sujet,detail)  values (" & DataGridView1.Item(1, i).Value & ",'" & datum & "','" & DataGridView1.Item(2, i).Value & "','" & DataGridView1.Item(3, i).Value & "');"
     
                    Dim query As New OleDbCommand(req, maconnexion)
     
     
                    query.ExecuteNonQuery() 'Exécute la requête
                    i = i + 1
                End While
            Next
            MsgBox("insertion") 'Message de confirmation
        End Sub
    mais j'obtiens cette erreur:
    L'index était hors limites. Il ne doit pas être négatif et doit être inférieur à la taille de la collection.
    alors mes problèmes sont d'un l'erreur si dessus mais aussi que dois-je mettre pour prendre la valeur de la liste déroulante? dois-je la signaler comme une colonne lambda avec DataGridView1.Item(numcolonne, numligne).Value ou y'a til autre chose à mettre étant donnée que c'est une combobox ratachée à une colone de la datagridview


    Voici un screen pour vous faire une idée.^^
    Voila merci d'avance parce que la je sèche, bien que j'ai cherché sur le net et que souvent ils disent de rajouter des tonnes de lignes de codes que je comprends absolument et faisant appel à des connaissances en objet que je n'ai pas.

  2. #2
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    While i <= DataGridView1.DisplayedRowCount(True)
        '...
        DataGridView1.Item(1, i) ' exception quand i = DataGridView1.DisplayedRowCount(True)
        '...
    Il faut que tu sache que les index de collections commence à 0 et non à 1.

    Imaginons que DataGridView1.DisplayedRowCount(True) soit égal à 10, tu te retrouvera à un moment donné avec i qui sera égal à 10.. et du coup DataGridView1.Item(1, 10) sauf que la tu vas chercher la 11ème ligne alors qu'il y en a que 10. Et là c'est le drame!
    L'index était hors limites. Il ne doit pas être négatif et doit être inférieur à la taille de la collection.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 59
    Par défaut
    Y a un truc qui me chiffone car même quand je rajoute x ligne le Datagridview1.displayedrowcount(true) est tjrs égale à 0 , ca vient peut etre en partie de ça l'erreur non?

  4. #4
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Datagridview1.displayedrowcount(true) est tjrs égale à 0
    Toi seul sait ce qu'il y a dans ton datagridview (il nous manque du code..).

    J'ai seulement chercher à savoir d'ou vient ton exception..
    Tu peux l'éviter en changeant While i <= DataGridView1.DisplayedRowCount(True) en While i < DataGridView1.DisplayedRowCount(True) ou While i <= DataGridView1.DisplayedRowCount(True) - 1

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 59
    Par défaut
    Je viens de tester ce que tu viens de proposer le propblème persiste =s mais qu'entends tu par
    Toi seul peut connaître ce qu'il y a dans ton datagridview..
    sachant que même quand il ya 3 ligne le rowcount renvoit 0 , c'est bizarre non?
    Donc il recherche la ligne dans une datagrid qui n'a pas de ligne alors qu'il yen a troic d'afficher désolé mais moi la ...

    Edit: erf désolé j'avais mal lu tiens voila le code^^

    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    Imports System
    Imports System.Data
    Imports System.Data.OleDb
    Imports Microsoft.VisualBasic
    Public Class Form1
     
     
     
     
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            'TODO: cette ligne de code charge les données dans la table 'BaseagenDataSet.Tranche'. Vous pouvez la déplacer ou la supprimer selon vos besoins.
            Me.TrancheTableAdapter.Fill(Me.BaseagenDataSet.Tranche)
     
     
            Me.DataGridView1.ColumnCount = 3
            Me.DataGridView1.RowCount = 2
            Me.DataGridView1.Columns(0).Width = 90
            Me.DataGridView1.Columns(1).Width = 100
            Me.DataGridView1.Columns(2).Width = 200
            Me.DataGridView1.Columns(0).Name = "Heure"
            Me.DataGridView1.Columns(1).Name = "Sujet"
            Me.DataGridView1.Columns(2).Name = "Détail"
            Me.DataGridView1.AllowUserToAddRows = False
        End Sub
     
     
        Private Sub Calendrier_DateSelected(ByVal sender As Object, ByVal e As System.Windows.Forms.DateRangeEventArgs) Handles Calendrier.DateSelected
            DataGridView1.Visible = True
            ajouligne.Visible = True
            valider.Visible = True
            casedate.Visible = True
            intro.Visible = True
            casedate.Text = FormatDateTime(Calendrier.SelectionStart, DateFormat.LongDate)
        End Sub
     
        Private Sub ajouligne_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ajouligne.Click
            Me.DataGridView1.RowCount = (Me.DataGridView1.RowCount + 1)
     
     
     
        End Sub
     
     
        Private Sub valider_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles valider.Click 'lorsque l'on clique sur le button1 (temporaire)
            Dim chaineconnexion As String
            chaineconnexion = "provider = microsoft.jet.oledb.4.0 ; data source = " &
                                                 Application.StartupPath & "\Baseagen.mdb;" 'connexion à la base de donnée
     
            Dim maconnexion As New OleDbConnection(chaineconnexion)
            maconnexion.Open()
     
            Dim i As Integer
            Dim datum As Date
     
            datum = (Day(Calendrier.SelectionStart) & "/" & Month(Calendrier.SelectionStart) & "/" & Year(Calendrier.SelectionStart))
            i = 0
     
     
            For Each row As DataGridViewRow In DataGridView1.Rows
                Dim req As String
                While i <= DataGridView1.DisplayedRowCount(True) - 1
     
                    req = "insert into Agenda (Codetranche,Daterdv,Sujet,detail)  values (" & DataGridView1.Item(1, i).Value & ",'" & datum & "','" & DataGridView1.Item(2, i).Value & "','" & DataGridView1.Item(3, i).Value & "');"
     
                    Dim query As New OleDbCommand(req, maconnexion)
     
     
                    query.ExecuteNonQuery() 'Exécute la requête
                    i = i + 1
                End While
            Next
     
            MsgBox("insertion") 'Message de confirmation
        End Sub
     
     
     
     
     
    End Class

  6. #6
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Je viens de tester ce que tu viens de proposer le propblème persiste =s
    En fait, je pense que j'avais partiellement raison pour l'exception..
    Il faut que tu décale aussi les index pour les colonnes (DataGridView1.Item(3, i) '<- 4eme colonne..)


    EDIT: Je viens de voir ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.DataGridView1.RowCount = (Me.DataGridView1.RowCount + 1)
    Ça me paraît bizarre pour ajouter une ligne..
    Essaie plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.DataGridView1.Rows.Add({})

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

Discussions similaires

  1. Problème avec un INSERT
    Par nnj dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 01/08/2006, 15h51
  2. [C#] problème avec l'insertion des données dans MySQL
    Par madica dans le forum Accès aux données
    Réponses: 7
    Dernier message: 08/11/2005, 13h27
  3. [DREAM MX] Problème avec une insertion d'une anim' flash
    Par Mout85 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 16/09/2005, 12h47
  4. problème sur requete insert
    Par shadowmoon dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/06/2005, 11h46
  5. [MFC] problème avec les insertions dans CComboBox
    Par Joeleclems dans le forum MFC
    Réponses: 12
    Dernier message: 11/06/2004, 15h31

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