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 :

DataGridView erreur L'index était hors limites .. ne doit pas être négatif [Débutant]


Sujet :

VB.NET

  1. #1
    Membre régulier Avatar de MADA BLACK
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2015
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Décembre 2015
    Messages : 253
    Points : 123
    Points
    123
    Par défaut DataGridView erreur L'index était hors limites .. ne doit pas être négatif
    Salut Forum
    Salut tout le monde
    SVP j'ai besoin d'aide pour resoudre ce probleme
    J'ai Table1 nommee ( TBL_EMPLOYE ) avec 3 champs ( EMPLOYE_Code de type Text , EMPLOYE_Name de type Text , EMPLOYE_Salaire de type Numérique)
    J'ai Table2 nommee ( TBL_ATTENDANCE ) avec 6 champs ( ATTENDANCE_Employe_Code de type Text , ATTENDANCE_Days1 de type Numerique , ATTENDANCE_Days2 de type Numerique , ATTENDANCE_Days3 de type Numerique , ATTENDANCE_Days4 de type Numerique , ATTENDANCE_Days5 de type Numerique )
    Nom : 1.png
Affichages : 226
Taille : 28,3 Ko
    Nom : 2.png
Affichages : 220
Taille : 22,0 Ko
    J'ai rempli les trois premieres colonnes du DataGridView1 par la Table ( TBL_EMPLOYE ) on laissant la première ligne vide
    Nom : 4.png
