Remplir DataGridViewComboBoxColumn

hanadakia Messages postés 48 Date d'inscription mercredi 21 mai 2014 Statut Membre Dernière intervention 30 mai 2018 - 27 avril 2018 à 17:41
hanadakia Messages postés 48 Date d'inscription mercredi 21 mai 2014 Statut Membre Dernière intervention 30 mai 2018 - 3 mai 2018 à 10:41
Bonjour,
J'ai une colonne de type DataGridViewComboBoxColumn que je dois remplir en fonction de chaque ligne avec différentes valeurs.
Si j'utilise l'instruction ci-dessous la colonne entière prend les mêmes valeurs.
column.Items.AddRange("","")


Merci d'avance.

1 réponse

cs_Le Pivert Messages postés 7822 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 16 septembre 2022 133
Modifié le 27 avril 2018 à 18:22
Bonjour,

Pour ajouter une DataGridViewComboBoxColumn:

  Dim cmb As New DataGridViewComboBoxColumn
        'On attribut un titre a la colonne
        cmb.HeaderText = "Couleur préférée"

        'La propriété DisplayStyle sert à définir comment cette colonne apparaitra : 
        ' + ComboBox dont les element est modifiable,
        ' + DropDownButton qui est un combobox dont les elements ne sont pas modifiables,
        ' + Nothing pour que cette colonne apparaitra comme un TextBox.
        cmb.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox

        'Cette ligne applique le DisplayStyle sur la cellule actuelle si elle est TRUE,
        'ou sur toutes les cellules de la colonne si elle est FALSE
        cmb.DisplayStyleForCurrentCellOnly = True

        'On définie la source de données du notre DataGridViewComboBoxColumn
        'qui est une collection des couleurs.
        cmb.Items.AddRange(Color.Red, Color.Yellow, Color.Green, Color.Blue)
        cmb.ValueType = GetType(Color)
        'On ajoute simplement notre colonne au DataGridView
       Me.DataGridView1.Columns.Add(cmb)


Pour changer la liste du Combobox:

 Dim Dgvc As New DataGridViewComboBoxCell
        Dgvc.Items.AddRange("Mr.", "Ms.", "Mrs.", "Dr.")
        Dgvc.ValueType = GetType(String)
        DataGridView1.Item(5, 4) = Dgvc '5 n°colonne , 4 n° ligne


Voilà



0
hanadakia Messages postés 48 Date d'inscription mercredi 21 mai 2014 Statut Membre Dernière intervention 30 mai 2018
Modifié le 30 avril 2018 à 11:02
Bonjour,
J'ai mis ce code dans load mais les valeurs des cellules ne changent pas.
 Dim cmb As New DataGridViewComboBoxColumn
cmb.HeaderText = "Couleur préférée"
cmb.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox
cmb.DisplayStyleForCurrentCellOnly = True
cmb.Items.AddRange(Color.Red, Color.Yellow, Color.Green, Color.Blue)
cmb.ValueType = GetType(Color)
Me.DataGridView2.Columns.Insert(3, cmb)

