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 :

Binder une List<T> sur un DataGridView


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    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
    Par défaut Binder une List<T> sur un DataGridView
    Bonjour

    J'eprouve les pire difficultés a implémenter correctement l'interface IBinding list pour binder une List<T> sur un DGV

    A priori j'ai fait +/- ce qu'il faut ca a l'air de marcher un peu .... !
    Mais c'est d'une fragilité extreme selon les manipulations, je ramasse des index out off range sans raisons evidentes !

    Il y a vraissemblablement des noeuds dans les event mais je ne trouve pas

    Je soupconne entre autre la nécessité d'interception du CancelEdit mais je ne vois pas bien comment

    Si quelqu'un a un exemple de modele fonctionnel, je suis preneur

    Merci beaucoup

  2. #2
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Si tu passes par un BindingSource ? Tu ajoutes le BindingSource en design, tu le mets comme DataSource du DataGridView et après

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    List<Truc> trucs = ...;
    ...
    monBindingSource.DataSource = trucs;

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Effectivement le plus simple est de mettre une BindingSource entre les 2...
    Sinon tu peux aussi utiliser la classe BindingList<T>, qui implémente IBindingList

  4. #4
    Membre expérimenté
    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
    Par défaut
    Je pense qu'en désespoir je vais m'orienter vers ca (le BindingList)

    Malheureusement BindingList n'impleme pas comletement IBindingList (certains event ne sont pas traité)

    J'aimerais quand meme comprendre comment implementer correctement un IBindinglist sur une List<T>

    Le BindingSource ca ne marche pas mieux (en tout cas avec mon implementation de IBindingList)

    Je pense que c'est un noeud entre les event AddNew que le DGV envoie a la Liste et des Event CancelEdit que je devrais sans doute traiter

    a suivre .....

  5. #5
    Membre expérimenté
    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
    Par défaut
    Merci Stormimonn et Tomlev

    Info en plus :

    Quand j'enleve l'nterface IbindingList le BindingSource fonctionne bien !

    Peu importe si je laisse IEditableObject dans ma classe elément
    Cete interface (IEditableObject) interceptait sans rien faire BeginEdit, EndEdit et CancelEdit

    Donc c'est donc bien la gestion de mon interface IbindingList qui foire !

    Provisoirement je suis tiré d'affaire mais j'aimerais toujours comprendre comment faire correctement !

    C'est le genre de probleme pour lequel on se retrouve seul dans le desert et d'autant plus intéressant a maitriser !

  6. #6
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Pas besoin de donner un IBindingList à un BindingSource. Le BindingSource implémente IBindingList et se charge de faire le lien entre le contrôle (DataGridView) et la source de données sous-jascente (List<T>).

    Donc tu files directement ta List<T> au BindingSource, pas besoin de chercher à implémenter IBindingList.

Discussions similaires

  1. [DOM] vider une liste déroulante et encodage sur bdd
    Par comcom94 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 04/11/2008, 09h25
  2. Réponses: 4
    Dernier message: 30/09/2008, 15h44
  3. envoyer une liste d'e-mail sur outlook
    Par ifrit 23 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 25/01/2008, 09h19
  4. une liste ou requête basée sur deux fichiers
    Par chapeau_melon dans le forum WinDev
    Réponses: 8
    Dernier message: 12/11/2007, 20h00
  5. Réponses: 15
    Dernier message: 21/04/2007, 23h49

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