IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Utiliser IbindingList ou BindingSource


Sujet :

C#

  1. #21
    Membre à l'essai
    Inscrit en
    Novembre 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 9
    Points : 16
    Points
    16
    Par défaut
    Bonsoir,

    j'ai pas tout bien compris sur l'utilisation d'une BindingSource, alors j'ai testé, et apprécié, surtout pour les différent composants lié à la même source de données.

    Par contre ça ne marche pas pour le tri dans un DataGridView.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    BindingSource bs = new BindingSource();
    // MaListe => List<CustomClass>
    bs.DataSource = MaListe;
    MessageBox.Show(bs.SupportsSorting.ToString()); // retourne False
    dataGridView1.DataSource = bs; // ça marche sauf pour le tri
    label1.DataBindings.Add("Text", bs, "Title"); // c'est magique !
    Ce que je ne comprend pas c'est :
    J'ai donc finit par deriver IBindingList dans ma Liste
    On fait ça comment ? car apparemment c'est la solution.

    Merci d'avance

  2. #22
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Salut

    voici un exemple

    http://www.martinwilley.com/net/code...ndinglist.html

    et si tu cherche "sortable bindinglist" sur google tu trouve beaucoup de choses

  3. #23
    Membre à l'essai
    Inscrit en
    Novembre 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 9
    Points : 16
    Points
    16
    Par défaut
    Je teste ça ce soir à la maison.

    Je fait un retour dès que possible, mais cela m'a l'air bien.

    Par contre le "where T : class" dans la déclaration de la classe m'a carrément fait halluciner.

    Merci encore pour ta réponse olibara, surtout que se sujet était résolu.

  4. #24
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Ah, ça faisait longtemps que la question d'une implémentation de IBindingListView n'était pas revenue sur le tapis (à une époque, c'était tous les mois).
    Le framework 3.5 ou 4 propose peut être quelque chose de mieux; en tous cas, je m'étais servi à l'époque de ceci, qui implémente le tri de façon bien plus rapide que ce que t'a montré olibara (ça n'utilise pas la réflexion pour récupérer les propriétés selon lesquelles trier), et en bonus, propose recherche et filtre.

  5. #25
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Merci Guuhl encore une bonne adresse a metre dans la boite a malice

  6. #26
    Membre à l'essai
    Inscrit en
    Novembre 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 9
    Points : 16
    Points
    16
    Par défaut
    Merci olibara

    Une soirée devant le code, refonte de toutes les DataTable, List et compagnie pour arriver à un résultat qui fonctionne.

    et en bonus, propose recherche et filtre.
    c'est la prochaine question que j'allais poser

    Mais je m'en suis presque sorti avec Linq.

    Il est trop tard pour que je regarde ta solution Guuhl mais j'y passerai ma soirée de demain


  7. #27
    Membre à l'essai
    Inscrit en
    Novembre 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 9
    Points : 16
    Points
    16
    Par défaut Demain fut ... lointain
    Je n'ai pu bosser sur mon appli que ce soir.

    Tout marche très bien mis a part le filtre.

    Dans l'exemple du site :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    view.ApplyFilter(delegate(Customer customer) { return customer.Balance > 1000; });
    Bien, je fait un copier coller (comme je ne comprend pas tout), je le modifie à ma sauce :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    view.ApplyFilter(delegate(Rom rom) { return rom.title.toLower().Contains(filtreTitre.toLower()); });
    Et là j'ai une zolie erreur qui me dit que je ne peut pas utiliser les expressions anonymes.

    Flûte.

    Je crée une classe qui implémente l'interface IItemFilter<T>, comme suggéré sur le site.

    J'y met mon Linq.
    Je teste avec un filtre : Pas de problème.
    Je rajoute un autre filtre par dessus, et là ...

    ---------------------------
    Boîte de dialogue Erreur par défaut DataGridView
    ---------------------------
    L'exception suivante s'est produite dans le DataGridView*:



    System.ArgumentException: Impossible de convertir l'objet de type 'System.DBNull' en type 'System.String'.

    à System.ComponentModel.ReflectPropertyDescriptor.SetValue(Object component, Object value)

    à System.Windows.Forms.BindToObject.SetValue(Object value)

    à System.Windows.Forms.Binding.PullData(Boolean reformat, Boolean force)

    à System.Windows.Forms.BindingManagerBase.PullData(Boolean& success)

    à System.Windows.Forms.CurrencyManager.CurrencyManager_PullData()

    à System.Windows.Forms.CurrencyManager.EndCurrentEdit()

    à System.Windows.Forms.CurrencyManager.ChangeRecordState(Int32 newPosition, Boolean validating, Boolean endCurrentEdit, Boolean firePositionChange, Boolean pullData)

    à System.Windows.Forms.CurrencyManager.set_Position(Int32 value)

    à System.Windows.Forms.DataGridView.DataGridViewDataConnection.OnRowEnter(DataGridViewCellEventArgs e)



    Pour remplacer cette boîte de dialogue par défaut, traitez l'événement DataError.
    ---------------------------
    OK
    ---------------------------
    ---------------------------
    Boîte de dialogue Erreur par défaut DataGridView
    ---------------------------
    L'exception suivante s'est produite dans le DataGridView*:



    System.IndexOutOfRangeException: L'index 4 n'a pas de valeur.

    à System.Windows.Forms.CurrencyManager.get_Item(Int32 index)

    à System.Windows.Forms.DataGridView.DataGridViewDataConnection.GetError(Int32 rowIndex)



    Pour remplacer cette boîte de dialogue par défaut, traitez l'événement DataError.
    ---------------------------
    OK
    ---------------------------
    Le message revient pour autant de ligne qu'il "manque" après le filtre.

    je comprend plus rien ...

    Mon dataGridView est 'Binder' à mon objet 'view' sur lequel j'applique mes filtres.

    Je ne comprend même pas d'où vient le message d'erreur

    Une petite idée ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 0
    Dernier message: 10/12/2010, 17h06
  2. Comment utiliser proprement le BindingSource.AddNew()
    Par Fikou-Sama dans le forum VB.NET
    Réponses: 2
    Dernier message: 11/08/2009, 23h01
  3. Comment utiliser BindingSource.AddNew?
    Par nem&sys dans le forum Accès aux données
    Réponses: 4
    Dernier message: 05/02/2007, 11h46
  4. Réponses: 2
    Dernier message: 20/03/2002, 23h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo