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] DatagridView customisé


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de frechy
    Inscrit en
    Novembre 2004
    Messages
    343
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2004
    Messages : 343
    Par défaut [C# 2.0] DatagridView customisé
    Salut à tous,

    J'aimerais utiliser un datagridview pour afficher des informations venant d'un fichier xml.

    Voici comment je comptais faire: copier l'xml dans un dataset, bindé le dataset au datagridview.

    Bon le problème est que ce datagridview ne doit pas simplement afficher les informations du fichier xml.

    Voici quelques changement de style que j'aimerais obtenir:

    Changer la couleur de fond des lignes en fonction d'une valeur de cette ligne.

    Afficher des icones, des combobox...toujours en fonction de valeurs de ligne.


    Je me demandais donc quelle facon était la plus simple de faire ce genre de customisation. Si je devais bien binder le dataset, ou s'il était préferable de créer de toute pièce les colonnes à afficher.

    Si vous aviez un petit lien pour m'aider à démarrer . Parce que le datagridview a tellement de propriétés qu'à la fin je ne sais pas par où commencer.

    Merci

    PS: question subsidiaire, est-ce que ce composant pourra afficher + de 10.000 lignes?

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 299
    Par défaut
    Bonjour,
    L'intérêt de ce nouveau composant en V2.0 est justement d'éviter de trop avoir à écrire de lignes sur les propriétés mais plutôt de le faire via un menu contextuel.

    Pour cela, clic droit sur le composant et "Modifier les colonnes" ou "Ajouter une colonne"
    A partir de là, tu peux définir tous les styles (y compris les couleurs) que tu veux.

    Le concepteur ne suffit cepandant pas toujours, voici un bout de code qui sera plus parlant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
                With MaDataGridView
                    .DefaultCellStyle.BackColor = Color.LightSkyBlue
                    .Columns("Numero").Width = 50
                    .Columns("Numero").ReadOnly = True
                    .Columns("Numero").DefaultCellStyle.BackColor = Color.LightGray
                    .Columns("TypeChamp").Visible = False
                    .Columns("ValeurMin").HeaderText = "Valeur minimum"
                    .Columns("ValeurMin").Width = 70
                    .Columns("ValeurMin").ReadOnly = True
                    .Columns("ValeurMin").DefaultCellStyle.BackColor = Color.LightGray
    ...

  3. #3
    Membre expérimenté Avatar de del-dongo
    Inscrit en
    Mai 2003
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 147
    Par défaut
    oui mais son pb c'est surtout de customiser des couleurs de lignes ou de cellules, de faire apparaitre des combos sur une colonne de facon conditionnelle et la c'est le drame....
    en effet le datagrid et maintenant le datagridview sont connus pour etre assez rigides alors il ne te reste qu'à te faire ton propre datagrid et à gérer à la mano les combo, icones, etc...en surchargeant les cellenter par exemple....

  4. #4
    Membre éclairé
    Avatar de frechy
    Inscrit en
    Novembre 2004
    Messages
    343
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2004
    Messages : 343
    Par défaut
    Bon je pense que je vais simplifier un max mon datagridview pour eviter de le surcharger vu qu'il y aura beaucoup de lignes à afficher.


    Petite question concernant les "DataGridViewImageColumn". Pour chaque ligne j'ai une ou 2 images à afficher (dans la même colonne). Est ce que celà est possible? ou dois-je créer autant d'images que de possibilité?

  5. #5
    Futur Membre du Club
    Inscrit en
    Février 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 5
    Par défaut
    bonjour,

    Pour ce qui est du formatage spécifique des cellules, c'est assez facile.
    Il ya lieu de faire la manip dans l'event : CellFormating
    par exemple pour que les valeurs des cellules contenant un X soient en rouge...

    if (e.value.ToString() == "X")
    { e.CellStyle.ForeColor = Color.Red;}

    Pour d'autre opération, ils y a d'autres event et propriétés à modifier.
    L'avantage du datagridview est qu'il permet de faire presque tout, l'inconvénient est que son schéma est impressionnant et que la doc précise sur le sujet n'est pas encore très répendue... On pourrait écrire presqu'un bouquin rien que sur ce contrôle.

    Pour tes images, il faudra les combiner car la cellule n'accepte qu'une seule image. Maintenant il est probable que tu puisses utiliser les gdi pour combiner tes images en une seule en runtime...

  6. #6
    Futur Membre du Club
    Inscrit en
    Février 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 5
    Par défaut
    nb: le datagridview n'a rien à voir avec le datagrid et est tout sauf rigide...

  7. #7
    Membre éclairé
    Avatar de frechy
    Inscrit en
    Novembre 2004
    Messages
    343
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2004
    Messages : 343
    Par défaut
    Oui merci pour finir j'ai assemblé les images à la main, il n'y avait jamais que 9 possibilités.

    Pour ce qui est du datagridview, pour moi c'est de trop, des propriétés partout, je pense que là c'est un peu exagéré.

    Sinon oui j'utilise bien l'event CellFormating.

    Pour ceux que ca peut interesser, j'ai trouvé un composant personalisé (une colonne personalisée pour le datagridview). Ce composant ce comporte comme le systeme de rating dans windows media player.

    Toutes les infos ici; http://forums.microsoft.com/MSDN/Sho...80344&SiteID=1

    Le code source; http://www.windowsforms.net/blogs/ma...mDGVColumn.zip

  8. #8
    Futur Membre du Club
    Inscrit en
    Février 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 5
    Par défaut
    Le datagridview est en effet bien complet et au début il est compliqué de s'y retrouver...
    Sinon, si quelqu'un sait comment faire pour afficher les header en vertical, je suis preneur...
    J'ai pensé à 2 méthodes. Une qui consiste à créer une font vertical (mais j'ai pas encore trouvé d'exemples concrets... créer une font bold etc c'est peanuts...)
    L'autre qui consiste à "dessiner" et donc utiliser les propriétés qui permettent de faire pivoter le texte et le mettre dans le header en utilisant la propriété de la cellule bitmap... mais bon là aussi peu d'infos et de doc et donc je rame un peu sur le sujet...

    Je n'ai pas trouvé d'autres méthodes pour faire cela...

  9. #9
    Futur Membre du Club
    Inscrit en
    Février 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 5
    Par défaut
    Bonjour,

    J'ai pu finalement afficher de manière verticale, mais dans un sens seulement. Je n'ai pas eu assez de temps d'investigation pour tout trouver.

    J'ai utilisé un stringformat auquel je donne la direction verticale à son "flag"
    --------
    StringFormat sf = StringFormat.GenericTypographic;
    sf.FormatFlags = StringFormatFlags.DirectionVertical;
    --------
    Le reste est du chippotage autour...
    Enfin cela fonctionne et me donne mes labels verticaux....

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

Discussions similaires

  1. [c#] datagridview - trouver postion de la selection
    Par zeroox dans le forum Windows Forms
    Réponses: 7
    Dernier message: 15/04/2009, 12h48
  2. Probleme d'affichage avec un DataGridView
    Par kekesilo dans le forum Windows Forms
    Réponses: 3
    Dernier message: 30/01/2007, 14h12
  3. [VS2005][VB.Net] Custom Format dans un DataGridView
    Par Vonotar dans le forum VB.NET
    Réponses: 10
    Dernier message: 22/11/2005, 08h15
  4. [JLabel] customisé
    Par frouge dans le forum Composants
    Réponses: 3
    Dernier message: 11/03/2005, 12h16
  5. [CENTRAL 1.5] Customisé un datagrid
    Par bolo dans le forum Flash
    Réponses: 1
    Dernier message: 03/11/2004, 14h40

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