Linq - Alimenter un DataGridView suite à choix d'un ComboBox

Résolu
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 - 30 juin 2015 à 21:30
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 - 1 juil. 2015 à 20:11
Bonsoir le Forum,

Via l'extraction d'un fichier xml, je dispose d'une ListOf qui me permet
d'alimenter un DataGridView.

Image du DataGridView


Code :
        Dim mesJobs As List(Of JOB) = (
From k In maListe, a In k.Applications, j In a.Jobs
Select j.AffecteParent(a, k)).OrderBy(Function(j) j.EnvironnementApplicationJob).ToList()

Me.DataGridView1.DataSource = mesJobs
Ce DGV contient une trentaine de colonnes, pour mes tests, j'ai créé un ComboBox, alimenté par une des colonnes du DGV.
Code :
        Dim MyServer = From a In mesJobs
Select a.Serveur

Me.ComboBox1.DataSource = MyServer.Distinct.ToList
Je souhaiterai que lors d'une sélection de ce combobox, le DGV s'efface et affiche, dans le DGV, toutes les lignes de la ToList "mesJobs" correspondant à l'item du combobox sélectionné.
    Private Sub ComboBox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
Me.DataGridView1.Dispose()
TextBox2.Text = TextBox2.Text & CType(ComboBox1.SelectedItem, String) & Environment.NewLine
End Sub

Par quelle requête linq, puis-je y parvenir ?

Merci de votre aide,

jean-marc

4 réponses

Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656
1 juil. 2015 à 07:10
Bonjour avec une clause Where sur le champ qui va bien.
Par contre, il te faudra un bindingsource différent de ton combobox, sinon lui aussi sera soumis à la nouvelle requête.
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
1 juil. 2015 à 07:33
Bonjour Whismeril,
Je dois refaire la requête MesJobs avec un Where à chaque fois que l'utilisateur interrogera un serveur, une application ou autres choix ???
Je ne peux pas utiliser le résultat de MesJobs ???
0
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656 > cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018
Modifié par Whismeril le 1/07/2015 à 07:52
Il vaut mieux que tu aies une requête filtre.
Sinon ça t'obligera à refaire mesJobs à chaque changement.

filtre = mesJobs.Where(....).ToList()
bindingsource.datasource = filtre
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
1 juil. 2015 à 07:55
ok merci,

Cela répond à ma question de requête.
mesJobs.Where(
je vais tester dans la matinée
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
Modifié par cs_JMO le 1/07/2015 à 10:56
Avec la requête
    Private Sub ComboBox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
If IsComboBoxServerLoading = True Then
TextBox2.Text = TextBox2.Text & CType(ComboBox1.SelectedItem, String) & Environment.NewLine
TextBox2.Text = TextBox2.Text & "check combo mesJobs.Count " & mesJobs.Count & Environment.NewLine

Dim filtre = mesJobs.Where(Function(c) (c.Serveur Is ComboBox1.SelectedItem)).ToList()
Me.DataGridView1.DataSource = filtre

TextBox2.Text = TextBox2.Text & "filtre.count " & filtre.Count & Environment.NewLine
Me.Refresh()
End If
End Sub
Le DGV ne m'affiche qu'une ligne par serveur choisi dans la combo !!!

Log de TextBox
01/07/2015 10:42:25
1196 Jobs
34 Colonnes
01/07/2015 10:42:28
SMO-BI301R
check combo mesJobs.Count 1196
filtre.count 1
SMO-IT101R
check combo mesJobs.Count 1196
filtre.count 1


jean-marc
0
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656
1 juil. 2015 à 13:07
Oui il ne faut pas oublier que ce sont des objet, dans ton comboxbox, tu as fait un distinct, ce qui veut dire qu'il affiche un objet qui correspond à ta clause "d'unicité".
En faisant un where sur le selectedItem tu vas donc afficher cet objet.
Prend le selectedText et l'opérateur =
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
1 juil. 2015 à 13:26
Prend le selectedText et l'opérateur = , cela me retourne
            TextBox2.Text = TextBox2.Text & "check combo mesJobs.Count   " & mesJobs.Count & Environment.NewLine
TextBox2.Text = TextBox2.Text & "choix du serveur avec CType(ComboBox1.SelectedItem, String) : " & CType(ComboBox1.SelectedItem, String) & Environment.NewLine
TextBox2.Text = TextBox2.Text & "choix du serveur avec ComboBox1.SelectedText : " & ComboBox1.SelectedText & Environment.NewLine
TextBox2.Text = TextBox2.Text & "choix du serveur avec CType(ComboBox1.SelectedText, String) : " & CType(ComboBox1.SelectedText, String) & Environment.NewLine

choix du serveur avec CType(ComboBox1.SelectedItem, String) : AMO302B
choix du serveur avec ComboBox1.SelectedText :
choix du serveur avec CType(ComboBox1.SelectedText, String) :
Le selectedtext ne me renvoie pas le nom du serveur.
0
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656 > cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018
1 juil. 2015 à 18:10
SelectedItem.ToString() peut etre
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27 > Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024
1 juil. 2015 à 18:40
C'est la bonne propriété que je pensais avoir testée.

Merci Whismeril.

Quelle serait le contrôle (ou les contrôles) le(s) plus approprié(s) pour proposer à l'utilisateur plusieurs choix de recherche dans le DGV initial (mesJobs).
Ex:
Choisir un serveur + le Mode d'exécution d'un job + le type de job (AS400, SQL, UNIX ... ) soit environ 5 ou 6 possibilités + l'option *Expression à rechercher* dans le DGV.
0
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656 > cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018
1 juil. 2015 à 20:09
pour les 5 ou 6 premiers le combox box est bien je pense, pour l'expression libre un textbox
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27 > Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024
1 juil. 2015 à 20:11
Merci et bonne soirée.

Je teste avec un choix multiple de combobox.
@+ jean-marc
0
Rejoignez-nous