none
Ajouter datagridviewcomboboxcolumn quand je selectionne un item d'une autre datagridviewcomboboxcolumn RRS feed

  • Question


  • Bonjour, tout d'abord je travaille sur visual basic express 20008, et je dois créer une application dans le cadre de mon stage.

    Mon problème est le suivant: J'ai créé une datagrid (datagriview2) en mode design. Dans mon code ci-dessous j'ajoute une colonne avec comboxbox (newcolumn) contenant 3 item (avantage, neutre, risque).

    Ce que j'essaye de faire depuis une semaine, c'est d'ajouter une autre colonne (avec combobox) lorsque je clique par exemple sur l'item "avantage", ouvrir une colonne combobox différente en fonction de chaque item du combobox de la 1ere colonne.

    Alors j'ai essayé de dire: i = NewColumn.Items.Add("Avantage") et de dire  If (NewColumn.Selected = i) Then

                DataGridView2.Columns.Add(NewColumn1)

                ColAdd = True

         end if

    mais sans succès. Merci beaucoup de votre aide.

     

     

     

      [code=vb][/code]

    Private ColAdd As Boolean = False

      Private Sub Form1_Load(ByVal sender As System.Object, ByVal e _

    As System.EventArgs) Handles MyBase.Load

     

            Dim NewColumn As New DataGridViewComboBoxColumn()

            Dim NewColumn1 As New DataGridViewComboBoxColumn()

            Dim NewColumn2 As New DataGridViewComboBoxColumn()

            Dim NewColumn3 As New DataGridViewComboBoxColumn()

     

            Dim i As Integer

     

     

            With NewColumn

                .DataPropertyName = "NewColumn"

                .HeaderText = "Classement"

                .DropDownWidth = 160

                .Width = 90

                .MaxDropDownItems = 5

                .FlatStyle = FlatStyle.Flat

                i = NewColumn.Items.Add("Avantage")

                NewColumn.Items.Add("Risque")

                NewColumn.Items.Add("Neutre")

            End With

          

     

            DataGridView2.Columns.Add(NewColumn)

            ColAdd = True

     

           If (NewColumn.Selected = i) Then

                DataGridView2.Columns.Add(NewColumn1)

                ColAdd = True

            End If

     

        End Sub

    mercredi 17 février 2010 10:27

