Linq - Alimenter un DataGridView suite à choix d'un ComboBox [Résolu]

cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention - 30 juin 2015 à 21:30 - Dernière réponse : cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention
- 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
Afficher la suite 

11 réponses

Répondre au sujet
Whismeril 10601 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 18 décembre 2017 Dernière intervention - 1 juil. 2015 à 07:10
0
Utile
2
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.
cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention - 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 ???
Whismeril 10601 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 18 décembre 2017 Dernière intervention > cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention - 1 juil. 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
Commenter la réponse de Whismeril
cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention - 1 juil. 2015 à 07:55
0
Utile
ok merci,

Cela répond à ma question de requête.
mesJobs.Where(
je vais tester dans la matinée
Commenter la réponse de cs_JMO
cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention - Modifié par cs_JMO le 1/07/2015 à 10:56
0
Utile
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
Commenter la réponse de cs_JMO
Whismeril 10601 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 18 décembre 2017 Dernière intervention - 1 juil. 2015 à 13:07
0
Utile
5
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 =
cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention - 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.
Whismeril 10601 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 18 décembre 2017 Dernière intervention > cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention - 1 juil. 2015 à 18:10
SelectedItem.ToString() peut etre
cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention > Whismeril 10601 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 18 décembre 2017 Dernière intervention - 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.
Whismeril 10601 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 18 décembre 2017 Dernière intervention > cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention - 1 juil. 2015 à 20:09
pour les 5 ou 6 premiers le combox box est bien je pense, pour l'expression libre un textbox
cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention > Whismeril 10601 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 18 décembre 2017 Dernière intervention - 1 juil. 2015 à 20:11
Merci et bonne soirée.

Je teste avec un choix multiple de combobox.
@+ jean-marc
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.