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 :

vb.net - Modifier type colonne DataGridView


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    306
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 306
    Par défaut vb.net - Modifier type colonne DataGridView
    Bonjour à tous, Salut olsimare,

    Comment faire pour modifier (par code) le type d'une colonne dans un DtGridView, une fois qu'il est créé et rempli ?


    Merci à tous.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    306
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 306
    Par défaut
    Pour préciser ma question, il s'agirait de récupérer dans un dataGridView les données depuis une datatable pour des questions de rapidité :

    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
    Public Sub Remplissage()
     
    Dim sr = New StreamReader(Main.strPath & "Colonnes.txt", System.Text.Encoding.Default)
            Do Until sr.Peek = -1
                Str = sr.ReadLine()
                Dim c0 = New DataColumn(Str)
                dtbl.Columns.Add(c0)
            Loop
     
            sr.Close()
     
            Dim sr = New StreamReader(StrFile, System.Text.Encoding.Default)
     
            Do Until sr.Peek = -1
                Str = sr.ReadLine()
                Main.SubChaine = Str.Split(Main.Delim)
                dtbl.Rows.Add(Main.SubChaine)
            Loop
     
            DGV.DataSource = dtbl
     
    End Sub

    Sauf que je dois affecter à ce dataGridView des colonnes particulières :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Sub Colonnes()
     
            Dim sr = New StreamReader(Main.strPath & "Colonnes.txt", System.Text.Encoding.Default)
            Do Until sr.Peek = -1
                Str = sr.ReadLine()
                Dim c1 As New FormulaDGVColumn
                c1.HeaderText = Str
                Me.DGV.Columns.Add(c1)
            Loop
     
            sr.Close()
     
        End Sub
    Je me sens donc obliger de remplir ma DGV comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            Dim sr = New StreamReader(StrFile, System.Text.Encoding.Default)
     
            Do Until sr.Peek = -1
                Str = sr.ReadLine()
                SubChaine = Str.Split(";")
                Me.DGV.Rows.Add(SubChaine)
            Loop
     
            sr.Close()
    Comment mélanger les 2 méthodes (Colonnes Perso + Données depuis une DataTable ?

    Merci.

  3. #3
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 183
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 183
    Par défaut
    Re.

    Tu dois déclarer les colonnes de ton DGV avant d'alimenter le datasource (il n'est pas possible de changer le type d'une colonne existante) et positionner le datagridview.AutoGenerateColumns à False.

    Ensuite, tu dois faire pour chaque colonne le bind avec la source comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Tacolonne.DataPropertyName = "LeNomDeLaColonneEnDatatable"
    Cdt.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    306
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 306
    Par défaut
    Merci Olsimare, ca fonctionne.
    Seul soucis, comme mes colonnes personnalisées (que tu connais) contiennent des cellules personnalisées ayant une fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Protected Overrides Function GetFormattedValue(ByVal value As Object, ByVal rowIndex As Integer, _
        ByRef cellStyle As DataGridViewCellStyle, ByVal valueTypeConverter As System.ComponentModel.TypeConverter, _
        ByVal formattedValueTypeConverter As System.ComponentModel.TypeConverter, ByVal context As DataGridViewDataErrorContexts) As Object
     
    ...
     
    End Function
    Du coup, au lancement le DGV qui contient bien les données n'affiche que la première ligne (car le pointeur par défaut se trouve en cellule (0,0) et active une seul fois cette même fonction.)

    Il faudrait donc contourner cette fonction juste au lancement...

    Cdt.

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

    Citation Envoyé par House MD Voir le message
    Seul soucis, comme mes colonnes personnalisées (que tu connais) contiennent des cellules personnalisées
    Oui, enfin je les connais pas plus que ça ! Comme les autres lecteurs de ce post d'ailleurs (faut pas oublier que c'est un forum ).

    Je ne vois pas pourquoi ça ne fonctionnerait pas et je ne comprends pas cette histoire de pointeur. Qu'obtiens tu exactement ? Une seule ligne affichée ou plusieurs lignes dont seule la prémiére est alimentée correctement ?

    Cdt.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    306
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 306
    Par défaut
    Le DataGridView est bien rempli mais seule la première ligne est affichée.
    Je sais qu'il est rempli car dès que je clique sur une cellule "vide" son contenu s'affiche.

    Ce phénomène provient de la fonction que je mentionnais :

    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
     
        Protected Overrides Function GetFormattedValue(ByVal value As Object, ByVal rowIndex As Integer, _
        ByRef cellStyle As DataGridViewCellStyle, ByVal valueTypeConverter As System.ComponentModel.TypeConverter, _
        ByVal formattedValueTypeConverter As System.ComponentModel.TypeConverter, ByVal context As DataGridViewDataErrorContexts) As Object
     
            If Me.RowIndex < 0 Then
                Return Nothing
            End If
     
            Dim s As String = CStr(Me.Value)
     
            'Hors Saisie Formule
            If DocSaisie.boolFormula Then
                Return s
            End If
     
            If s = Nothing Then
                Return Nothing
            End If
     
            If s = "=" Then
                Return s
            End If
     
            If s.StartsWith("=") Then
     
                'Appel de la Fonction AttribVal()
                Dim StrCal As String = AttribVal(s, Me.RowIndex)
                Dim Evl As New Eval3.Evaluator
     
                Try
                    Return CStr(Evl.Parse(StrCal).value)
     
                    'Si Attribution de Valeur Impossible : Cellule Cible = Vide
                Catch ex As Exception
                    Me.Value = ""
                    MessageBox.Show("Formule erronée.")
                    Return Nothing
                End Try
            Else
                Return s
            End If
     
        End Function

    car si je la masque tout s'affiche normalement.

    Je pense que la première ligne est visible à cause de la cellule (0,0) qui est automatiquement (par défaut) sélectionnée au lancement du DGV.
    Il déclenche la sélection des autres cellules de la ligne (c'est ne fonction que j'ai faite) et ces sélections appellent la fonction ci-jointe qui retoune s.


    Comment faire ?
    Merci.

Discussions similaires

  1. Recupérer la colonne modifiée dans un datagridview
    Par psychosiffleur dans le forum Windows Forms
    Réponses: 4
    Dernier message: 09/02/2010, 16h26
  2. Modifier le style d'une colonne DATAGRIDVIEW
    Par auriol dans le forum Windows Forms
    Réponses: 4
    Dernier message: 01/02/2009, 00h26
  3. Comment masquer colonnes datagridview, vb.net?
    Par tssi555 dans le forum VB.NET
    Réponses: 5
    Dernier message: 18/08/2008, 14h18
  4. Modifier type colonne d'une table
    Par Gothico dans le forum WinDev
    Réponses: 2
    Dernier message: 28/02/2008, 16h21
  5. Modifier Type de colonnes
    Par klael dans le forum Paradox
    Réponses: 6
    Dernier message: 25/05/2007, 16h50

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