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

C# Discussion :

Odre d'affichage de colonnes dans un datagridview


Sujet :

C#

  1. #1
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut Odre d'affichage de colonnes dans un datagridview
    Bonjour

    J'essaye de comprendre un curieux phénomene

    J'ai un datagridview
    Je lui assigne une datasource (une liste ce cas ci)

    Normalement, les colonnes s'affichent dans l'ordre de déclaration des variables de la classe objet de la liste (c'est en tout cas le cas constaté jusqu'ici)

    Je viens de constater pour une machine particuliere que la meme application affiche sur une des machine un ordre différent ???

    Quelqu'un a-t-il une explication et une maniere de résoudre cela ?
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  2. #2
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Qaund la grille est en AutogenerateColumns = true, on n'a aucune garantie de l'ordre des colonnes. je ne pense pas que la réflexion garantisse de récupérer les propriétés d'un objet dans l'ordre de déclaration. or c'est préciséement ce que dois faire la DGV au runtime.

    Donc : ne pas générer les colonnes de la DGV automatiquement Si tu peux, depuis le designer, tu peux affecter à ta grille une nouvelle source de données qui est le type d'un objet métier ; le designer te créera un BindingSource et autant de colonnes qu'il y a de propriétés dans ton objet, don tu peux bien sûr changer l'ordre à ta guise via le designer.
    ಠ_ಠ

  3. #3
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    On peut réordonner systématquement les colonnes après avoir affecté le Data source:
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private void AdjustColumnOrder()
    {
        customersDataGridView.Columns["CustomerID"].Visible = false;
        customersDataGridView.Columns["ContactName"].DisplayIndex = 0;
        customersDataGridView.Columns["ContactTitle"].DisplayIndex = 1;
        customersDataGridView.Columns["City"].DisplayIndex = 2;
        customersDataGridView.Columns["Country"].DisplayIndex = 3;
        customersDataGridView.Columns["CompanyName"].DisplayIndex = 4;
    }
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  4. #4
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Salut

    Je rappelle a tout hazard que cette app tourne sur 7 machines differentes sans prpblèmes et que tout d'un coup la huitime fait des caprice ..... ??


    J'ai essayé le coup du displayed index ca mais c'est encore plus fou !!

    Sur l'event cell_click, je teste le columnindex

    Jusqu'ici ayant mis le reorder column a false j'assumais l'ordinal,

    Donc j'attendais les valeurs des colonnes 1 2 ou 3 par exemple
    Dans le cas qui s'est presenté 1 etait en 3 et 2 etait en 4

    Je les ai replacé en 1 et 2
    Mais je devais toujours cliquer sur 3 et 4 pour avoir un effet sur 1 et 2 ???
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  5. #5
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 776
    Points
    1 776
    Par défaut
    Bonjour.

    Effectivement, j'ai eu le même probléme et je m'en suis sortie en mettant les colonnes dans le bon ordre dans l'ordre "select" et en repositionnant les displayindex suivant cet ordre à chaque redéfinition du .Datasource.

    Pour le probléme que tu cites, j'utilise une sortedlist qui fait le lien entre l'index que je m'attends à avoir et l'index réellement positionné dans le DGV (c'est pourri mais bon ...).

    J'ai rien trouvé de mieux et j'y ai passé du temps pourtant (d'autant plus que je ne sais pas dans mon DGV perso quels seront à priori les colonnes car l'alimentation est géré par paramétrage) ...

    Cdt.
    Bon à savoir : la touche F1 ne sert pas à commander des places pour le grand prix de Belgique.

  6. #6
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Citation Envoyé par olibara Voir le message
    Je rappelle a tout hazard que cette app tourne sur 7 machines differentes sans prpblèmes et que tout d'un coup la huitime fait des caprice ..... ??
    C'est exactement ça, un comportement non garanti. Des fois ça marche, des fois ça marche pas, mais comme c'est documenté nulle part, il faut partir du principe qu'il ne faut pas s'y fier.

    La solution que graffito te propose modifie le DisplayIndex ; l'Index quand à lui est constant. Bien faire la différence entre les deux : l'une est une propriété graphique, l'autre est une propriété "interne", qui ne bouge pas même si l'on réordonne visuellement les colonnes à l'exécution.

    Il y a un blog d'un des principaux développeurs de Windows qui parle souvent de cette différence entre implémentation (susceptible de changer) et documentation (dont on garantit le comportement) : http://blogs.msdn.com/oldnewthing/ . TRES intéressant
    ಠ_ಠ

Discussions similaires

  1. Creation manuelle de colonne dans un datagridview
    Par redpopo dans le forum Windows Forms
    Réponses: 3
    Dernier message: 27/05/2008, 15h10
  2. affichage des donnes dans une datagridview
    Par daloul dans le forum VB.NET
    Réponses: 1
    Dernier message: 25/04/2008, 08h04
  3. Problème d'affichage de colonnes dans un listview
    Par claireP23 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 12/06/2007, 16h30
  4. probleme d'affichage de donnée dans un datagridView
    Par raynor911 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 27/04/2007, 07h55
  5. [C#][VS 2005]Supprimer la première colonne dans un DatagridView
    Par cmoiscrat dans le forum Windows Forms
    Réponses: 2
    Dernier message: 29/06/2006, 15h20

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