Tri colonnes DataGridView avec DataSource [Résolu]

Signaler
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
-
Messages postés
14492
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 juillet 2020
-
Bonjour le Forum,

Ceci est très certainement une question récurrente.

Pour charger un DataGridView
        Dim mesJobs As List(Of JOB) = (
From k In maListe, a In k.Applications, j In a.Jobs
Select j.AffecteParent(a, k)).ToList()

Me.DataGridView1.DataSource = mesJobs
Mes recherches sur MSDN n'aboutissent pas.

Pêle-mêle mes essais :
        'DataGridView1.Sort(New RowComparer(SortOrder.Ascending))

'Me.DataGridView1.DataSource.Sort = "Environnement ASC, Application ASC, Job ASC"

'Dim source1 As New BindingSource()
'source1.DataSource = mesJobs
'Me.DataGridView1.DataSource = source1 'mesJobs
'Me.DataGridView1.Columns("Job").SortMode = DataGridViewColumnSortMode.Programmatic
'DataGridView1.Sort(DataGridView1.Columns("Job"), System.ComponentModel.ListSortDirection.Ascending)
'DataGridView1.Columns(0).SortMode = DataGridViewColumnSortMode.Programmatic

'DataGridView1.Sort(DataGridView1.Columns(1), ListSortDirection.Ascending)


Je souhaiterai faire un tri sur mes 3 premières colonnes.
Si impossible, je peux créer une colonne en première position qui sera la contaténation de mes 3 colonnes.
En relisant mes précédents posts concernant l'extraction de données à partir d'un fichier xml (http://codes-sources.commentcamarche.net/forum/affich-10051169-linq-extraction-fichier-xml), il apparait que je dois d'abord trier mes données avant de les afficher dans le DataGridView.
De même, je pensais qu'un tri par l'utilisateur était possible.
Dans mon cas actuel, le tri de colonne est inactif malgré le AllowUserToOrderColumns à True.

Merci de suggestions,
jean-marc

3 réponses

Messages postés
14492
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 juillet 2020
421
Bonjour le fait de binder une source de données à un contrôle, entraine que ce contrôle devient l'image de cette source donc:
  • 1 effectivement le plus simple est de trier la source

        'liste de Jobs, avec les parents affectés
        Dim mesJobs As List(Of Job) = (
            From e In maListe, a In e.Applications, j In a.Jobs
            Select j.AffecteParent(a, e)).OrderBy(Function(j) j.Name).ThenBy(Function(j) j.ParamAffiches).ToList()'champs de tri pris au hasard pour l'exemple

  • 2 si tu veux afficher une concaténation de colonnes, il faut créer une propriété dans ton job qui le fait, mais tu vas me dire que tu vas avoir tes données en double, à cela je te réponds par ce lien (que je t'ai déjà donné, mais vu le flot d'infos que tu as eu ces derniers jours, je ne sui pas surpris que tu en aies raté un peu)


Modérer m'amène à intervenir dans de nombreux posts, mais les seuls langages que je connaisses sont le C# et un peu de VB. Pour vos codes pensez à la coloration.
Réponse trouvée ->Question Résolue
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
25
Bonjour Whismeril,

J'ai donc suivi tes conseils :
- ajout du champ EnvAppJob;
- modification de la requête;
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.EnvAppJob).ToList()

Me.DataGridView1.DataSource = mesJobs
- Modification du DataGridView, ajout JOBBindingSource et suppression de la colonne EnvAppJob.

Le DataGridView est correctement trié (+ gain de temps pour le load).

Merci et bonne soirée,

Prochaine étape : chargement de ComboBoxes à partir du Binding.

jean-marc
Messages postés
14492
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 juillet 2020
421
Bonne soirée à toi
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
25
Whismeril, cool Linq et ton binding !!!

Dim MyDDO = From a In mesJobs
Select a.DDO
Me.ComboBox1.DataSource = MyDDO.Distinct.ToList
pour charger le champ DDO de List(Of T) dans un combo.
Messages postés
14492
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 juillet 2020
421
Doucement. Ça n'est pas mon binding, juste un moyen bien pratique développé par d'autres ;-)