Creer dynamiquement des combobox
Bonjour,
j'essaie de me creer des combobox dynamiquement dans un tableLayoutPanel.
En gros, je voudrais que mon utilisateur choisissent des filtres pour les appliquer a un dataset(ex: lastname = "intel"...).
Donc, lorsqu'il clique sur un bouton Add, ca ajoute une ligne avec trois combo box:un qui contient les colonnes de mon dataset, l'autre une liste d'operateurs(=,<,>...) , et le dernier les valeurs de la colonne selectionnee
Voici mon code:
En premier, je me suis cree une classe combobox qui declenche un evenement lorsque l'item est change:
Code:
1 2 3 4 5 6 7 8 9 10
| Public Class MyComboBox
Inherits ComboBox
Public Event SelectedItemChanged As EventHandler
Protected Overrides Sub WndProc(ByRef m As Message)
MyBase.WndProc(m)
If (m.Msg = &H134) Then
RaiseEvent SelectedItemChanged(Me, EventArgs.Empty)
End If
End Sub
End Class |
Ensuite dans ma form, j'ai declare 3 combo box de cette maniere:
Code:
1 2 3
| Friend WithEvents CbColumns As MyComboBox
Friend WithEvents CbOperators As MyComboBox
Friend WithEvents CbValues As MyComboBox |
Finalement, lorsque l'utilsateur clique sur un bouton, une ligne avec trois combo box est creee dans mon tableLayoutPanel de cette facon:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisplayViewer.Click
'add lstColumn
CbColumns = New MyComboBox
CbColumns.DataSource = GetLstColumns()
tbFilters.Controls.Add(CbColumns)
Dim columnName As String = CbColumns.SelectedValue.ToString()
'Add Operator
CbOperators = New MyComboBox
CbOperators.DataSource = lstOperator
tbFilters.Controls.Add(CbOperators)
'Add ValueColumn
CbValues = New MyComboBox
CbValues.DataSource = GetValues(columnName)
CbValues.DisplayMember = columnName
tbFilters.Controls.Add(CbValues) |
Lorsque l'utilisateur change de selection dans l'un des combobox, une action est declenchee:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| Private Sub CbValues_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CbValues.SelectedIndexChanged
MsgBox("test")
End Sub
Private Sub CbOperators_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CbOperators.SelectedIndexChanged
MsgBox("test")
End Sub
Private Sub CbColumns_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CbColumns.SelectedIndexChanged
MsgBox("test")
End Sub |
Le probleme avec ce code, c'est que des que je rajoute une autre ligne de combobox dans ma table, seule les combobox de la derniere ligne declenchent une action. Les combox des lignes precedentes ne fonctionne plus.
Auriez-vous une idee de la facon de faire pour que chaque combobox de chaque ligne declenche une action?
sinon, auriez vous une meilleure idee pour ce que je veux faire?
j'espere que j'ai ete assez claire...
merci
Shirya