none
Gridview : Charger des données depuis une List<T> + Paging + Tri RRS feed

  • Question

  • Bonjour,

    Je souffre énormément en essayant d'utiliser un Gridview pour afficher des données stockées dans une liste C#.

    Dans ma page asp, j'ai déclaré :
    <asp:GridView ID="GridView" runat="server" DataKeyNames="ID"
    OnPageIndexChanging="GridView_PageIndexChanging"
    AutoGenerateDeleteButton="False" AutoGenerateEditButton="False"
    AutoGenerateColumns="False" AllowSorting="true" AllowPaging="true" GridLines="None"
    Width="50%" CssClass="GridViewStyle">
    En code behind, j'ai mis dans mon Page_Load

    MyDataProvider provider = new MyDataProvider ();
    GridView.DataSource = MyDataProvider .DataList;
    GridView.DataBind();
    Les données sont bien présentes dans mon Gridview ce qui n'est pas si mal mais j'ai 2 problèmes :

    1) Les boutons pour changer de page sont bien présents en bas du Gridview mais quand je clique dessus, la grille disparait carrément (!!!)
    protected void GridView_PageIndexChanging(object sender, GridViewPageEventArgs e) {
        GridView.DataBind();
        GridView.PageIndex = e.NewPageIndex;       
    }
    Comment gérer la pagination ?

    2) Je voudrais également pouvoir trier mes données quand on clique sur une colonne mais je ne sais pas comment m'y prendre.

    Malgré mes recherche sur le web, je ne trouve pas vraiment mon bonheur.
    Bref toute aide est la bienvenue.

    D'avance merci.

    P.
    mercredi 3 mars 2010 14:38

Réponses

  • Bonjour,

    1. Lors du changement d'index du dois affecter de nouveau la source de données à la liste ( GridView.DataSource = ... )
    Tu peux refaire l'accès en base, ou la garder en cache, session ... en fonction des volumes de données ...

    2. Tu peux utiliser l'event Sorting de la gridView. Dans l'argument de l'event est passé la colonne utilisé pour le tri.
    Il faut alors écrire une méthode permettant de trier tes objets métiers.

    Pour t'aider tu peux trouver un exemple de tri/pagination d'une gridview à partir d'objet métier ici

    Cordialement

    Edit : une autre façon de faire consiste à utiliser l'objectdatasource comme intermédiaire entre la gridview et une classe de service de gestion de tes objets métier
    • Marqué comme réponse Alex Petrescu vendredi 5 mars 2010 08:38
    mercredi 3 mars 2010 16:20
    Modérateur

Toutes les réponses

  • Bonjour,

    1. Lors du changement d'index du dois affecter de nouveau la source de données à la liste ( GridView.DataSource = ... )
    Tu peux refaire l'accès en base, ou la garder en cache, session ... en fonction des volumes de données ...

    2. Tu peux utiliser l'event Sorting de la gridView. Dans l'argument de l'event est passé la colonne utilisé pour le tri.
    Il faut alors écrire une méthode permettant de trier tes objets métiers.

    Pour t'aider tu peux trouver un exemple de tri/pagination d'une gridview à partir d'objet métier ici

    Cordialement

    Edit : une autre façon de faire consiste à utiliser l'objectdatasource comme intermédiaire entre la gridview et une classe de service de gestion de tes objets métier
    • Marqué comme réponse Alex Petrescu vendredi 5 mars 2010 08:38
    mercredi 3 mars 2010 16:20
    Modérateur
  • Salut,

    Mille mercis pour ces précieuses informations.
    J'arrive enfin à charger mes données et à changer de page correctement.
    Par contre, j'ai encore un petit soucis avec le tri de mes données.

    Dans une première version de mon application, j'avais surchargé OnRowDataBound pour modifier le style (le css) de ma colonne et afficher une petite image pour indiquer un trie croissant / décroissant. Ca marchait très bien quand j'utilisais un ObjectDataSource . Mais maintenant, plus rien.

    Le problème vient visiblement du fait que la propriété SortExpression de mon GridView est toujours vide et ce quel que soit le tri appliqué.
    Le hic, c'est que cette propriété est en lecture seule donc je ne sais pas comment indiquer à ma GridView quelle est la SortExpression active.

    Y a t'il un moyen ou dois-je gérer moi-même cette propriété ?

    Cordialement,

    P.

    jeudi 4 mars 2010 13:30
  • La propriété est renseigné si on utilise une datasource a priori.
    Si tu as bindé directement la list<T> comme dans l'exemple proposé tu peux utiliser les propriétés LastSortDirection et LastSortKey qui ont été définis au niveau de la page.


    Cordialement
    jeudi 4 mars 2010 17:11
    Modérateur
  • Ca marche impec !

    Merci beaucoup .

    Cordialement,

    P.
    mardi 9 mars 2010 09:39