Réponses

  • Bonjour,

     

    Vous devez ajouter une méthode pour l’évènement CellContentClick. Cet évènement sera lancé quand vous modifiez le contenu d’une cellule. Dans la méthode qui traite l’évènement vous devez ajouter le code pour créer la nouvelle colonne.

     

    Dans la liste des propretés de votre GridView, ajoutez le nom de cette méthode (ValueChanged) pour l’évènement CellContentClick. Apres, copiez ce code dans votre fichier.

     

    Private Sub ValueChanged(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView2.CellValueChanged
     
     
            Dim newcol As New DataGridViewComboBoxColumn()
            Me.DataGridView2.Columns.Add(newcol)
     
        End Sub

     

    Cordialement,

    Alex


    Alex Petrescu - MSFT
    • Marqué comme réponse Alex Petrescu lundi 22 février 2010 09:23
    jeudi 18 février 2010 12:47
  • Bonjour,

     

    En mode design, vous sélectez votre contrôle datagridview et dans le menu contextuel vous choisissez Proprietes. La liste des propretés devrait apparaitre à gauche de l’IDE (ou à droite, selon votre configuration). Dans le tableau de propretés, vous avez une icône avec un petit symbole d’une foudre jaune. Cliquez sur cette icone et vous verrez la liste des évènements disponibles pour le contrôle. Cherchez l’évènement qui vous intéresse et écrivez le nom de la méthode dans cet endroit. Apres, écrivez le code de la méthode (attention, il faut être la même méthode) dans le code.

     

     

    Cordialement,

    Alex


    Alex Petrescu - MSFT
    • Marqué comme réponse Alex Petrescu lundi 22 février 2010 09:23
    vendredi 19 février 2010 10:45

Toutes les réponses

  • Bonjour,

     

    Vous devez ajouter une méthode pour l’évènement CellContentClick. Cet évènement sera lancé quand vous modifiez le contenu d’une cellule. Dans la méthode qui traite l’évènement vous devez ajouter le code pour créer la nouvelle colonne.

     

    Dans la liste des propretés de votre GridView, ajoutez le nom de cette méthode (ValueChanged) pour l’évènement CellContentClick. Apres, copiez ce code dans votre fichier.

     

    Private Sub ValueChanged(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView2.CellValueChanged
     
     
            Dim newcol As New DataGridViewComboBoxColumn()
            Me.DataGridView2.Columns.Add(newcol)
     
        End Sub

     

    Cordialement,

    Alex


    Alex Petrescu - MSFT
    • Marqué comme réponse Alex Petrescu lundi 22 février 2010 09:23
    jeudi 18 février 2010 12:47
  • Bonjour, et tout d'abord merci de votre réponse, cependant je n'ai pas tout à fait compris ce que je dois mettre dans mon évènement CellContentClick en fonction de "valuechanged".

    Cordialement,

    Guilhem
    vendredi 19 février 2010 09:14
  • Bonjour,

     

    Désolé, ma formulation n’était pas claire. Il faut justement ajouter la méthode ValueChanged pour l’évènement CellContentClick ou pour un autre évènement lancé au changement de la valeur d’une cellule.

     

    Cordialement,

    Alex


    Alex Petrescu - MSFT
    vendredi 19 février 2010 09:21
  • Je comprends à peu près ce que vous voulez dire, mais je sais vraiment pas comment le faire, j'ai beaucoup recherché sur le net la méthode valuechanged mais sans succès. Merci de votre patience.

    Cordialement
     
    Guilhem
    vendredi 19 février 2010 10:31
  • Bonjour,

     

    En mode design, vous sélectez votre contrôle datagridview et dans le menu contextuel vous choisissez Proprietes. La liste des propretés devrait apparaitre à gauche de l’IDE (ou à droite, selon votre configuration). Dans le tableau de propretés, vous avez une icône avec un petit symbole d’une foudre jaune. Cliquez sur cette icone et vous verrez la liste des évènements disponibles pour le contrôle. Cherchez l’évènement qui vous intéresse et écrivez le nom de la méthode dans cet endroit. Apres, écrivez le code de la méthode (attention, il faut être la même méthode) dans le code.

     

     

    Cordialement,

    Alex


    Alex Petrescu - MSFT
    • Marqué comme réponse Alex Petrescu lundi 22 février 2010 09:23
    vendredi 19 février 2010 10:45
  • J'ai fais ce que vous m'avez dis, ajouter le nom de cette méthode (ValueChanged) pour l’évènement CellContentClic, et j'ai collé le code pour ajouter une colonne. Cependant maintenant j'ai en effet des colonnes qui s'ajoutent lorsque je clique sur le nom de ma 1ere colonne, mais pas comme je le souhaiterais, lorsque je sélectionne un item de ma combobox de cette colonne.

    Cordialement
    Guilhem
    vendredi 19 février 2010 13:09
  • Bonjour,

     

    Vous pouvez essayer la même chose pour l’évènement CellValueChanged. Supprimez le nom de la méthode dans le premier évènement et mettez-le dans l’évènement CellValueChanged.

     

    Cordialement,

    Alex


    Alex Petrescu - MSFT
    vendredi 19 février 2010 13:16
  • Toujours pas, là la colonne s'affiche directement, et aucun changement si je sélectionne un item de la combobox.

    Cordialement
    Guilhem
    vendredi 19 février 2010 13:28
  • Bonjour,

    Le code que je vous ai donné est juste pour exemplifier le principe de fonctionnement de l’événement CellValueChanged. Dans votre méthode, vous devez mettre les conditions pour créer un nouveau type de colonne en fonction de la valeur sélectionnée dans votre première liste.

     

    Cordialement,

    Alex


    Alex Petrescu - MSFT
    vendredi 19 février 2010 13:48