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 MVC Discussion :

Gestion de plusieurs tables sur la même page (paging / sorting / search)


Sujet :

ASP.NET MVC

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2011
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2011
    Messages : 16
    Points : 14
    Points
    14
    Par défaut Gestion de plusieurs tables sur la même page (paging / sorting / search)
    Bonjour,

    il y a quelque temps, j'ai poser quelques question sur un moyen d'écrire une table générique permettant la pagination / recherche / tri. Celle-ci fonctionne correctement lorsqu'elle est unique sur la page mais pas dans la cas ou il y en aurait plusieurs.

    Le tout sans utiliser javascript par défault... Celui-ci n'étant absolument pas un standard web.

    Je m'explique :

    J'ai un objet de type Table<T> where T : IPersonalObject, qui contient tout les objets devant être listés.

    Cet object a plusieurs properties :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    - La liste complète d'objets
    public IEnumerable<T> Items { get; set; }
    - La liste à afficher
    public IEnumerable<T> ShowedItems { get; set; }
    - Le nom action permettant la pagination
    public string ListAction { get; set; }
    - Le nom du controller ou se trouve cette action
    public string ListController { get; set; }
    - Le type de requete (get / post)
    public string ListMethod { get; set; }
    - Le numéro de la première page (1)
    public int FirstPage { get; set; }
    - Le numéro de la page précédente
    public int PreviousPage { get; set; }
    - La page actuelle
    public int CurrentPage { get; set; }
    - Le numero de la page suivante
    public int NextPage { get; set; }
    - Le numéro de la dernière page
    public int LastPage { get; set; }
    - Le nombre d'éléments par page
    public int CapacityPerPage { get; set; }
    - Un énum ayant : 0 = ASC, 1 = DESC
    public SortOrder SortOrder { get; set; }
    - La property sur laquelle faire le sort
    public PropertyInfo SortProperty { get; set; }
    - La recherche effectuée sur la table
    public string Search { get; set; }
    J'ai également écrit une méthode d'extension qui est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public static Table<T> ToTable<T>
                (this IEnumerable<T> items, int capacityPerPage,
                 int currentPage, string search = null,
                 bool showAll = false, string action = null,
                 string controller = null, string method = "get") where T : IPersonalObject
    Un exemple de contrôleur avec une simple liste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public ActionResult Index(string search = null, string sort = null, int order = 1, int take = 10, int page = 1)
    {
        IList<Person> people = PersonManager.Search(search).ToList();
        IdToSession(people.Cast<IPersonalObject>().ToList(), "Person");
        return View("Index", people);
    }
    Il est possible d'utiliser la méthode d'extension afin de produire une table<T> soit dans la vue soit dans le contrôleur.

    Le problème est lorsqu'il faut gérer la pagination sur plusieurs tables se trouvant sur une même page (exemple : les détails d'une personne contiennent :
    - Une liste de site,
    - Une liste de services,
    - Une liste de contacts,
    - Une liste de groupes
    ...

    Il est nécéssaire de passer dans une action d'un contrôleur à chaque affichage (même au premier) puisque c'est à cet endroit la qu'il sera possible d'insérer les identifiants des différents objets de la table en session afin de rendre ces objets exportables sous différents formats.

    J'ai également pensé à utiliser une objet "context-like" contenant les différentes informations sur les tables :

    Voici le code de celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public IDictionary<string, int> Pages { get; set; }
    public IDictionary<string, string> Searches { get; set; }
    public IDictionary<string, string> Sorts { get; set; }
    public IDictionary<string, int> Capacities { get; set; }
    public IDictionary<string, IDictionary<string, int>> ColumnsWidth { get; set; }
    public IDictionary<string, bool> InitializedTables { get; set; }

    Malheureusement, Cela ne change rien. A moins de pouvoir mettre les ids des différents objets à partir de la vue...


    PS : Je rappel que le JavaScript ne doit pas être utilisé pour tout cela. Il sera ajouté par la suite en dessus de tout ca.

    Quelqu'un aurait-il une idée pour gérer plusieurs tables alors ?

    Merci de votre aide.

  2. #2
    Membre à l'essai
    Inscrit en
    Août 2011
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2011
    Messages : 16
    Points : 14
    Points
    14
    Par défaut
    EDIT :

    Résolu. Si quelqu'un se trouve dans le même cas, qu'il demande par MP, je me ferai un plaisir de lui expliquer comment j'y suis parvenu... (même si je pense qu'il ya plus propre).

  3. #3
    Expert éminent sénior

    Avatar de Deepin
    Homme Profil pro
    Ingénieur - Chef de projet Modélisation/Simulation
    Inscrit en
    Avril 2004
    Messages
    3 164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afrique Du Sud

    Informations professionnelles :
    Activité : Ingénieur - Chef de projet Modélisation/Simulation
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 164
    Points : 51 026
    Points
    51 026
    Par défaut
    Citation Envoyé par Ragnarock Voir le message
    EDIT :

    Résolu. Si quelqu'un se trouve dans le même cas, qu'il demande par MP, je me ferai un plaisir de lui expliquer comment j'y suis parvenu... (même si je pense qu'il ya plus propre).
    Salut,

    Si tu postais la solution ici, cela permettrait à d'autres d'en profiter

    Bonnes fêtes de fin d'année !

  4. #4
    Membre à l'essai
    Inscrit en
    Août 2011
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2011
    Messages : 16
    Points : 14
    Points
    14
    Par défaut
    Je le ferai, dès que j'ai un peu de temps. Ca sera nécéssaire vu qu'il y a pas mal quand même a écrire et que la textarea est pas tres grande

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/01/2010, 16h55
  2. Gestion de plusieurs panel sur une même Frame
    Par Neilime05 dans le forum NetBeans
    Réponses: 0
    Dernier message: 22/07/2009, 16h28
  3. Réponses: 1
    Dernier message: 14/05/2007, 15h46
  4. Requete sur plusieurs tables contenant les mêmes champs
    Par Louison dans le forum Langage SQL
    Réponses: 3
    Dernier message: 03/04/2007, 20h41
  5. [C#][SVG] Combinaison de plusieurs graphe sur une même page
    Par doudoustephane dans le forum ASP.NET
    Réponses: 2
    Dernier message: 22/11/2006, 09h19

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