locked
DataGridView - cellule combinant liste déroulante et saisie de texte : comment récupérer la valeur saisie RRS feed

  • Question

  • Bonjour,

    Dans un DataGridView, je gère un tableau pour lequel le type de saisie des cellules d'une même colonne peut différer suivant la ligne sur laquelle on se trouve : pour une des lignes on saisit un texte, pour une autre on chosit dans une liste déroulante, pour une autre la saisie s'effectue par l'intermédiaire d'un calendrier...

    Dans certains cas, la saisie dans la cellule doit pouvoir s'effectuer à la fois en choisissant dans une liste déroulante ou en saisisant un texte dans la cellule (dans le cas où la valeur à saisir ne se trouve pas dans la liste).

    A l'initialisation de mon tableau, pour chaque ligne dont la saisie doit s'effectuer dans une liste déroulante, j'assigne à la cellule correspondante un objet DataGridViewComboxCell qui contient les valeurs à saisir => je peux sélectionner un élément dans la liste et quand je quitte la cellule, la valeur sélectionnée apparaît bien dans la cellule.

    Pour autoriser en + la saisie d'un texte sans forcément passer par la liste déroulante, je modifie la propriété DropDowStyle de la combobox attachée à la cellule, dans l'événement EditingControlShowing de mon tableau => je peux en + saisir une valeur dans ma cellule.
    Mais je ne sais pas comment faire pour récupérer la valeur saisie quand on quitte la cellule.

    Merci d'avance de votre aide

    Morgann

    mardi 20 septembre 2011 14:48

Réponses

  • Bonjour,

    J'ai finalement mis en place une solution basée sur celle proposée dans l'aide en ligne pour héberger des contrôles dans les cellules DataGridView (http://msdn.microsoft.com/fr-fr/library/7tas5c80.aspx).

    J'ai donc créé 2 classes :
    - une classe que j'ai appelée ComboBoxEditingControl, héritant de l'objet ComboBox et implémentant l'interface IDataGridViewEditingControl. Cette classe permet la sélection dans une liste déroulante.
    - une classe que j'ai appelée ComboBoxCell, héritant de DataGridViewTextBoxCell, et hébergeant un objet ComboBoxEditingControl pour la saisie.

    A l'initialisation de mon tableau, je crée une instance de mon objet ComboBoxCell pour chaque cellule pour laquelle je souhaite pouvoir à la fois sélectionner dans une liste déroulante et saisir un texte, puis j'assigne cet objet à la cellule :
    Dim cboChoix As ComboBoxCell
    cboChoix = New ComboBoxCell() ' dans le constructeur, je peux passer un paramètre pour initialiser la liste déroulante
    DataGridView1.Item(Colonne, Ligne) = cboChoix

    Pour récupérer la valeur sélectionnée dans la liste ou saisie dans la cellule, j'utilise l'événement CellValidating du DataGridView :
    If dgvInfosCompl.Rows(e.RowIndex).Cells(e.ColumnIndex).EditType = GetType(ComboBoxEditingControl) Then
        dgvInfosCompl.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = e.FormattedValue.ToString
    End If

    Merci pour votre aide

    Cordialement

    Morgann

    jeudi 22 septembre 2011 07:46

Toutes les réponses