Chargement d'un listbox de manière aléatoire

Signaler
Messages postés
158
Date d'inscription
samedi 22 juin 2002
Statut
Membre
Dernière intervention
27 juin 2015
-
Messages postés
158
Date d'inscription
samedi 22 juin 2002
Statut
Membre
Dernière intervention
27 juin 2015
-
Bonsoir.
Voilà le problème que j'ai
j'utilise dans mon application plusieurs listsbox dans des usersControls qui apparaissent ou non en fonction de ce que j'ai cliqué dans mon menu.

Il est seté graphiquement au niveau de mon datasource, et de mon displaymember/valuemember.

Pour le charger, je fais comme ceci
cmdMonDataSetDeMaliste.Fill(DSMaliste);
MonListBox.Refresh();

Pour la plupart cela se passe bien, mais pour certains, ils se chargent de manière aléatoire...
Par contre, si je fais le chargement en mode pas à pas en faisant un point d'arrrêt sur le fill, le dataset est à chaque fois rempli...

Pour le recharger correctement à chaque fois, je dois réappeler la page (qui j'imagine se reload), afin que cela s'affiche bien.

Alors oui je pourrais contourner le problème en faisant un bouton 'Refresh', mais ce ne serait pas une solution en soit...

Désolé pour la description 'obscure' du pb, le souci est que c'est vraiment aléatoire... Enfin oui et non, qd c'est lancé la première fois ça ne se charge pas, SAUF, SAuf si un autre listbox a été chargé auparvant, auquel cas là ça se passe bien à chaque fois. Et dans ts les cas, si je passe en mode debug dans le code, ça se charge bien à chaque fois...

Quelqu'un a t il déjà eu ce problème ???
Si c'est le cas, merci de me tenir au courant...

****************************************************
Mm plus le temps de jouer à W0rld 0F W@rcraft à force de trop coder...

13 réponses

Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
à priori, c'est une question asp.net, je pense que tu auras plus de réponses en posant ta question sur le forum http://www.aspfr.com

Sébastien FERRAND
[MVP C#]
Messages postés
158
Date d'inscription
samedi 22 juin 2002
Statut
Membre
Dernière intervention
27 juin 2015
1
Non je ne pense pas :) vu que mon application est bien en Winform... :)

****************************************************
Il n'y a pas de pb sans solutions : il faut juste trouver le temps pour les chercher
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
dans ce cas, évite le terme : "page"... [Pour le recharger correctement à chaque fois, je dois réappeler la page (qui j'imagine se reload), afin que cela s'affiche bien. ]

peux-tu nous montrer l'extrait de ton code qui charge les combos ?

Sébastien FERRAND
[MVP C#]
Messages postés
158
Date d'inscription
samedi 22 juin 2002
Statut
Membre
Dernière intervention
27 juin 2015
1
Autant pour moi...
Effectivement, il y a eu une confusion au niveau explication :))

Mon extrait de code chargeant les combos est celui indiqué au dessus. Seul les noms de variables changent...

//cmdMonDataSetDeMaliste est un dataadpter qui contient un
//SelectCommand.CommandText avec une re^quête SELECT dedans
//DsMaListe est un dataSet préformaté
cmdMonDataSetDeMaliste.Fill(DSMaliste);

// Chargement du listbox, enfin Refresh() (qui n'est pas
//forcément utile, mais que je rajoute à tout hasard
MonListBox.Refresh();

Souhaiterais tu voir une autre parcelle de code ? Comme tu peux le voir c'est simple au possible, et le mm code dans d'autres emplacements marche sans aucun souci...

****************************************************
Il n'y a pas de pb sans solutions : il faut juste trouver le temps pour les chercher
Messages postés
145
Date d'inscription
lundi 13 janvier 2003
Statut
Membre
Dernière intervention
27 décembre 2005
2
Je ne comprends pas pourquoi tu n'essaies pas de mettre un this.refresh
une fois que tu as fais tous tes chargements a la place d'un bouton ce
serait psa mieux (et transparent a l utilisateur) ?

