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 :

Gridview - AllowSorting lorsque datasource=linq


Sujet :

ASP.NET

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    208
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 208
    Points : 82
    Points
    82
    Par défaut Gridview - AllowSorting lorsque datasource=linq
    Bonjour a tous,

    J'ai un gridview que je n'arrive pas a trier. J'ai essayé le allowSort mais alors il faut mettre des sortExpression a chaque databound item et implémenter l'evenement onSorting (j'ai fait monGV.sort(e.SortExpression, e.SortDirection) mais ca tourne sans fin!

    Et j'ai également testé le custom gridview disponible ici: http://www.singingeels.com/Articles/...ion_Trees.aspx

    Je clique sur la colonne, mais rien ne se passe... Voici mon code:

    page asp
    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
    <asp:GridView ID="gv_assigned" runat="server" 
                            CssClass="gv_unass" AutoGenerateColumns="false" allowSort ="true">
                            <EmptyDataTemplate>
                                <div>You havent selected any DN to assign.</div>
                            </EmptyDataTemplate>
                            <Columns>
                                <mb:SelectorField AllowSelectAll="true" SelectionMode="Multiple"></mb:SelectorField>
                                <asp:BoundField DataField="DN" HeaderText="DN N°" SortExpression="DN"/>
                                <asp:BoundField DataField="GI" HeaderText="GI Date" />
                                <asp:BoundField DataField="OT" HeaderText="Type" />
                                <asp:BoundField DataField="SERV" HeaderText="Service" />
                                <asp:BoundField DataField="CTR" HeaderText="Country" HtmlEncode="false" />
                            </Columns>
     
                        </asp:GridView>


    et le code behind:
    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
     
    protected void Page_Load(object sender, EventArgs e)
            {
    db_e2sDataContext db = new db_e2sDataContext(Global.strConn);
     
                gv_assigned.DataSource = from d in db.DNs
                                         where lst_dn.Contains(d.ORDER_NUMBER)
                                         select new
                                         {
                                             DN = d.ORDER_NUMBER,
                                             GI = d.ORDER_REQ_SHIPPING_DATE,
                                             OT = d.OT_ID,
                                             SERV = d.SERVICE.SERV_LIB,
                                             CTR = "<a title=\"" + d.COUNTRY.COUNTRY_LIB + "\">" + d.CUST_COUNTRY_ID,
                                         };
                gv_assigned.DataBind();
    }

  2. #2
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    il faut mettre des sortExpression a chaque databound item et implémenter l'evenement onSorting (j'ai fait monGV.sort(e.SortExpression, e.SortDirection) mais ca tourne sans fin!
    C'est ça qu'il faut faire

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    208
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 208
    Points : 82
    Points
    82
    Par défaut
    :/

    comme dit, ca tourne sans fin... je comprend pas...

    Dans mon OnSorting j'avais :

    gv_assigned.sort(e.SortExpression, e.SortDirection)

  4. #4
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Citation Envoyé par yozart Voir le message
    :/

    comme dit, ca tourne sans fin... je comprend pas...

    Dans mon OnSorting j'avais :

    gv_assigned.sort(e.SortExpression, e.SortDirection)
    T'es passé en debug pour voir d'où ça venait?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    208
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 208
    Points : 82
    Points
    82
    Par défaut
    Je viens de le faire. (j'y pense pas assez au mode debug...) En fait, il boucle effectivement sur le on_sorting... Ca peut sembler logique vu que j'y appelle la fonction de tri qui doit en fait relancer l'événement au lieu de trier correctement la liste...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    protected void gv_assigned_Sorting(object sender, GridViewSortEventArgs e)
            {
                gv_assigned.Sort(e.SortExpression,e.SortDirection);
            }

  6. #6
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Bah voilà, t'as trouvé

  7. #7
    Membre régulier Avatar de Orphey
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 58
    Points : 83
    Points
    83
    Par défaut
    En fait j'ai exactement le même problème.. Et la solution semble être de faire un tri "manuel" et refaire un bind de la gridview..

    Moi j'ai une liste d'objets que je dois trier mais je ne sais pas comment faire..

  8. #8
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Avec LINQ par exemple

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    208
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 208
    Points : 82
    Points
    82
    Par défaut
    Oui, j'ai l'impression que c'est le seul moyen :/

    Pas des plus efficaces mais tant pis...

  10. #10
    Membre régulier Avatar de Orphey
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 58
    Points : 83
    Points
    83
    Par défaut
    J'ai trouvé ca:

    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
    using System.Linq.Expressions; 
     
         protected void gridView_Sorting(object sender, GridViewSortEventArgs e) 
                { 
                    //re-run the query, use linq to sort the objects based on the arg. 
                    //perform a search using the constraints given  
                    //you could have this saved in Session, rather than requerying your datastore 
                    List<T> myGridResults = PerfomSearch(); 
     
     
                    if (myGridResults != null) 
                    { 
                        var param = Expression.Parameter(typeof(T), e.SortExpression); 
                        var sortExpression = Expression.Lambda<Func<T, object>>(Expression.Convert(Expression.Property(param, e.SortExpression), typeof(object)), param); 
     
     
                        if (e.SortDirection == SortDirection.Ascending) 
                        { 
                           myGridView.DataSource = myGridResults.AsQueryable<T>().OrderBy(sortExpression); 
                        } 
                        else 
                        { 
                            myGridView.DataSource =    myGridResults.AsQueryable<T>().OrderByDescending(sortExpression); 
                        }; 
     
     
                        myGridView.DataBind(); 
                    } 
                }
    Ca marche très bien mais il faut refaire une requête a la base de données a chaque fois..

    Alors en cherchant un peu plus j'ai trouvé ca :
    http://www.codeproject.com/KB/webfor...iewjQuery.aspx

    Apparemment c'est possible en Jquery et donc sans action serveur..
    Pas encore testé mais ca m'a l'air une excellente solution.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    208
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 208
    Points : 82
    Points
    82
    Par défaut
    Merci pour la réponse, je testerai cela !

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/04/2015, 17h30
  2. Réponses: 2
    Dernier message: 31/01/2010, 19h02
  3. Réponses: 6
    Dernier message: 21/10/2009, 17h39
  4. [GridView] RowComand sans datasource
    Par anthyme dans le forum ASP.NET
    Réponses: 0
    Dernier message: 16/04/2009, 14h24
  5. [C# .NET2.0]Gridview et Datasource
    Par Oufti dans le forum ASP.NET
    Réponses: 3
    Dernier message: 13/03/2007, 07h45

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