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

Windows Forms Discussion :

[c# 2.0] Problème performance sur "listview" type outlook


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2005
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 40
    Points : 26
    Points
    26
    Par défaut [c# 2.0] Problème performance sur "listview" type outlook
    Bonjour,

    Je cherche a construire un composant ressamblant à la "listview" des messages avec previous d'outlook. Après une recherche sur le net je suis tombé sur cet article proposant la construction d'un panel principal intégrant pour chaque message un panel specifique.

    http://www.elguille.info/colabora/NE...k_ListView.htm (à traduire avec google translation in English si comme moi vous ne parler pas espagnol)

    Le rendu est vraiment sympa et correspond à mes attentes. Cependant cette solution souffre de gros problèmes de performance dès qu'il y a plus de 100 messages à afficher et pour ma part j'en ai 2000 à 3000.

    Je cherche donc une piste qui me permettrait de réduire le temps de chargement et donc d'indisponibilité de la machine mais surtout une méthode qui m'eviterai de faire exploser l'appli car avec 2000 ou 3000 panels l'exemple donné déclare forfait !

    j'ai pensé a une mettre en place un thread qui me construirait la liste en background ce qui réduirait le temps de chargement (il faut que je cherche comment faire) mais je ne suis tjrs pas sûr d'arriver à charger 2000 ou 3000 panels sans tout exploser.

    Merci d'avance pour vos conseils

    Cdt,
    2020

  2. #2
    AP
    AP est déconnecté
    Membre confirmé
    Avatar de AP
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2002
    Messages : 480
    Points : 538
    Points
    538
    Par défaut
    plus de 100 controls sur un formulaire ca commence à être un peu lourd. parler de mililers, ca devient du suicide!!!
    Si tu ne veux que l'aspect preview de la grille outlook alors le plsu simple est d'hériter de listbox et de dessiner toi-même les items (ownerdraw):
    exemple de la méthode : http://www.c-sharpcorner.com/UploadF...awListBox.aspx

  3. #3
    Nouveau membre du Club
    Inscrit en
    Novembre 2005
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    Je suis en effet assez d'accord. La solution est finalement bcp trop lourde et devient de toute façon impossible à utiliser avec autant d'élément.

    La seule solution possible reste de gérer une pagination par 30 éléments par exemple et ne construire que les éléments nécessaires à la visu. Mais le refresh de la liste que cela nécessite va créer des scintillements qui ne sont pas "confortable" à l'utilisation.

    J'avais pensé à la solution que vous proposez mais je dois poser un certain nombre de contrôles tel que des liens, des images des textes qui regrouperont un certain nombre d'infos sur une société :

    Voici le rendu souhaité en ASCII art pour chaque société de la liste ;-)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    --------------------------------------------
    | ico  |                                    |Etat      |
    |Nom de la société                                  |
    |Localisation      | Nbr salariés      |Code Cli |
    |Lien compta               |  Lien gestion        |
    ---------------------------------------------
    Sachant que l'on aimerait bien pouvoir changer facilement la visu de chaque panel pour permettre par exemple un affichage plus simple ou un design correspond plus au souhait du client ou tout simplement réutiliser le composant créé pour afficher d'autre type d'informations (par exemple une liste de salariés), redessiner les items me semble un peu complexe à maintenir et pas suffisament flexible. Pourrais je d'ailleurs redessiner un item comme ci-dessus ? Car là il ne s’agit pas seulement de jouer sur les fonts et le background.

    La solution la plus simple serait sûrement d'affecter un panel à un datagridView qui lui doit sûrement savoir gérer correctement l'affichage car il est déjà en possibilité de dessiner et gérer par exemple 3000 enregistrements avec des boutons et des checkbox etc ....

    Reste à trouver comment faire.

    Merci

  4. #4
    AP
    AP est déconnecté
    Membre confirmé
    Avatar de AP
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2002
    Messages : 480
    Points : 538
    Points
    538
    Par défaut
    Avoir plusieurs controls par datagridviewcell n'est pas une super idée: c'est complexe à mettre en place et ce n'est pas fait pour.
    Tu as donc plusieurs choix:
    - développer ton propre control: si tu n'en n'as jamais fait ca va être un peu douloureux quoique très formateur.
    - partir sur un composant commercial qui devrait savoir faire cela sans trop de problème
    - essayer de bidouiller la grille sourcegrid. Elle est gratuite et je pense que tu peux arriver à qqlch avec.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Novembre 2005
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    As tu un lien pour sourceGrid a me proposer ? (sans vouloir abuser)

    Au final mon datagridViewCell dérivé ne contiendrai qu'un panel qui contiendrai lui plusieurs labels ... Je ne sais si ca sera si complexe que cela car le paint du panel devrait gerer le contenu du panel et le paint de la cell celui du panel...
    Je vais tester quand même.

    Pour le composant commercial pour le moment c'est exclu.

    Créé moi même un composant, je ne l'ai jamais fait mais je ne vois pas comment faire sans dériver soit d'une listview, d'un datagridView ou d'un panel et dans ce cas je retombe sur les mêmes problématiques. A voir si tout le reste échoue.

    Merci pour tes conseils.

  6. #6
    AP
    AP est déconnecté
    Membre confirmé
    Avatar de AP
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2002
    Messages : 480
    Points : 538
    Points
    538
    Par défaut
    J'ai relu ton problème et en fait la vrai question est là:
    As-tu dans tes panel un élément actif? (par élément actif, je veux dire bouton, ...) ou n'est que que l'affichage?
    Si ce n'est que de l'affichage c'est simple à faire. Sinon ca va être plus compliqué.
    source grid: http://www.devage.com/Wiki/ViewArtic...grid&version=0

  7. #7
    Nouveau membre du Club
    Inscrit en
    Novembre 2005
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    Uniquement des labels ... voir des link Labels si possible...

    Je me suis un peu détourné du problème ces dernier jours pour régler un autre problème mais je m'y repenche aujourd'hui.

    Je pense qu'en redefinissant la méthode paint d'un composant dérivé de datagridViewTextBoxCell et datagridViewTextBoxColumn un peu comme pour cet exemple de progressBar dans un datagridView que j'ai trouvé (mrrf j'ai plus le lien tans pis j'ai au moin le code). Cela peut fonctionner.

    Par contre question que je me pose c pourquoi tous les exemples de composants créés dérive de DatagridViewTextBoxCell and DatagridViewTextBoxColumn et non pas de DatagridViewCell et DatagridViewColumn ?

  8. #8
    Nouveau membre du Club
    Inscrit en
    Novembre 2005
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    Bon finalement mon exemple n'est pas bon, car il ne fait que dessiner un rectangle correspondant a l'avancée de jauge en backgroud d'un textBox.
    Ce que je ne cherche Retour à 0 donc.

    Quel serait t'on idée pour réaliser cela facilement ?

  9. #9
    Nouveau membre du Club
    Inscrit en
    Novembre 2005
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    Dernière news après moulte recherches la voie serait dans l'implémentation de l'interface IDataGridViewEditingControl.

    Voici les articles :

    http://forums.microsoft.com/MSDN/Sho...=3056&SiteID=1
    http://forums.microsoft.com/MSDN/Sho...65597&SiteID=1
    http://msdn2.microsoft.com/fr-fr/lib...80(VS.80).aspx

  10. #10
    Nouveau membre du Club
    Inscrit en
    Novembre 2005
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    Grace aux articles ci-dessus j'ai reussi en bidouillant un peu à afficher mon pannel dans mes cellules.

    J'ai encore un problème de refresh mais le post n'étant plus en relation avec ces nouveaux problèmes je le cloture.

    Merci

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

Discussions similaires

  1. performance sur une listview avec beaucoup de lignes
    Par jerem_orga dans le forum jQuery
    Réponses: 4
    Dernier message: 01/02/2012, 10h24
  2. Problème performance sur une jointure
    Par chicken92000 dans le forum Développement
    Réponses: 12
    Dernier message: 08/02/2011, 13h57

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