La brigade meurt mais ne se rend pas (Hisoka)
Messages postés
158
Date d'inscription
samedi 22 juin 2002
Statut
Membre
Dernière intervention
27 juin 2015
1
Je me suis sans doute mal exprimé : je n'ai pas de bouton, et justement ne souhaite pas en mettre.
Mais le this.Refresh() ne marche pas apparemment... Pas au premier chargement en totu cas, mais qd on Reload (non ce n'est pas du asp.Net), disons plutot qd on REMET en visible=true et bringToFront le userControl en question, le this.Refresh() a bien été pris en compte...

D'ou le coté 'aléatoire' de ce pb.

****************************************************
Il n'y a pas de pb sans solutions : il faut juste trouver le temps pour les chercher
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
essaye ceci :

MonListBox.DataSource = null;
MonListBox.DataSource = DSMaListe;

Sébastien FERRAND
[MVP C#]
Messages postés
158
Date d'inscription
samedi 22 juin 2002
Statut
Membre
Dernière intervention
27 juin 2015
1
Bon alors là j'en perds mon latin...

J'ai changé de machine (je suis passé de ma machine perso à ma machine de taf, donc bcp plus gonflée) et là ça marche...

Sans aucune modif ts mes listBox se chargent sans aucun souci...
Sachant que je bosse avec Access comme DataBase...
Etrange, etrange... Quelqu'un aurait il une idée ?

Pour info, la config que j'ai chez moi est : Athlon 2800+, 512SDRAM (je sais c juste mais bon... On dit tjrs qu'on va en racheter et on en rachète jamais), alors qu'ici(au taf donc) c'est : Pentium 2.8Ghz, 1024 de RAM

Sinon je retenterais ton test sur ma machine perfo, mais si au moins quelqu'un peut me dire que d'une machine à une autre ça peut s'expliquer ?
Ou si quelqu'un a une idée de comment résoudre le pb ?

Tain c une histoire de dingue ça, j'y crois à peine, et pourtant c bien vrai...

****************************************************
Il n'y a pas de pb sans solutions : il faut juste trouver le temps pour les chercher
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
Athlon2800+ et 512Mo de ram, c'est largement suffisant... ca permet de voir ce que tu optimises ;)

je pense par contre, que si tu enchaînes trop vites les load des tes listbox, l'ouverture/fermeture à ta base peut poser problème. Ce qui explique qu'en debug ca marche nickel.
Pour résoudre ce problème, je pense qu'il suffit que tu ajoutes un Application.DoEvents(); entre chaque chargement.

Sébastien FERRAND
[MVP C#]
Messages postés
145
Date d'inscription
lundi 13 janvier 2003
Statut
Membre
Dernière intervention
27 décembre 2005
2
En plus un Athlon 2800+ c plus puissant qu'un pentium 2.8Ghz non ?

La brigade meurt mais ne se rend pas (Hisoka)
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
à peu équivalent je dirais...

au taf', j'ai un bi-pentium 3,2Go et 1Go de ram... donc... ca tourne

Sébastien FERRAND
[MVP C#]
Messages postés
158
Date d'inscription
samedi 22 juin 2002
Statut
Membre
Dernière intervention
27 juin 2015
1
Ok.
Je tenterais le application.DoEvents dès ce soir, sur ma machine perso donc...
Je me doutais bien qu'il s'agissait d'un pb à ce niveau... Mais je ne savais pas comment le solutionner...

Je cloturerais le pb dès ce soir si ça marche :)

Merci pour le conseil.
:)

****************************************************
Il n'y a pas de pb sans solutions : il faut juste trouver le temps pour les chercher
Messages postés
158
Date d'inscription
samedi 22 juin 2002
Statut
Membre
Dernière intervention
27 juin 2015
1
Bon j'ai confirmation...

Mm le Application.DoEvents ne fait rien...
Voici donc mon code en détail.

Du coté de mon evt qui charge la list ça donne ça :

ocmdDataMatieres.Fill(dsMatieres1);


lstMatieres.DataSource=
null;


lstMatieres.DataSource=DvMatieres;


lstMatieres.DisplayMember = "LIB_MATIERE";


lstMatieres.ValueMember = "CODE_MATIERE";


lstMatieres.Refresh();


Application.DoEvents();

(Je passe par un DataView qui reçoit DsMatieres en entrée... mais qui n'a pas de filtre au début).
Si vous voulez que je copie d'autres parties de mon code pour éventuellement vous aider, n'hésitez pas.

Cela pourrait il venir d'un pb d'environnement ?

****************************************************
Il n'y a pas de pb sans solutions : il faut juste trouver le temps pour les chercher