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 :

Recherche à l'intérieur d'un objet [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut Recherche à l'intérieur d'un objet
    Bonjour,

    lorsque je veux savoir si une propriété de ma classe à bien la valeur demandée, je fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (bsDeals.Find("Offer_Id","REF-E-123456") < 0)
    bsDeals étant un objet BindingSource.

    cela me renvoie l'erreur suivante:
    This operation requires an IBindingList.
    Alors qu'est-ce que je fait de mal???

    merci merci

  2. #2
    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 : 43
    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
    Bah le message d'erreur signifie que la source de données de la BindingSource doit implémenter l'interface IBindingList, ce qui manifestement n'est pas le cas pour toi.

    Quelle est ta source des données ? Si c'est une liste d'objets, ou une table mappée avec Linq to SQL ou Entity Framework, le plus simple est d'utiliser Linq:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (!deals.Any(d => d.Offer_Id == "REF-E-123456"))
    Ca a l'avantage d'être fortement typé, donc vérifié par le compilateur... tu ne risque pas de spécifier par erreur une propriété qui n'existe pas.

  3. #3
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    merci merci

    alors, ma source de données est une liste d'objet venant d'un fichier Xml.

    dans ton code "deals" représente quoi? le binding source?
    parce que chez moi, pas de Any

  4. #4
    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 : 43
    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
    Citation Envoyé par mayekeul Voir le message
    dans ton code "deals" représente quoi? le binding source?
    Non, la source de données du BindingSource, donc ta liste d'objets.

  5. #5
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    ah oui ok

    effectivement comme cela, c'est nickel chrome!

    Cependant, toute à ma joie d'apprendre à bien apprendre.. euh...

    j'ai essayé d'implémenter l'interface IBindingList dans ma classe

    Alors j'ai une question par rapport à ça
    [HS]Me le dire, si il faut ouvrir un nouveau sujet pour cela[/HS]

    alors voici mon code d'implémentation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
            public int Find(PropertyDescriptor property, object key)
            {
                int result = 0;
                foreach (CCC item in this)
                {
                    if (!(item.OFFER_ID.ToString() == key.ToString()))
                    {
                        result++;
                    }
                }
                if (result == this.Count) result = 0;
                return result - 1;
            }
    ça fonctionne bien et renvoie bien ce que je veux, cependant j'aimerais que bien sur ce la ne renvoie pas un résultat valable sur "OFFER_ID"
    mais bien pour la propriété renseignée par "property".
    seulement voilà... comment c'est-y que je fait.
    J'ai essayé plein de trucs mais apparemment... jamais le bon

  6. #6
    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 : 43
    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
    Citation Envoyé par mayekeul Voir le message
    Cependant, toute à ma joie d'apprendre à bien apprendre.. euh...

    j'ai essayé d'implémenter l'interface IBindingList dans ma classe
    Oula, c'est un peu ambitieux pour un débutant
    Sinon tu peux utiliser la classe BindingList<T> qui l'implémente déjà

    Citation Envoyé par mayekeul Voir le message
    ça fonctionne bien et renvoie bien ce que je veux, cependant j'aimerais que bien sur ce la ne renvoie pas un résultat valable sur "OFFER_ID"
    mais bien pour la propriété renseignée par "property".
    seulement voilà... comment c'est-y que je fait.
    J'ai essayé plein de trucs mais apparemment... jamais le bon
    Bah c'est pas évident justement... il faut passer par la réflexion pour récupérer la bonne propriété, et tester sur chaque élément de la liste si c'est égal à l'objet indiqué. Un truc comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
            public int Find(PropertyDescriptor property, object key)
            {
                PropertyInfo propInfo = typeof(CCC).GetProperty(property);
                if (propInfo == null)
                    throw new ArgumentException("Cette propriété n'existe pas", "property");
                int index = 0;
                foreach (CCC item in this)
                {
                    object value = propInfo.GetValue(item, null);
                    if (Object.Equals(value, key))
                        return index;
                    index++;
                }
            }
    Ce code devrait marcher, mais il a au moins 2 problèmes :
    - ça suppose que le type des éléments de la liste (en l'occurrence CCC) soit connu, ce qui n'est pas forcément toujours le cas
    - ce n'est pas très efficace, parce que la réflexion est gourmande en termes de ressource

    Bref, à moins d'avoir un besoin très spécifique, il vaut mieux utiliser la classe BindingList<T>...

  7. #7
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    d'abord encore une fois merci!
    Oula, c'est un peu ambitieux pour un débutant
    je sais, rien ne m'arrete
    Mais si je ne comprends pas ça, je ne vais pas en dormir. LOL

    Sinon, bien compris ton exemple, vu que c'est bien cela que j'essayai en vain d'appliquer

    Bon ben je vais changer Ma classe List<T> en BindingList<T> alors?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Recherche de points communs entre objets
    Par pysnoo dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 24/04/2009, 14h39
  2. recherche d'informations dans des objets de genbank
    Par Jasmine80 dans le forum Bioinformatique
    Réponses: 2
    Dernier message: 05/03/2007, 16h20
  3. recherche à l'intérieur d'une requete
    Par ludolan dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 14/02/2007, 10h17
  4. [Appli] Recherche d'un type d'objet précis pour interface
    Par superpatate dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 05/08/2005, 12h02
  5. Requêtes : recherche de maxi sur plusieur Objet
    Par pertuis dans le forum Langage SQL
    Réponses: 6
    Dernier message: 08/03/2004, 15h28

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