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

ASP.NET Discussion :

ObjectDataSource : selectMethod générique


Sujet :

ASP.NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 42
    Par défaut ObjectDataSource : selectMethod générique
    Bonjour,

    Je dispose d'une classe qui hérite d'une interface (ITrucDAO) qui elle-même hérite d'une interface générique (IGenDAO) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    public interface ITrucDAO : IGenDAO<Truc>
    {}
    L'interface IGenDAO<T> contient la définition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    IList<T> getAll(String param);
    Une classe TrucDAO implémente l'interface ITrucDAO, et donc la méthode getAll :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    IList<Truc> getAll(String param)
    { ... }
    Enfin, dans une page ASPX, j'ai déclaré un ObjectDataSource :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <asp:ObjectDataSource 
            ...
            DataObjectTypeName="Truc" 
            TypeName="ITrucDAO" 
            SelectMethod="getAll"
            OnSelecting="ObjectDataSource1_Selecting" 
            ...
    />
    Dans l'évènement OnSelecting, je spécifie le paramètre param1 pour appeller la méthode getAll.


    Le problème survient à l'éxecution, au bind du GridView utilisant le ObjectDataSource :
    ObjectDataSource 'ObjectDataSource1' n'a pas pu trouver une méthode 'getAll' non générique qui a des paramètres : param1.
    Comme, en virant l'interface générique et définissant directement les méthodes dans l'interface ITrucDAO, ça roule, je comprend bien que le problème vienne du fait que getAll est une méthode générique.

    Mais quand même, en l'occurence, les définitions sont complétées, et l'implémentation correcte, avec les bons types et tout.

    Donc ma question est : puis-je spécifier un paramètre, n'importe quoi pour pouvoir faire en sorte que la méthode n'apaisse pas comme générique, ou suis-obligé de recopier dans une 30aine d'interfaces le code que j'ai écrit dans IGenDAO<T> (où tout mettre à Object, et caster à tour de bras) ?

    Merci de votre attention et, j'espère, de vos réponses

    COMPLEMENT :
    J'ai essayé d'utiliser une liste IList non générique, le problème est le même : c'est le fait que IGenDAO<> est générique et que getAll est défini dedans.

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Par défaut
    Peut-être utiliser IList<T> getAll<T>(string param) à la place.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 42
    Par défaut
    J'ai pensé à un truc juste après avoir posté :

    Déporter la méthode getAll, qui ne contient aucun paramètre générique (si j'utilise un IList au lieu d'une IList<>), et donc j'aurais deux interfaces :

    public interface IGenDAO<T>
    { ... }

    public interface IGenGetAll
    {
    IList getAll(String param1);
    }

    et faire mon héritage d'interface de cette manière :

    public interface ITrucDAO : IGenDAO<Truc>, IGenGetAll
    {}

    Et ben non !
    Exactement la même erreur survient, alors que cette fois-ci, getAll n'est absolument pas pour le moins du monde -- et de l'univers et de tout ce qui est -- générique.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 42
    Par défaut
    Citation Envoyé par Kaidan Voir le message
    Peut-être utiliser IList<T> getAll<T>(string param) à la place.
    Tu veux dire dans le ObjectDataSource ?

    J'ai testé en mettant : SelectMethod="getAll<Truc>", mais ça change rien.

    Sinon, dans le code, remplacer la généricité de l'interface par la généricité des méthode ne me plait guere, car il y en a plusieurs et à une interface donnée, c'est toujours le même type. Mais bon, je vais tester quand même.

    Merci.

    EDIT : réflexion faite, ça ne sert à rien de faire ça : autant sucrer l'interface générique et tout déclarer dans chaque interface fille.

Discussions similaires

  1. Pb Objectdatasource selectmethod parameter
    Par xavpiaf dans le forum ASP.NET
    Réponses: 14
    Dernier message: 14/02/2008, 10h21
  2. classe date générique ?
    Par lili_bzh dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 07/09/2004, 10h59
  3. taille d'objet générique
    Par Heimdall dans le forum C
    Réponses: 7
    Dernier message: 01/07/2004, 18h00
  4. caractère générique utilisable dans strcmp
    Par barthelv dans le forum C
    Réponses: 9
    Dernier message: 01/08/2003, 16h54

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