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

VB.NET Discussion :

Datagridview mise en forme


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Par défaut Datagridview mise en forme
    Bonjour,
    Avant de me lancer dans du code de débutant averti, j'aimerais savoir si ce que je souhaite est déjà possible de base.

    J'ai un DGV, avec beaucoup de cellules, je propose un moyen de "remplir" les cellules par une série de données (6 variables peuvent être rempli pour chaque cellule). J'utilise un bête morceau de texte composé de "-" et de lettre majuscules pour montrer a l'utilisateurs les variables remplis dans chaque cellules. Par exemple, l'utilisateur aura rempli la première donnée et la troisième : "T-M----" sera affiché dans la cellule.

    C'est bien marrant tout ça, mais pas très détaillé, pas bien pratique. J'aurais voulu permettre à l'utilisateur de voir au coup d'oeil ce qu'il a mis exactement. Pour cela j'ai regardé les formes que peuvent prendre une cellule ... il manque le plus proche de ce que je souhaite : la listbox, et il manque aussi le dgv. L'idée serait d'avoir pour chaque cellule un petit tableau avec toute les variables présenté.

    Dans le pire des cas, j'aurais la possibilité de coder une petite fonction permettant de remplir chaque ligne dans un texte préalablement écrit avec des sauts de ligne, mais je trouve ça lourd. J'aurais aussi le moyen de passer par un hover (je sais pas si c'est bien possible mais ça ne m'étonnerait pas, après si c'est facile à mettre en place, c'est une autre question) sur chaque cellule, si on garde la souris plus de Xseconde, un petit rectangle reprenant mes variables s'affiche, ayant l'avantage d'être lisible quelque soit la taille de mes cellules (a terme, 384 cellules elles seront pas bien grandes pour tenir sur un écran de mon boulot)

    Je parcours vb depuis plus d'un an maintenant, et j'ai surtout appris qu'il y a souvent un moyen déjà prévu pour ce que je prévois de faire, je préfère donc poser la question avant désormais, ça m'évite de m'embourber petit à petit dans un code rempli de doublons ^^' mon niveau en codage et surtout en structuration ne le permettrait pas.

  2. #2
    Expert confirmé 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
    Par défaut
    L'idée serait d'avoir pour chaque cellule un petit tableau avec toute les variables présenté.
    Je vois 2 possibilités :
    • assez simple : utiliser l'event CellPainting pour tracer à ta convenance le contenu de e.graphics comme dans une picturebox (avec des DrawString, FillRectangle, DrawLine, ...)
    • plus pro : Gérer une colonne contenant des UserControl : voir http://msdn.microsoft.com/en-us/library/7tas5c80.aspx


    J'aurais aussi le moyen de passer par un hover (je sais pas si c'est bien possible mais ça ne m'étonnerait pas, après si c'est facile à mettre en place, c'est une autre question) sur chaque cellule
    Trop bidouille (beaucoup de cas à gérer pour le positionnement et les conditions d'affichage/effacementdu rectangle).

    On peut envisager de réserver un panel en deghors du DataGridView pour afficher les "détails" de la cellule quand on clique dessus.

  3. #3
    Membre éclairé Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Par défaut
    La première solution me semble un peu farfelu, l'idée serait de combiner la formation d'un tableau par dessin et un texte avec des retours chariot ?

    La deuxième solution m'intrigue, l'idée serait au final de créer un control, ça me donne un peu le vertige sur le papier, étant donné qu'un control englobe beaucoup de chose, mais au final ça me semble être la solution la plus propre et qui me permettra d'être au plus proche de ce que je souhaite faire.

    L'idée alternative au hover semble intéressante, elle permet la même chose mais ça se code bien plus simplement en effet. Merci ^^

    Je tente quelques petites choses et j'apporterais ma solution si elle fonctionne, sans quoi faudra que je vous embête encore un peu.

    edit : j'ai oublié la pièce jointe

    Nom : Capture.PNG
Affichages : 557
Taille : 17,4 Ko

  4. #4
    Membre éclairé Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Par défaut
    Je reviens à la charge, ça y est je suis perdu @.@ Je vais dégainer mes lunettes et ma perf de caféine, mais malgré ça je ne pense pas créer quoi que ce soit de viable tout seul sans tuto ni aide plus poussé que le simple exemple.

    Vla où j'en suis, ou du moins la classe qui me pose problème (le code est généré suite à l'implements, je pense qu'il faut le compléter mais ... :/):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    Public Class listboxeditingcontrol
        Inherits ListBox
        Implements IDataGridViewEditingControl
     
        Public Sub ApplyCellStyleToEditingControl(dataGridViewCellStyle As System.Windows.Forms.DataGridViewCellStyle) Implements System.Windows.Forms.IDataGridViewEditingControl.ApplyCellStyleToEditingControl
     
        End Sub
     
        Public Property EditingControlDataGridView As System.Windows.Forms.DataGridView Implements System.Windows.Forms.IDataGridViewEditingControl.EditingControlDataGridView
            Get
     
            End Get
            Set(value As System.Windows.Forms.DataGridView)
     
            End Set
        End Property
     
        Public Property EditingControlFormattedValue As Object Implements System.Windows.Forms.IDataGridViewEditingControl.EditingControlFormattedValue
            Get
     
            End Get
            Set(value As Object)
     
            End Set
        End Property
     
        Public Property EditingControlRowIndex As Integer Implements System.Windows.Forms.IDataGridViewEditingControl.EditingControlRowIndex
            Get
     
            End Get
            Set(value As Integer)
     
            End Set
        End Property
     
        Public Property EditingControlValueChanged As Boolean Implements System.Windows.Forms.IDataGridViewEditingControl.EditingControlValueChanged
            Get
     
            End Get
            Set(value As Boolean)
     
            End Set
        End Property
     
        Public Function EditingControlWantsInputKey(keyData As System.Windows.Forms.Keys, dataGridViewWantsInputKey As Boolean) As Boolean Implements System.Windows.Forms.IDataGridViewEditingControl.EditingControlWantsInputKey
     
        End Function
     
        Public ReadOnly Property EditingPanelCursor As System.Windows.Forms.Cursor Implements System.Windows.Forms.IDataGridViewEditingControl.EditingPanelCursor
            Get
     
            End Get
        End Property
     
        Public Function GetEditingControlFormattedValue(context As System.Windows.Forms.DataGridViewDataErrorContexts) As Object Implements System.Windows.Forms.IDataGridViewEditingControl.GetEditingControlFormattedValue
     
        End Function
     
        Public Sub PrepareEditingControlForEdit(selectAll As Boolean) Implements System.Windows.Forms.IDataGridViewEditingControl.PrepareEditingControlForEdit
     
        End Sub
     
        Public ReadOnly Property RepositionEditingControlOnValueChange As Boolean Implements System.Windows.Forms.IDataGridViewEditingControl.RepositionEditingControlOnValueChange
            Get
     
            End Get
        End Property
    End Class

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Bonjour,

    Vu que tu as de la place en bas, utilise 2 panels 'comme suggérait Graffito'.
    Dans le premier tu met les info de la cellule sélectionnée, et dans le deuxième les info de la cellule survolé par la souris (CellMouseEnter). Je l'avais fait avec un tablelayoutpanel.
    C'est simple et facile à mettre en oeuvre. Bien visuel pour l'utilisateur.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  6. #6
    Membre éclairé Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Par défaut
    Pour le cas où j'aurais 384 cellules, j'utiliserais cette solution en effet, mais pour le cas de mes 96 cellules, j'aimerais garder le confort de voir tout ce qu'il y a dans chaque cellule. Car même si j'ai une coloration par variable (on peut demander a avoir un affichage : une couleur = une entité de la variable), c'est quand même plus confortable de voir ce qu'on introduit et où.

    Et je tente de faire un control listbox pour mon dgv mais je suis perdu ^^'

Discussions similaires

  1. DataGridView - Lenteur de mise en forme
    Par Aeronia dans le forum Windows Forms
    Réponses: 6
    Dernier message: 09/02/2012, 12h42
  2. mise en forme du texte d'un datagridview
    Par ismababa dans le forum C#
    Réponses: 0
    Dernier message: 07/02/2011, 13h42
  3. Mise en forme DataGridView
    Par gls80 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 10/09/2010, 10h04
  4. Mise en forme DataGridView
    Par jemmass dans le forum Windows Forms
    Réponses: 0
    Dernier message: 09/10/2009, 17h47
  5. Mise en forme d'une DataGridview
    Par rdh123 dans le forum C#
    Réponses: 1
    Dernier message: 14/11/2008, 10h41

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