none
Trier un BindingSource RRS feed

  • Discussion générale

  •  

    Bonjour et merci à ceux qui me liront jusqu'au bout et qui, peut-être, m'aideront.

    Imaginons une base de données Sql avec deux 'tables' : l'une appelée 'FatherAndMother' avec une clef IdFatherMother (par exemple), et une table 'Children', reliée dans une relation 'un à plusieurs' par l'IdFatherMother de la première table.

    J'ai créé une FatherMotherEntities à partir de cette base de données.

    J'ai ensuite rentré ces entités dans les sources de données, et j'ai fait glisser les deux entités sur mon formulaire. Le générateur a créé deux 'DataGridView' et deux 'BindingSource'. Le ChildreBindingSource a pour DataSource le FatherMotherBindingSource, et son DataMember est "Children".

     

    Avec un minimum de code les deux tables se remplissent et se synchronisent : 

     

    dim Context as new FatherMother Entities = New FatherMotherEntities 

           FatherMotherBindingSource.DataSource = Context.FatherMother

    Me.ChildrenBindingSource.Sort = "DateDeNaissance"

    Mais j'ai un gros problème : le sorting ne fonctionne pas du tout, et, de fait, le ChildrenBindingSource.SupportSorting est à False.

    Comment faire, pour trier les enfants par le date de naissance, en un minimum de code (si c'est possible) ? Comment rendre le BindingSource 'sortable', et pourquoi, d'ailleurs, ne l'est-il pas ?

    Il va sans dire que les tables décrites ici sont imaginaires et on été créées à seule fin de présentation du problème.

    D'autre part, j'ai développé mon application entièrement en intervennant dans l'évènement 'SelectionChanged' du FatherMoterDataGridView ou dans l'évènement CurrentChanged du FatherMotherBindingSource.

    Mais je sens qu'il y a sans doute une solution simple à ce problème, et remercie toute personne qui m'aidera.

    Je signale que je suis plutôt nouveau en programmation et que je n'ai abordé que très récemment le magnifique outil qu'est l'Entity Framework.

    Cordialement

    mercredi 1 septembre 2010 17:19

Toutes les réponses

  • Bonjour,

    Comment faire, pour trier les enfants par le date de naissance, en un minimum de code (si c'est possible) ? Comment rendre le BindingSource 'sortable', et pourquoi, d'ailleurs, ne l'est-il pas ?
    Il faut encapsuler votre source de données dans un BindingList :

    FatherMotherBindingSource.DataSource = New BindingList(Of FatherAndMother)(Context.FatherMother)
    

    L'autre solution (et conseillé) est de trier la liste via Linq To Entites :

    FatherMotherBindingSource.DataSource = Context.FatherMother.OrderBy(Function(fm As FatherAndMother) fm.DateDeNaissance)
    

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS ADO .NET 3.5 - MCPD Windows Developper 3.5 - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    mercredi 1 septembre 2010 19:57
    Modérateur
  • Bonjour.

    Je vous remercie vraiment d'une réponse aussi rapide.

    Mais je ne me suis pas bien expliqué.

    Mon problème n'est pas de trier FatherMother mais de trier Children. Effectivement, dans la portion de code que je vous ai soumise, je peux trier FaterMother, puisque c'est moi qui définit la source. C'est d'ailleur ce que j'ai fait dans mon programme.

    Mais j'avais trouvé intéressant, et rapide, de ne pas avoir à gérer l'évènement 'CurrentChanged' du FatherMoterBindingSource : comme j'ai défini la datasource du ChildrenBindingSource sur le FatherMotherBindingSource, avec pour datamember 'Children', l'affichage des enfants se fait automatiquement sans aucune intervention sur l'évènement CurrentChanged du FatherMotherBindingSource, et c'est fort intéressant.

    Mais le ChildrenBindingSource ne supporte pas le tri et s'affiche sans faire le 'sorting' par la date de naissance.

    Je perds donc, dans l'absence de tri possible des enfants, le bénéfice de ne pas avoir à gérer le synchronisme des deux entities.

    Comment garder le bénéfice de l'absence de programmation de l'évènement CurrentChanged du FatherMotherBindingSource, et avoir en même temps un  affichage automatique des 'Children' par date de naissance.

    Comment décrire à la base les entities pour que cela se fasse 'tout seul' :)

    Merci encore d'avoir accepté de répondre à mon problème, et peut-être de continuer notre conversation.

    Je voudrais dire que, dans mon programme réel, je gère constamment l'évènement 'CurrentChanged' du BindingSource Maître, (du genre Me.ChildrenBindingSource.DataSource= context.FatherMother.Children.OrderByDescending (function (f) f.DateDeNaissance) mais l'affichage est beaucoup plus lent que la solution dont nous discutons en ce moment. Mais je n'ai alors apparemment AUCUN contrôle sur le tri des enfants.

    Cordialement

     

    jeudi 2 septembre 2010 14:08
  • Bonjour,

    Pouvez-vous m'envoyer une application qui reproduirait votre problème sur gilles.tourreau@pos.fr ? Merci de mettre l'URL de cette conversation dans l'e-mail.

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS ADO .NET 3.5 - MCPD Windows Developper 3.5 - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    dimanche 5 septembre 2010 21:59
    Modérateur