Affichages : 225
Taille : 15,3 Ko
    J'ai ajouté 5 colonnes a ma DataGridView1 pour remplir les cordonnees de ces employes deja affichés dans la grille par ma Table ( TBL_ATTENDANCE ) .. En fonction d'unique code entre les deux tables ( EMPLOYE_Code ) dans la table ( TBL_EMPLOYE ) et ( ATTENDANCE_Employe_Code ) dans la table ( TBL_ATTENDANCE ) .. mais malheureusement j'ai eu ce message d'erreur ( L'index était hors limites. Il ne doit pas être négatif et doit être inférieur à la taille de la collection )
    Nom : 3.png
Affichages : 226
Taille : 127,3 Ko
    Voici tout mon code dans ma Form 1 :
    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
    Public Class Form1
        Dim Conne As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|Datadirectory|\EMPLOYE.Mdb;User Id=Admin;Jet OLEDB:Database Password=")
        Dim DT As New DataTable
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
     
            Dim DA As New OleDb.OleDbDataAdapter("SELECT EMPLOYE_Code , EMPLOYE_Name , EMPLOYE_Salaire From TBL_EMPLOYE", Conne)
            DT.Clear()
            DA.Fill(DT)
            If DT.Rows.Count > 0 Then
                Dim New_Rows As System.Data.DataRow = DT.NewRow
                New_Rows("EMPLOYE_Code") = DBNull.Value
                New_Rows("EMPLOYE_Name") = DBNull.Value
                New_Rows("EMPLOYE_Salaire") = DBNull.Value
                DT.Rows.InsertAt(New_Rows, 0)
            Else
                Me.DataGridView1.DataSource = Nothing
            End If
     
            DT.Columns.Add("Days1")
            DT.Columns.Add("Days2")
            DT.Columns.Add("Days3")
            DT.Columns.Add("Days4")
            DT.Columns.Add("Days5")
     
            Dim Cmd As OleDb.OleDbCommand = New OleDb.OleDbCommand("SELECT ATTENDANCE_Days1 , ATTENDANCE_Days2 , ATTENDANCE_Days3 , ATTENDANCE_Days4 , ATTENDANCE_Days5 From TBL_ATTENDANCE Where ATTENDANCE_Employe_Code = @Param_Code", Conne)
            Cmd.Parameters.AddWithValue("@Param_Code", OleDb.OleDbType.VarWChar).Value = Me.DataGridView1.Rows(1).Cells("EMPLOYE_Code").Value.ToString
            Dim Adp As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(Cmd)
            Adp.Fill(DT)
            If DT.Rows.Count > 0 Then
     
                For I As Integer = 0 To DT.Rows.Count - 1
                    For Each Attendance_Rows As DataRow In DT.Rows
                        Attendance_Rows("Days1") = DT.Rows(I).Item("ATTENDANCE_Days1")
                        Attendance_Rows("Days2") = DT.Rows(I).Item("ATTENDANCE_Days2")
                        Attendance_Rows("Days3") = DT.Rows(I).Item("ATTENDANCE_Days3")
                        Attendance_Rows("Days4") = DT.Rows(I).Item("ATTENDANCE_Days4")
                        Attendance_Rows("Days5") = DT.Rows(I).Item("ATTENDANCE_Days5")
                    Next
                Next
            End If
     
            Me.DataGridView1.DataSource = DT
     
        End Sub
    End Class
    Merci beaucoup d'avance pour l'aide
    Cordialement
    MADA

  2. #2
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 078
    Points : 17 144
    Points
    17 144
    Par défaut
    Salut

    Vue que tu as une ligne vide à la suite de ta ligne nom des colonnes au début de ton grid, il me semble bien qu'il te faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For I As Integer = 0 To DT.Rows.Count - 2
    pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Membre régulier Avatar de MADA BLACK
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2015
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Décembre 2015
    Messages : 253
    Points : 123
    Points
    123
    Par défaut
    Salut ProgElect
    Merci beaucoup pour l'intention d'aide .. malheureusement toujours le meme message d'erreur
    Merci beaucoup d'avance si vous pouvez regarder ce petit projet
    EMPLOYE.zip
    Cordialement
    MADA

  4. #4
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour Mada,
    Je n'aurai sans doute pas le temps de regarder ton projet Employe.zip aujourd'hui mais la réponse de ProgElecT me donne des idées à vérifier.
    Il me semble que le DGV doit fournir un paramètre pour la requête et il faut effectivement tenir compte que la ligne 0 est vide et que si la propriété "AllowUserToAddRow" est True, alors il y a aussi une ligne vide à la fin du DGV. Il y a donc des données aux lignes de 1 à Count-1 ou -2.
    Note que tenir vide la ligne 0 est une source de difficultés.
    Mais je vois une autre possibilité de problème dans ton code : il est possible que le DGV n'ait pas encore de données, que le DataTable n'ait pas encore été affecté au DataSource du DGV.
    J'examinerai ton projet dès que j'aurai fu temps...
    Bonne journée

  5. #5
    Membre régulier Avatar de MADA BLACK
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2015
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Décembre 2015
    Messages : 253
    Points : 123
    Points
    123
    Par défaut
    Bonjour maître PHIL ROB
    Merci beaucoup pour l'intention d'aide .. très gentil de votre part
    En réalité ma DataGridView1 .. AllowUserToAddRow = False
    La première ligne vide c'est pour afficher les noms du jours de mois
    Merci beaucoup d'avance
    Cordialement
    MADA

  6. #6
    Membre habitué Avatar de Sam Placi
    Homme Profil pro
    Développeur occasionnel
    Inscrit en
    Octobre 2019
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur occasionnel

    Informations forums :
    Inscription : Octobre 2019
    Messages : 68
    Points : 129
    Points
    129
    Par défaut
    Bonjour,
    Probablement que le DatagridView1 est encore vide quand tu essaies de lire sa colonne EMPLOYE_Code. Comme le remarque Phil Rob, dans ton code, il y a bien Me.DataGridView1.DataSource = Nothing mais rien d'autre qui remplirait la grille avec les données.
    Si le DataGridView1 est vide, le code ... ... .... = Me.DataGridView1.Rows(1).Cells("EMPLOYE_Code").Value.ToString donne une erreur parce que aucune Rows, aucune Cells.
    Cordialement,
    Sam

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 131
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 131
    Points : 1 641
    Points
    1 641
    Par défaut
    Je serai du même avis: ton code est fait dans le Form_Load et le datagridview n'est sans doute pas vraiment accessible et n'est pas peuplé et donc ne contient aucune ligne (vérifie rows.count de la datagridview).
    Utilise plutôt ton datatable DT.

  8. #8
    Membre régulier Avatar de MADA BLACK
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2015
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Décembre 2015
    Messages : 253
    Points : 123
    Points
    123
    Par défaut
    Citation Envoyé par Sam Placi Voir le message
    Bonjour,
    Probablement que le DatagridView1 est encore vide quand tu essaies de lire sa colonne EMPLOYE_Code. Comme le remarque Phil Rob, dans ton code, il y a bien Me.DataGridView1.DataSource = Nothing mais rien d'autre qui remplirait la grille avec les données.
    Si le DataGridView1 est vide, le code ... ... .... = Me.DataGridView1.Rows(1).Cells("EMPLOYE_Code").Value.ToString donne une erreur parce que aucune Rows, aucune Cells.
    Cordialement,
    Sam
    Salut Sam
    Merci infiniment pour vos intéressantes remarques
    Je vais essayer
    Merci encore
    Amicalement
    MADA

  9. #9
    Membre régulier Avatar de MADA BLACK
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2015
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Décembre 2015
    Messages : 253
    Points : 123
    Points
    123
    Par défaut
    Citation Envoyé par umfred Voir le message
    Je serai du même avis: ton code est fait dans le Form_Load et le datagridview n'est sans doute pas vraiment accessible et n'est pas peuplé et donc ne contient aucune ligne (vérifie rows.count de la datagridview).
    Utilise plutôt ton datatable DT.
    Salut umfred
    Merci beaucoup pour l'intervention
    Oui je suis d'accord .. mais ce qui m'étonne lorsque je retire complètement la deuxième tranche du code qui comit le problème alors DataGridView1 est bien remplit par ma table ( TBL_EMPLOYE ) je veux dire que la colonne ( EMPLOYE_Code ) normalement elle est remplie et n'est pas vide
    Amicalement
    MADA

  10. #10
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour Mada,

    lorsque je retire complètement la deuxième tranche du code qui comit le problème alors DataGridView1 est bien remplit par ma table ( TBL_EMPLOYE ) je veux dire que la colonne ( EMPLOYE_Code ) normalement elle est remplie et n'est pas vide
    Je viens d'ouvrir ton projet et je constate qu'effectivement le DGV est vide au moment se passe l'erreur. Pour répondre à ta remarque ci-dessus, vois dans ton code que tu affectes le DataSource du DGV juste à la fin de la procédure. Quand l'erreur se produit, le code n'est pas exécuté jusque-là. Par contre, si tu isoles les codes "à problèmes" et que les autres s'exécutent jusqu'à la fin, et le DGV apparaît avec les données de DT issues de la première requête.
    Peut-être que tu obtiendras ce que tu veux en plaçant le DataGridView1.DataSource = DT avant la requête à problème. Tu peux aussi extraire le Employe_Code directement de DT, comme le propose Umfred.

    Il te faut réorganiser ton code ...
    Je n'ai pas de temps pour tester aujourd'hui et ça va être difficile demain, mais je pense que tu as reçu assez de pistes de correction pour avancer.

    Bon travail ...

  11. #11
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 131
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 131
    Points : 1 641
    Points
    1 641
    Par défaut
    Citation Envoyé par MADA BLACK Voir le message
    Salut umfred
    Merci beaucoup pour l'intervention
    Oui je suis d'accord .. mais ce qui m'étonne lorsque je retire complètement la deuxième tranche du code qui comit le problème alors DataGridView1 est bien remplit par ma table ( TBL_EMPLOYE ) je veux dire que la colonne ( EMPLOYE_Code ) normalement elle est remplie et n'est pas vide
    Amicalement
    MADA
    Après la fin du Form_Load, oui, pas pendant (?)

  12. #12
    Membre régulier Avatar de MADA BLACK
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2015
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Décembre 2015
    Messages : 253
    Points : 123
    Points
    123
    Par défaut
    Citation Envoyé par Phil Rob Voir le message
    Bonjour Mada,
    Je viens d'ouvrir ton projet et je constate qu'effectivement le DGV est vide au moment se passe l'erreur. Pour répondre à ta remarque ci-dessus, vois dans ton code que tu affectes le DataSource du DGV juste à la fin de la procédure. Quand l'erreur se produit, le code n'est pas exécuté jusque-là. Par contre, si tu isoles les codes "à problèmes" et que les autres s'exécutent jusqu'à la fin, et le DGV apparaît avec les données de DT issues de la première requête.
    Peut-être que tu obtiendras ce que tu veux en plaçant le DataGridView1.DataSource = DT avant la requête à problème. Tu peux aussi extraire le Employe_Code directement de DT, comme le propose Umfred.
    Il te faut réorganiser ton code ...
    Je n'ai pas de temps pour tester aujourd'hui et ça va être difficile demain, mais je pense que tu as reçu assez de pistes de correction pour avancer.
    Bon travail ...
    Salut PHIL ROB
    Merci pour toutes les remarques et les conseils .. je vais reessayer de reorganiser ces codes et je vous dirai le résultat
    J'ai placé ( DataGridView1.DataSource = DT ) avant la requete probleme mais malheureusement voila ce que j'ai obtenu
    Nom : 1.png
Affichages : 181
Taille : 74,5 Ko
    Merci encore
    Amicalement
    MADA

  13. #13
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    J'essaierai d'y regarder demain...
    En attendant, juste pour diagnostiquer, peux tu utiliser un nouveau DataTable pour la 2ème requête ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim DT2 as New DataTable 
    ... la requête...
    Adp.Fill(DT2)
    ... ... ...
    Attendance_Rows ... ... ... = DT2...
    Bonne nuit...

  14. #14
    Membre régulier Avatar de MADA BLACK
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2015
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Décembre 2015
    Messages : 253
    Points : 123
    Points
    123
    Par défaut
    Bonne nuit maitre

  15. #15
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour Mada,

    Veux-tu bien remplacer tout ton code par le suivant et me dire si cela remplit bien le DGV comme tu le souhaites :
    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
    Public Class Form1
        Dim Conne As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|Datadirectory|\EMPLOYE.Mdb;User Id=Admin;Jet OLEDB:Database Password=")
        Dim DT As New DataTable
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
     
            Dim Requete As String = "SELECT TBL_EMPLOYE.EMPLOYE_Code, TBL_EMPLOYE.EMPLOYE_Name, TBL_EMPLOYE.EMPLOYE_Salaire, TBL_ATTENDANCE.ATTENDANCE_Days1, TBL_ATTENDANCE.ATTENDANCE_Days2, TBL_ATTENDANCE.ATTENDANCE_Days3, TBL_ATTENDANCE.ATTENDANCE_Days4, TBL_ATTENDANCE.ATTENDANCE_Days5
            From TBL_ATTENDANCE RIGHT Join TBL_EMPLOYE On TBL_ATTENDANCE.ATTENDANCE_Employe_Code = TBL_EMPLOYE.EMPLOYE_Code"
     
            Dim DA As New OleDb.OleDbDataAdapter(Requete, Conne)
            DT.Clear()
            DA.Fill(DT)
     
            Dim New_Rows As System.Data.DataRow = DT.NewRow
            DT.Rows.InsertAt(New_Rows, 0)
     
            Me.DataGridView1.DataSource = DT
     
        End Sub
    End Class
    ...

  16. #16
    Membre régulier Avatar de MADA BLACK
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2015
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Décembre 2015
    Messages : 253
    Points : 123
    Points
    123
    Par défaut
    Bonjour maître
    Merci beaucoup pour l'aide .. je vais l'essayer dès que je rentre chez moi
    Amicalement
    MADA

  17. #17
    Membre régulier Avatar de MADA BLACK
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2015
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Décembre 2015
    Messages : 253
    Points : 123
    Points
    123
    Par défaut
    Salut Phil Rob
    Merci infiniment maître
    Merci beaucoup pour l'impeccable solution .. simple .. courte .. facile à comprendre .. et surtout efficace
    C'est vraiment ce que je veux voir et avoir
    Parfaitement résolu
    Très gentil de votre part
    Amicalement
    MADA

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

Discussions similaires

  1. [Débutant] L'index était hors limites dans une datagriedview
    Par oumay dans le forum Windows Forms
    Réponses: 4
    Dernier message: 08/10/2019, 14h24
  2. L'index était hors limites ; VB NET 2012
    Par maximob dans le forum VB.NET
    Réponses: 2
    Dernier message: 02/03/2016, 15h44
  3. [Débutant] Problème L'index était hors limites ?
    Par iloveubb dans le forum VB.NET
    Réponses: 2
    Dernier message: 14/08/2015, 08h52
  4. L'index était hors limites
    Par Marie_7 dans le forum VB.NET
    Réponses: 3
    Dernier message: 10/04/2014, 21h43

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