Erreur out of range avec l' utilisation d' un DataGridView

Signaler
Messages postés
23
Date d'inscription
dimanche 1 avril 2001
Statut
Membre
Dernière intervention
15 octobre 2017
-
Messages postés
95
Date d'inscription
vendredi 7 février 2003
Statut
Membre
Dernière intervention
28 novembre 2017
-
Bonjour,
dans la procédure ci-dessous, je remplis un DataGridView1 avec les résultats d' une requête sql.

Lorsque ma requêtes contient 1 ou 2 enregistrements, tout va bien. Les 2 lignes sont créer dans le datagridview1.

Lorsque ma requêtes contien 3 enregistrements et plus, le DataGridView1 se rempli et créé un ligne pour l'enregistrement en position zéro et un, mais lorsqu' il arrive au 3e enregistrement en position 2 il me fait l'erreur suivante:

«Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index»

Lorsqu' il arrive à cette ligne:

«DataGridView1.Item(0, cpt_enreg).Value = ObjetDataTable.Rows(cpt_enreg).Item("municipale_new").ToString»

Il s'agit d'entrer le premier item dans la nouvelle ligne du DataGridView, lorsque l'erreur ce produit, cpt_enreg = 2

Car je boucle avec un For pour passer tout les enregistrement que ma requêtes ma retourné.

En fouillant sur internet et sur le site,
je comprend que mon tableau DataGridView1 semble trop petit comparativement au tableau généré par ma requêtes lorsque j'ai plus de 2 enregistrement en retour....

La question est donc comment contourner le problème ?

Actuellement, je n'ai pas connecter mon DataGridView en binddings à un DataSet en mode automatique.

Y a t' il un autre composant que je pourrait utiliser pour avoir le même résultat d'affichage ?

Je code avec Visual Studio 2010 en vb.net


Voici mon code :

Dim cpt_enreg As Integer
'Si plus d'un enregistrement remplir le DataGridView1
If ObjetDataTable.Rows.Count > 1 Then
'Si il existe plus d'un enregistrement ont boucle sur chacun des
'enregistrement et ont insert les informations dans le DataGridView.


DataGridView1.Rows.Add()

'Dans la parenthèse Item du DataGridView, le premier chiffre est la colonne le second chiffre est la ligne
For cpt_enreg = 0 To ObjetDataTable.Rows.Count - 1

'On écrit dans le DataGridView les infos
'de chaque enregistrements supplémentaires

DataGridView1.Item(0, cpt_enreg).Value = ObjetDataTable.Rows(cpt_enreg).Item("municipale_new").ToString

DataGridView1.Item(1, cpt_enreg).Value = ObjetDataTable.Rows(cpt_enreg).Item("type_new").ToString

DataGridView1.Item(2, cpt_enreg).Value = ObjetDataTable.Rows(cpt_enreg).Item("nom_rue_new").ToString

DataGridView1.Item(3, cpt_enreg).Value = ObjetDataTable.Rows(cpt_enreg).Item("no_civique_new").ToString

DataGridView1.Item(4, cpt_enreg).Value = ObjetDataTable.Rows(cpt_enreg).Item("code_postal_new").ToString

DataGridView1.Item(5, cpt_enreg).Value = ObjetDataTable.Rows(cpt_enreg).Item("suffix_new").ToString

DataGridView1.Item(6, cpt_enreg).Value = ObjetDataTable.Rows(cpt_enreg).Item("suite_new").ToString




Next


End If



'VALIDATION DE LA VALEUR DE clique_ancien AFIN DE SAVOIR

'SI ON DOIT LE RÉINITIALISER OU NON.

If clique_ancien = True Then


clique_ancien = False



End If

Merci de votre aide !
emarck

1 réponse

Messages postés
95
Date d'inscription
vendredi 7 février 2003
Statut
Membre
Dernière intervention
28 novembre 2017

Salut,

Personnellement, je développe sous VB 2005 et pour un affichage comme le tien, je passe par un BindingSource connecté sur ma base de donnée par la propriété DataSource et dans la propriété DataMember le nom de ma table, requête ou vue. Pour ce qui est de mon DataGridView, je définis la propriété DataSource pointant sur la table ou la requête du BindingSource.

Si tout se passe bien, mon DataGridView reçoit les différents nom de champs. Et l'affichage des données se fait automatiquement lors de l'exécution du projet.


Bon dév.


AlKa