Bonjour
Suite à ce topic (filtrage-multi-critere-dataviews-plusieurs-evenements) où on m'avait donné des éléments de réponse pour construire une fonction de remplissage, je cherche à optimiser les 2 boucles qui ont un inconvénient visuel (effet sapin de Noël clignotement des contrôles).
Le code du topic précédent a donc reçu quelques optimisations grâce aux conseils du cours de P.Lasserre :
En français ce code signifie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 Private Sub UpdateEquipList(ByVal flpanel1 As FlowLayoutPanel, Optional ByVal flpanel2 As FlowLayoutPanel = Nothing, Optional ByVal flpanel3 As FlowLayoutPanel = Nothing, Optional ByVal Setup As String = "", Optional ByVal RowFilter As String = "") Dim dv As DataView Dim NeededDataTables As String() = {"Food", "Weapon", "Ranged", "Ammo", "Head", "Neck", "Ear", "Ring", "Hands", "Body", "Legs", "Feet", "Waist", "Back", "WStable"} If {"", "1", "2"}.Contains(Setup) AndAlso flpanel1 IsNot Nothing Then For Each flpanel As FlowLayoutPanel In New Control() {flpanel1, flpanel2, flpanel3} For Each dt As DataTable In Me.DataSet.Tables If NeededDataTables.Contains(dt.TableName) Then For Each Cbx As ComboBox In flpanel.Controls.OfType(Of ComboBox)().Where(Function(Cbx) Cbx.Name.Contains(dt.TableName)) If Setup = "" OrElse Cbx.Name.Contains(Setup) Then dv = New DataView(dt) dv.RowFilter = RowFilter dv.RowStateFilter = DataViewRowState.CurrentRows dv.ApplyDefaultSort = True Cbx.DataSource = dv Cbx.DisplayMember = "Names" End If Next End If Next Next End If End Sub
Sur mon interface j'ai 3 conteneurs de type flowlayoutpanel, chacun contenant 2 à 30 comboboxs et certains ont 2 listboxs. Les listboxs je les remplis "à la main" ailleurs... donc là ma fonction ne se préoccupe que des comboboxs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Fonction UpdateEquipList de Paramètres(Conteneur(s)?, Tous les controles ou juste une partie ?, expression de filtrage) Pour chaque Conteneur spécifié dans Paramètres Pour chaque DataTable importée (liste préfiltrée) Pour chaque contrôle dans le conteneur en cours ET dont le nom contient le nom de la DataTable en cours Faire ... Controle.Datasource = Dataview filtrée avec Expression spécifiée dans Paramètres ... Suivant Suivant Suivant
Dans ce code j'ai réussi à limiter le nombre de bouclages de la 1ère boucle grâce à une liste de strings. Par contre pour la 2e boucle...
Mon problème concerne en particulier les lignes en gras, càd que je n'arrive pas à construire une [liste de contrôles] sans que VB2010 me foute une erreur de syntaxe ou une exception d'Argument à l'execution...
En fait j'essaie d'adapter l'exemple de Krosoft sur MSDN...
L'erreur affichée par VB pour la syntaxe du code ci-dessus est :
Si quelqu'un peut m'aider à communiquer correctement avec VB, ce serait"Le paramètre lambda 'Cbx' masque une variable dans un bloc englobant, une variable de portée précédemment définie ou une variable déclarée implicitement dans une expression de requête."svp.
Les suggestions d'implémentation sont aussi les bienvenues ^^
Partager