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 et Datatable -> paramétrage des colonnes ? [Débutant]


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    123
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 123
    Par défaut DataGridView et Datatable -> paramétrage des colonnes ?
    Bonjour à tous

    Je suis débutant avec Visual Studio que je souhaite utiliser en vb, car très expérimenté en vba.

    Je parviens à charger dans un datagridview le contenu d'un fichier csv en passant par une datatable

    Si je définis par avance la structure du datagridview (les colonnes, leur noms...), le binding du datatable ajoute quand même des colonnes au datagridview.
    Si je ne définis pas la structure, je n'arrive pas à trouver comment agir une fois le datagridview alimenté par le datatable.

    Ce que je souhaite, c'est pouvoir paramétrer les colonnes chargées depuis la datatable.
    Par exemple, je veux que la colonne date du datatable soit colorée en vert dans le datagridview.
    J'imagine que ça ne se paramètre pas dans le datatable ?

    Voici mon code (où la structure du datagridview n'est pas définie à l'avance)
    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
     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
     
            Dim csvPath As String = "C:\itunes\test.csv"
     
            'Create a DataTable.
            Dim dt As New DataTable()
     
            ' Create  typed columns in the DataTable.
            dt.Columns.Add("Dep", GetType(Char))
            dt.Columns.Add("Date", GetType(DateTime))
            dt.Columns.Add("P", GetType(Integer))
            dt.Columns.Add("T", GetType(Integer))
            dt.Columns.Add("Classe", GetType(String))
     
            Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser("C:\itunes\test.csv")
                MyReader.TextFieldType = FileIO.FieldType.Delimited
                MyReader.SetDelimiters(";")
     
                Dim currentRow As String()
                Dim numCol As Integer
                While Not MyReader.EndOfData
                    dt.Rows.Add()
                    Try
                        currentRow = MyReader.ReadFields()
     
                        Dim currentField As String
                        numCol = 0
                        For Each currentField In currentRow
                            dt.Rows(dt.Rows.Count - 1)(numCol) = currentField
                            numCol = numCol + 1
                        Next
     
                    Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
                        MsgBox("Line " & ex.Message &
            "is not valid and will be skipped.")
                    End Try
     
                End While
     
     
                Dim bs As New BindingSource
                bs.DataSource = dt
                DG1.DataSource = bs
            End Using
    End Sub
    merci !

    PS : les nombreuses réponses trouvées sur le web sont essentiellement pour du C#, pas du VB. Est-ce un mauvais choix de ma part ?

  2. #2
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bonjour,

    Si je définis par avance la structure du datagridview (les colonnes, leur noms...), le binding du datatable ajoute quand même des colonnes au datagridview.
    Je suppose que le DataTable contient plus de colonnes que tu n'en as définies dans le DGV. De plus, pas nécessaire de dégfinir le DGV quand tu alimentes sont DataSource. Tu pourras toujours modifier plus tard le text des Headers de colonnes si tu veux.

    je veux que la colonne date du datatable soit colorée en vert dans le datagridview.
    J'imagine que ça ne se paramètre pas dans le datatable ?
    Tu pourras colorier les cellules du DGV comme tu le veux. Peut-être laisser cela pour après avoir résolu son chargement.

    Dim bs As New BindingSource
    bs.DataSource = dt
    DG1.DataSource = bs
    Je n'y vois aucune erreur. Le BindingSource n'est pas obligatoire. Si tu n'en fait rien par ailleurs, tu peux te contenter de DG1.DataSource = dt.

    ... sont essentiellement pour du C#, pas du VB. Est-ce un mauvais choix de ma part ?
    Les deux se valent, ce que peut l'un, l'autre le peut aussi (ils utilisent les mêmes objets sous le même environnement). En fait, si tu es habitué à la syntaxe VB, VB.Net est le meilleur choix. Si tu étais habitué à la syntaxe C ou Java, je dirais que C# est le meilleur choix.

    En fait, je ne comprends pas très bien ton problème. Peut-être pourrais-tu envoyer que code prêt à être compilé ..., j'aurai sans doute un peu de temps dans la soirée pour y regarder.

    ...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    123
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 123
    Par défaut
    bonjour Phil Rob, et grand merci pour vos réponses !

    POur ce qui est des colonnes du datagridview j'ai compris que je peux les définir dans le code plutôt que dans le designer

    exemple : pour mon datatable qui a 5 colonnes, mon DG1 aura comme colonnes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    DG1.Columns(0).HeaderText = "NewName"
    DG1.Columns(1).HeaderText = "Renommer"
    DG1.Columns(2).HeaderText = "autre colonne"
    DG1.Columns(3).HeaderText = "une de plus"
    DG1.Columns(4).HeaderText = "la derniere"
    enfin, j'ai réussi à paramétrer une propriété de colonne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DG1.Columns(1).AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells
    mais j'ai eu vraiment de la difficulté à trouver comment faire. Mon principal problème, c'est de ne pas trouver suffisamment de sources en vb sur internet.
    Souvent dans les exemples, c'est du C#, comme la doc microsoft, par exemple sur le datagridview https://docs.microsoft.com/fr-fr/dot...n?view=net-5.0, et du coup ça m'aide pas vraiment.

    As-tu quelques sites sur lesquels je pourrai trouver des info en vb ?

    je te remercie

  4. #4
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bonsoir,
    Pour l'assistance en de problème VB, ce forum est le meilleur. Explique le problème et souvent (très souvent) tu recevras des pistes de solution.
    Pour en revenir à ton DGV, je ne comprend pas pourquoi tu crées les colonnes "manuellement" alors que cela se fait "automatiquement" par le DataSource...
    )))

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    123
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 123
    Par défaut
    en effet, cela ne me sert à rien de les nommer dans le datagrid.

    je pensais qu'il fallait le faire pour pouvoir les paramétrer.

    maintenant j'ai compris que je peux le faire en fonction de la position de la colonne, comme je l'ai fait ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DG1.Columns(1).AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells
    merci à toi !

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

Discussions similaires

  1. Primefaces : Datatable et tri des colonnes
    Par denisduval75 dans le forum JSF
    Réponses: 9
    Dernier message: 28/11/2018, 16h16
  2. PrimeFaces : Datatable et largeur des colonnes
    Par denisduval75 dans le forum JSF
    Réponses: 3
    Dernier message: 20/04/2018, 09h27
  3. DataTable avec des colonnes dynamiques
    Par PrinceDeLu dans le forum JSF
    Réponses: 5
    Dernier message: 15/04/2011, 10h54
  4. Réponses: 2
    Dernier message: 15/06/2009, 18h40
  5. Réponses: 3
    Dernier message: 21/06/2006, 16h39

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