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 :

MsHFlexGrid (depuis VB6)


Sujet :

Windows Forms

  1. #1
    Membre régulier Avatar de jlvalentin
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 133
    Points : 89
    Points
    89
    Par défaut MsHFlexGrid (depuis VB6)
    Bonjour,

    Voilà, comme dit dans un post précédent, je dois migrer une appli VB6 en VB.Net.
    Or cette appli VB6 utilise plusieurs MsHFlexGrid (Hierarchical Flexgrid)...

    Bon, ca n'existe plus en VB.Net... Et les FlexGrid non plus...

    J'ai besoin de pouvoir faire les choses suivantes sur cette liste de données :
    1. Changer la couleur de fond des lignes pour différencier les lignes paires et impaires.
    2. Avoir une ligne pour les Entête de colonne
    3. Pouvoir cliquer sur ces entête de colonne afin de changer l'ordre de tri
    4. Pouvoir changer la taille des colonnes
    5. (Optionnel) Pouvoir changer la couleur du texte de certaines cellules.


    J'ai éventuellement pensé à ListView, mais je ne suis pas sur de pouvori faire tout cela et je ne trouves pas d'exemple d'utilisation.
    Pour DataGrid il semblerait que l'on ne puisse pas changer les couleurs..

    Que me conseilleriez-vous et avez vous des exemples ? Je ne pense pas être le premier à me heurter à ce problème.

    D'avance merci,

    Jean-Luc

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Changer la couleur de fond des lignes pour différencier les lignes paires et impaires.
    changer la couleur de fond c'est faisable sur l'objet datagridviewrow (dans la propriété style peut etre)

    Avoir une ligne pour les Entête de colonne
    euh, et bien c'est le comportement par défaut du dgv non ??

    Pouvoir cliquer sur ces entête de colonne afin de changer l'ordre de tri
    c'est faisable aussi, mais la ca dépend de comment tu remplies le dgv

    Pouvoir changer la taille des colonnes
    sur l'objet datagridviewcolumn tu peux définir si la taille de la colonne est automatique / modifiable par l'utilisateur / non modifiable par l'utilisateur

    Pouvoir changer la couleur du texte de certaines cellules
    la classe DatagridViewCell doit aussi avoir un style et donc un forecolor et un backcolor
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre régulier Avatar de jlvalentin
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 133
    Points : 89
    Points
    89
    Par défaut
    OK, merci pour cette réponse. C'est sympa et cela m'aide pas mal.

    Je vais donc regarder les datagridview... Parce que Listview c'est un peu galère...

    Sinon, je ne pense pas que je puisses, avec Datagridview, changer la couleur d'une cellule de facon spécifique... Je pense que les couleurs sont définies pour la totalité de la grille non ? Idem pour la couleur de fond d'une ligne. Non ? Je me trompe ?

    Sinon encore merci d'avoir pris du temps pour m'aider.

    [Edit]
    Autant pour moi. Il semble possible de changer la couleur de fond et du texte sur une zone sélectionnée dans une DataGrid View... Je continue donc d'inspecter cette solution.
    Enfin, si quelqu'un a une meilleure idée ou une autre solution, merci de me l'indiquer... En gros, comment avez-vous migré vos MsHFlexGrid ?

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    la classe DatagridViewCell doit aussi avoir un style et donc un forecolor et un backcolor
    je viens de vérifier et en effet, on peut donc changer le forecolor et le backcolor pour une cellule


    le principe du datagridview c'est que pour la gestion d'une cellule, si tu as définis quelque chose pour la cellule, ca le prend, sinon ca regarde si tu as défini quelque chose pour la ligne, sinon ca regarde si tu as définis quelque chose pour la colonne, enfin selon le type de propriété ca regarde le dernier niveau ou ca remonte la chaine

    si tu définies la couleur de la ligne à rouge et la couleur d'une cellule de cette ligne à vert, elle devrait etre verte

    par contre pour la propéité readonly qui est un booléen, si tu mets le dgv.readonly = true, rien n'est modifiable, mettre une cellule à false ne sert à rien
    pour qu'une cellule soit modifiable il faut que son readonly soit à false ainsi que celui de sa ligne ainsi que celui de sa colonne ainsi que celui du dgv
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre régulier Avatar de jlvalentin
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 133
    Points : 89
    Points
    89
    Par défaut
    OK, datagridview semble bien correspondre.

    Dernier souci pour le "backcolor" de la ligne...
    J'ai une boucle de lecture de diverses données et je remplis mes lignes avec cela. Je souhaiterais que dans cette boucle, pour les lignes paires, le fond soit blanc (par exemple) et que pour les lignes impaires, le fond soit gris.
    Je ne parviens pas a le faire. En effet, je n'ai trouve que le fait de passer la couleur de fond d'une selection. Or, au cours de mon remplissage, la selection ne semble pas fonctionner, vu qu'à la fin, toutes mes lignes ont un fond blanc..

    Une idée quelqu'un ?

    Voilà le test que j'utilise en ce moment pour cela...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                For tmp_index = 1 To 5
                    Dim tmp_row As String() = {"Col_" & tmp_index & "-1", "Col_" & tmp_index & "-2", "Col_" & tmp_index & "-3"}
                    .Rows.Add(tmp_row)
                    If Int(tmp_index / 2) = (tmp_index / 2) Then
                        .DefaultCellStyle.SelectionBackColor = Color.LightGray
                    Else
                        .DefaultCellStyle.SelectionBackColor = Color.White
                    End If
                Next

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Int(tmp_index / 2) = (tmp_index / 2) Then
        .DefaultCellStyle.BackColor = Color.LightGray
    End If
    le else pour mettre white ne sert à rien, c'est white par défaut (en fait basé sur dgc.rowtemplate je crois)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre régulier Avatar de jlvalentin
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 133
    Points : 89
    Points
    89
    Par défaut
    Merci pour la réponse, mais là, toutes les cellules sont grises.
    Et si je mets un else, en fait, ca dépend du nombre de lignes...

    Donc, il faut bien que cela porte sur la sélection mais comment sélectionner une ligne ? Là est la question maintenant.

  8. #8
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    selectionbackcolor c'est pour définir la couleur quand la ligne est sélectionnée !!
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    j'ai trouvé l'autre soucis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    For tmp_index = 1 To 5
                    Dim tmp_row As String() = {"Col_" & tmp_index & "-1", "Col_" & tmp_index & "-2", "Col_" & tmp_index & "-3"}
                    .Rows.Add(tmp_row)
                    If Int(tmp_index / 2) = (tmp_index / 2) Then
                        .DefaultCellStyle.SelectionBackColor = Color.LightGray
                    Else
                        .DefaultCellStyle.SelectionBackColor = Color.White
                    End If
                Next
    dans ce code on peut imaginer que tu fais un with DGV
    chose déconseillée, parce que justement ca aide pas du tout à comprendre ce qu'on fait !
    en l'occurrence du défini le cellstyle du datagrid au lieu de le faire sur la ligne

    donc tu retires le with et tu fais ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    For tmp_index = 1 To 5
                    Dim tmp_row As String() = {"Col_" & tmp_index & "-1", "Col_" & tmp_index & "-2", "Col_" & tmp_index & "-3"}
                    dgv.Rows.Add(tmp_row)
                    If Int(tmp_index / 2) = (tmp_index / 2) Then
                        tmp_row.DefaultCellStyle.SelectionBackColor = Color.LightGray
                    Else
                        tmp_row.DefaultCellStyle.SelectionBackColor = Color.White
                    End If
                Next
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  10. #10
    Membre régulier Avatar de jlvalentin
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 133
    Points : 89
    Points
    89
    Par défaut
    J'ai réussi et grande partie grace à toi, Pol63...
    Un grand merci...

    Au final, voici ce qu'il faut faire... (en gardant le With DGV )...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                For tmp_index = 1 To 5
                    Dim tmp_row As String() = {"Col_" & tmp_index & "-1", "Col_" & tmp_index & "-2", "Col_" & tmp_index & "-3"}
                    .Rows.Add(tmp_row)
                    If Int(tmp_index / 2) = (tmp_index / 2) Then
                        .Rows(tmp_index - 1).DefaultCellStyle.BackColor = Color.Beige
                    Else
                        .Rows(tmp_index - 1).DefaultCellStyle.BackColor = Color.White
                    End If
                Next
    Et effectivement, il faut bien adresser le composant Rows.. Mais en précisant son index ce que je ne savais pas faire...

    Mille merci à vous tous... Je progresse.. YES...
    (tu me diras, d'où je pars, y'a pas de mal...)

  11. #11
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    pour bien développer en .net quand on vient de vb6, il faut se forcer à oublier ses automatismes, et le with au passage

    à la place de .Rows(tmp_index - 1).DefaultCellStyle.BackColor = Color.Beige
    tu peux faire directement
    tmp_row.DefaultCellStyle.BackColor = Color.Beige

    de plus je le répète, le else sert à rien, à part ralentir l'execution, par défaut c'est déjà blanc !
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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

Discussions similaires

  1. [VB6][CR4.6] Pb ouverture Rapport depuis VB6
    Par mcgyverdel dans le forum SDK
    Réponses: 6
    Dernier message: 23/02/2006, 17h18
  2. Depuis VB6 Tester si Excel est ouvert.
    Par pcvesoul dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 18/01/2006, 04h01
  3. Table Access : ajout d'un champ depuis VB6
    Par pcvesoul dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 28/09/2005, 09h14
  4. Erreur mise en couleur d'une colonne excel depuis VB6
    Par pcvesoul dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 21/09/2005, 15h52
  5. Impression d'état CR10 depuis VB6
    Par mcrocher dans le forum SDK
    Réponses: 1
    Dernier message: 07/09/2005, 09h31

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