Liste déroulante dans la cellule d'une DBGrid

cs_Nicocom Messages postés 2 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 7 avril 2004 - 7 avril 2004 à 12:43
Dom44103764 Messages postés 1 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 28 octobre 2005 - 28 oct. 2005 à 14:26
voila je voudrais avoir une liste déroulante dans mon DBGrid
j'ai mis la propriété "bouton" du DBGrid a true et donc j'ai une petite flèche comme pour choisir dans une liste déroulante, dans la cellule du DBGrid
mais le pb c'est que j'arrive pas a ajouter des éléments dans la liste
es-ce qui ya moyen d'en ajouter ou faut que je trouve une nouvelle solution.

merci

2 réponses

gaa179 Messages postés 361 Date d'inscription mercredi 21 mai 2003 Statut Membre Dernière intervention 12 novembre 2009 2
7 avril 2004 à 13:32
Salut,

Tu fais apparaître un bouton et non une liste déroulante lorsque tu set la propriété button.
Il y a un évènement button_click qui généré quand tu click sur ce bouton. Il te suffit de placer une liste déroulante sur ton form, proriété visible = False. Lorsque que tu click sur ton bouton (Event), tu fais apparaître ta liste dans la cellue du DBGrid. Il ne te reste plus qu'e récupérer la valeur sélectionné sur l'évèment OnClick de ta liste déroulante et de faire le traitement adéquat (Affichage dans la celluel, enregistrement dans un BD) esuite tu fais disparaitre ta liste déroulante quand tu pers le focus.

A+
0
Dom44103764 Messages postés 1 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 28 octobre 2005
28 oct. 2005 à 14:26
Bonjour, je viens d'être confronté au même problème et comme j'ai trouvé une solution je vous en fais part.
ça vient de http://www.mvps.org/vexpert/articles/vb_dbgrid2.htm
et j'ai pu implémenter l'exemple avec succès.
Dans ta form, en plus du dbgrid1, tu crées une listbox List1.

Option Explicit
' le numéro de la colonne qui contient le bouton
Const ColIndex_List1 = 6

Private Sub Form_Load()
' Remplir list1 (exemple)
With List1
.AddItem "ATTENTE"
.AddItem "RESILIE"
.AddItem "CONTACTE"
End With
'active le bouton de la colonne ColIndex_List1
DBGrid1.Columns(ColIndex_List1).Button = True
End Sub
'-----------------------------------------
' a partir de là j'ai pas trop capté mais ça marche garanti (voir manuel vb)
'-----------------------------------------
Private Sub DBGrid1_ButtonClick(ByVal ColIndex As Integer)
Dim C As Column
If ColIndex = ColIndex_List1 Then
Set C = DBGrid1.Columns(ColIndex)
With List1
.Left = DBGrid1.Left + C.Left
.Top = DBGrid1.Top + DBGrid1.RowTop(DBGrid1.Row) + DBGrid1.RowHeight
.Width = C.Width + 15
.ListIndex = 0
.Visible = True
.ZOrder 0
.SetFocus
End With
End If
End Sub

Private Sub DBGrid1_BeforeColEdit(ByVal ColIndex As Integer, ByVal KeyAscii As Integer, Cancel As Integer)
If ColIndex = ColIndex_List1 Then
Cancel = True
DBGrid1_ButtonClick (ColIndex)
End If
End Sub

Private Sub DBGrid1_Scroll(Cancel As Integer)
List1.Visible = False
End Sub

Private Sub List1_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case vbKeyReturn
DBGrid1.Columns(ColIndex_List1).Text = List1.Text
List1.Visible = False
Case vbKeyEscape
List1.Visible = False
End Select
End Sub

Private Sub List1_LostFocus()
List1.Visible = False
End Sub

Private Sub List1_DblClick()
List1_KeyPress vbKeyReturn
End Sub

Volà, c'était simple et juste un site latinos que je bénis pour me donner la réponse.

à +
0
Rejoignez-nous