Remplissage asynchrone d'un datagridview

cs_Jorgui Messages postés 3 Date d'inscription mercredi 6 juin 2012 Statut Membre Dernière intervention 9 août 2013 - 9 août 2013 à 16:27
cs_Jorgui Messages postés 3 Date d'inscription mercredi 6 juin 2012 Statut Membre Dernière intervention 9 août 2013 - 9 août 2013 à 18:59
Bonjour à tous,

Je rempli un datagridview à partir d'un tableau de données de string et c'est très lent.

Du coup quand les données sont nombreuses, l'utilisateur pète le plombs.
Comment ça marche.

Dans l'ordre,
- L'utilisateur rentre un mot clé puis clic sur un bouton rechercher
- Par requete SQL, je rempli d'abord un tableau (environ 20 colonnes) à partir d'une table de base de donnée mdb. Ca ca va très très vite. Même pour 1000 lignes
- Je transfert les données du tableau vers le datagridview. Ca c'est très lent.

J'aimerai que ce remplissage se fasse de façon asynchrone pour que l'utilisateur puisse cliquer sur un bouton "Annuler".

Je ne maitrise absolument pas les threads ni backgroundworker (c'est trucs que j'ai vu sur le net...) et les tuto ne sont pas assez clair pour moi...

Quelqu'un a-t-il une solution pré-machée pour moi...

Merci d'avance

2 réponses

Utilisateur anonyme
9 août 2013 à 16:44
"- Je transfert les données du tableau vers le datagridview. Ca c'est très lent."
Avant de te lancer dans les threads, il faudrait peut-être revoir ta méthode. Quelle est-elle ? Et pourquoi passer par un tableau ? Du code que diable!
0
cs_Jorgui Messages postés 3 Date d'inscription mercredi 6 juin 2012 Statut Membre Dernière intervention 9 août 2013
9 août 2013 à 18:59
Salut Banana32,

Merci pour ta réponse rapide! Je vais essayer de préciser un peu alors.

J'ai d'abord crée un tableau afin de ne récupérer (à chaque requête SQL) que les données des colonne qui m'intéressent. (La Table de la MDB contient 140 colonnes...)
Ensuite, certaines colonnes de mon tableau contiennent des informations qui ne sont pas contenues dans la MDB, mais que je vais chercher ailleurs

Et puis la vrai raison de fond, c'est qu'étant débutant, je ne savais pas faire autrement :-p

Au niveau du code :

J'ai un module fourre-tout dans lequel j'ai une procédure qui :
- Effectue la requête SQL sur la MDB
- Enregistre les données des colonnes souhaitées dans le tableau de string

Ensuite une procédure qui fait ça :

Private Sub MAJDataGridView()
Dim Compt1, Compt2 As Integer

For Compt1 = 0 To NbreMissions - 1
myDataGridView.Rows.Add()
For Compt2 = 1 To NbreColonnesListing - 1
myDataGridView(Compt2, Compt1).Value = _
ListingMissions(Compt2, Compt1)
End If
Next
Next
End Sub

ListingMissions étant mon tableau (Variable publique déclarée dans mon module fourre-tout)

J'ai testé, c'est cette dernière procédure qui prend du temps quand ma requete renvoi beaucoup d'enregistrements

Franchement, revoir cette méthode c'est galère. Dans le reste de mon logiciel, je vais parfois chercher les informations directement dans le datagridview, mais parfois dans le tableau, car elles n'y sont pas stockées tout à fait de la même manière.

Tout ce que je souhaite, c'est avoir un bouton qui permette à l'utilisateur de stopper la requête en cours.

Est-ce que ceci te permet d'y voir plus clair?
0
Rejoignez-nous