Dim Dgvc As New DataGridViewComboBoxCell
Dgvc.Items.AddRange("Mr.", "Ms.", "Mrs.", "Dr.")
Dgvc.ValueType = GetType(String)
DataGridView2.Item(3, 1) = Dgvc
0
cs_Le Pivert Messages postés 7822 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 16 septembre 2022 133
30 avril 2018 à 11:17
Cela fonctionne très bien chez moi comme ceci:

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        'On met 5 colonnes
        DataGridView1.ColumnCount = 5
        With DataGridView1
            .Columns(0).Name = "Date"
            .Columns(1).Name = "Piste"
            .Columns(2).Name = "Titre"
            .Columns(3).Name = "Artiste"
            .Columns(4).Name = "Album"
            .Columns(4).DefaultCellStyle.Font = New Font(Me.DataGridView1.DefaultCellStyle.Font, FontStyle.Italic)
            .SelectionMode = DataGridViewSelectionMode.FullRowSelect
            .MultiSelect = False
            .Dock = DockStyle.Fill
        End With
        'Création d'un tableau de 5 strings pour chaque ligne

        Dim row0 As String() = {"11/12/1968", "29", "Revolution 9", "Beatles", "The Beatles [White Album]"}

        Dim row1 As String() = {"13/02/1967", "6", "Fools Rush In", "Frank Sinatra", "Nice 'N' Easy"}

        Dim row2 As String() = {"15/11/1971", "1", "One of These Days", "Pink Floyd", "Meddle"}

        Dim row3 As String() = {"15/05/1985", "7", "Where Is My Mind?", "Pixies", "Surfer Rosa"}

        Dim row4 As String() = {"5/07/1981", "9", "Can't Find My Mind", "Cramps", "Psychedelic Jungle"}

        Dim row5 As String() = {"7/10/2003", "13", "Scatterbrain. (As Dead As Leaves.)", "Radiohead", "Hail to the Thief"}

        Dim row6 As String() = {"6/10/1992", "3", "Dress", "P J Harvey", "Dry"}

        With Me.DataGridView1.Rows

            'Ajout de ligne

            .Add(row0)
            .Add(row1)
            .Add(row2)
            .Add(row3)
            .Add(row4)
            .Add(row5)
            .Add(row6)
        End With

        With Me.DataGridView1

            'Ordre des colonnes

            .Columns(0).DisplayIndex = 3

            .Columns(1).DisplayIndex = 4

            .Columns(2).DisplayIndex = 0

            .Columns(3).DisplayIndex = 1

            .Columns(4).DisplayIndex = 2

        End With
        DataGridView1.AllowDrop = True

'ajout de la nouvelle  colonne
        Dim cmb As New DataGridViewComboBoxColumn
        'On attribut un titre aux colonnes
        cmb.HeaderText = "Couleur préféré"

        'La propriété DisplayStyle sert à définir comment cette colonne apparaitra : 
        ' + ComboBox dont les element est modifiable,
        ' + DropDownButton qui est un combobox dont les elements ne sont pas modifiables,
        ' + Nothing pour que cette colonne apparaitra comme un TextBox.
        cmb.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox

        'Cette ligne applique le DisplayStyle sur la cellule actuelle si elle est TRUE,
        'ou sur toutes les cellules de la colonne si elle est FALSE
        cmb.DisplayStyleForCurrentCellOnly = True

        'On définie la source de données du notre DataGridViewComboBoxColumn
        'qui est une collection des couleurs.
        cmb.Items.AddRange(Color.Red, Color.Yellow, Color.Green, Color.Blue)
        cmb.ValueType = GetType(Color)
        Me.DataGridView1.Columns.Insert(3, cmb)

'nouvelle liste dans la comboBox
        Dim Dgvc As New DataGridViewComboBoxCell
        Dgvc.Items.AddRange("Mr.", "Ms.", "Mrs.", "Dr.")
        Dgvc.ValueType = GetType(String)
        DataGridView1.Item(3, 1) = Dgvc '3 n°colonne , 1 n° ligne
    End Sub


Voilà
0
hanadakia Messages postés 48 Date d'inscription mercredi 21 mai 2014 Statut Membre Dernière intervention 30 mai 2018
Modifié le 30 avril 2018 à 11:45
Pour les 3 premières colonnes, je les remplis à partir d'une requête sql. ça ne change rien ?
0
cs_Le Pivert Messages postés 7822 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 16 septembre 2022 133
30 avril 2018 à 11:48
Ne pas insérer la colonne mais la mettre en dernier, cela doit provenir de cela.

 Me.DataGridView2.Columns.Add(cmb)


Si cela ne fonctionne toujours pas mets le code dans un button
0
hanadakia Messages postés 48 Date d'inscription mercredi 21 mai 2014 Statut Membre Dernière intervention 30 mai 2018
30 avril 2018 à 12:04
Cela fonctionne lorsque je mets le code dans un bouton . Mais ce n'est pas mon cas, les colonnes doivent être affichées au démarrage du formulaire.
y-t-il pas un moyen pour le faire? et merci beaucoup pour ton aide.
0