Tri colonnes DataGridView avec DataSource

Résolu
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 - 28 juin 2015 à 12:06
Whismeril Messages postés 19021 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 16 avril 2024 - 28 juin 2015 à 22:08
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

Whismeril Messages postés 19021 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 16 avril 2024 656
Modifié par Whismeril le 28/06/2015 à 17:20
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
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
28 juin 2015 à 19:10
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
0
Whismeril Messages postés 19021 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 16 avril 2024 656
28 juin 2015 à 21:10
Bonne soirée à toi
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 28/06/2015 à 22:18
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.
0
Whismeril Messages postés 19021 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 16 avril 2024 656
28 juin 2015 à 22:08
Doucement. Ça n'est pas mon binding, juste un moyen bien pratique développé par d'autres ;-)
0
Rejoignez-nous