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 :

Utilisations de filtres


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Par défaut Utilisations de filtres
    Bonjour,

    j'aurais une petite question à vous poser. Voila , j'ai un objet utilisateur qui possedent une collection de filtres defini comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public abstract class UserProvider : IUser
        {
     
         public FilterLibrary Filters;
       }
    FilterLibrary etant une liste de FilterProvider qui est une classe abstraite.
    Cette classe est tres pratique car elle me permet de centraliser les points communs a tous les filtres.

    Je derive cette classe pour obtenir un filtre precis pour par exemple extraire un catalogue :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     public class CatalogItemFilter : FilterProvider
        {
            public int NodeLevel { get; set; }
            public bool ShowSubTree { get; set; }
     
            public CatalogItemFilter()
            {
     
            }
     
        }
    Jusqu'ici point de souci, apr contre lorsque j'utilise ce systeme je me retrovue avec quelquechose qui n'est pas tres joli :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ((CatalogItemFilter)CurrentUser.Filters_
                _[typeof(CatalogItemFilter)]).NodeLevel;
    Pour recuperer mon filtre dans ma liste je le choisis en fonction de son type, cela est tres bien car si je veux un filtre sur le catalog, je lui dit et il me le trouve. Apr contre du fait de cette construction je suis obligé de le recaster car la liste contenu dans FilterLibrary est une lsite de filterLibrary.

    Manque je quelquechose dans cette architecture? Je trouve cela malheureux d'avoir a spécifier 2 fois mon type..

    Merci d'avance de vos idées..

  2. #2
    Rédacteur
    Avatar de Paul Musso
    Profil pro
    Inscrit en
    Août 2008
    Messages
    368
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2008
    Messages : 368
    Par défaut
    Bonjour,

    J'ai tenté la solution de l'inférence de type mais le résultat n'est pas terrible. D'abord parce que les opérateurs ne supportent pas les generics, et de 2, tu ne passes seulement que le type de la classe et non une instance de la classe.

    Le meilleur que j'ai pu faire ressemble à ça (c'est pas terrible mais il n'y a plus de cast) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            public T get<T> (T type) where T : class
            {
                T provider = default(T);
                foreach (var objet in liste)
                {
                    if (objet.GetType().Equals(type.GetType()))
                        provider = objet as T;
                }
                return provider;
            }
    Cette méthode est à mettre dans la classe FilterLibrary. A l'utilisation ça donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                var valeur = CurrentUser.Filters.get(new CatalogItemFilter()).NodeLevel;
    C'est bizarre je sais ...

  3. #3
    Membre Expert Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Par défaut
    Effectivement!

    Merci en tout cas de ton aide, j'essaierais de farfouiner par lá demain!

  4. #4
    Membre émérite
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Par défaut
    Je suis pas sur d'avoir compris le problème...

    Ta collection n'est pas fortement typée ?

    Pourquoi utilise un objet de type Type dans un indexeur ?

  5. #5
    Membre Expert Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Par défaut
    Parce que ce à quoi j'accede dans ma liste est un filterProvider.Or ce que je mets dedans est est un classe qui derive de ce filterprovider. Et quand j'ai besoin d'acceder au proprietes de cette qui classe dérivée, je me heurte au 'probleme' ci dessus.

    Maintenant, j'y accede par type car je trouve cela plus pratique. Je suis dans une page ou je vais vouloir afficher un tableau base sur des categories, je vais donc utiliser le filtre categorie, et pour le retrouver c'est simple je regarde dans ma liste de filtre et je prends le filtre categorie. Si dans une autre page, je me retrouvais face a quelquechose de similaire, je ferais de meme.

    Ma liste est fortement typee, mais pas jusqu'au bout. Apres je ne suis pas sur d'avoir completement raison non plus de faire comme ca... si tu as des idées , n'hésites pas, c'est du prototypage là...

  6. #6
    Rédacteur
    Avatar de Paul Musso
    Profil pro
    Inscrit en
    Août 2008
    Messages
    368
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2008
    Messages : 368
    Par défaut
    Mouarf, des fois je suis un peu débile. A vouloir utiliser les nouveaux trucs, j'en oublie un peu le problème, cette fonction devrait t'aider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            public T get<T>() where T : class
            {
                foreach (var objet in liste)
                {
                    if (objet.GetType().Equals(typeof(T)))
                        return objet as T;
                }
                return null;
            }
    A l'utilisation, ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var valeur = CurrentUser.Filters.get<CatalogItemFilter>().NodeLevel;
    Simple non ?

Discussions similaires

  1. [TSMDBGrid] Utilisation des filtres
    Par Laurent Dardenne dans le forum Bases de données
    Réponses: 14
    Dernier message: 26/02/2007, 21h24
  2. [ JSP ] utilisation des filtres
    Par Pi2 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 09/11/2006, 14h44
  3. [Débutant] Utilisation de filtres
    Par DelPiero dans le forum Access
    Réponses: 2
    Dernier message: 28/04/2006, 15h52
  4. Utiliser un Filtre sous Forms9i
    Par Challenger dans le forum Oracle
    Réponses: 22
    Dernier message: 20/05/2005, 09h22
  5. [TIBCLientDataSet] Utilisation des Filtres
    Par nico27 dans le forum Connexion aux bases de données
    Réponses: 4
    Dernier message: 24/06/2004, 14h22

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