Meilleur auteur de réponses
DataGridView - cellule combinant liste déroulante et saisie de texte : comment récupérer la valeur saisie

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) = cboChoixPour 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 IfMerci pour votre aide
Cordialement
Morgann
- Marqué comme réponse Morgann Moussier jeudi 22 septembre 2011 07:47
jeudi 22 septembre 2011 07:46
Toutes les réponses
-
Bonjour,
Une solution consisterait en l'abonnement à l’évènement CellEndEdit de DataGridView :
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
var value = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
}.
Mais dans tous les cas, le mieux est d'utiliser un système de DataBinding.
- Proposé comme réponse Ciprian Duduiala mercredi 21 septembre 2011 05:53
mardi 20 septembre 2011 15:37Auteur de réponse -
Bonjour,
Vous pouvez utiliser l'un de ses événements pour récupérer la valeur :
Cordialement,
aelassas.free.fr- Proposé comme réponse Ciprian Duduiala mercredi 21 septembre 2011 05:53
mardi 20 septembre 2011 17:06Auteur de réponse -
Bonjour, Morgann,
Est-ce que vous avez testé les solutions proposées ? Merci de partager avec nous les résultats, afin que d'autres personnes avec le même problème puissent profiter de cette solution.
Cordialement,
Cipri
Ciprian DUDUIALA, MSFT  
•Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.
jeudi 22 septembre 2011 06:41 -
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) = cboChoixPour 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 IfMerci pour votre aide
Cordialement
Morgann
- Marqué comme réponse Morgann Moussier jeudi 22 septembre 2011 07:47
jeudi 22 septembre 2011 07:46 -
Bonjour,
Merci d’avoir partagé avec nous la solution.
Bonne journée,
Cipri
Ciprian DUDUIALA, MSFT  
•Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.
jeudi 22 septembre 2011 07:47