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 :

[C#] Liste triée et gridview


Sujet :

ASP.NET

  1. #1
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Par défaut [C#] Liste triée et gridview
    Coucou tout le monde,

    je rencontre actuellement un problème à l'apparence bien simple, mais que je n'arrive pas à résoudre. J'ai dans ma fenêtre un gridview (gv), qui a comme datasource une liste d'objets.

    Ce que je souhaites faire, c'est que mon gridview se trie quand je clique sur l'header d'une colonne. Pour ceci, j'ai fait la procédure suivante :

    - je mappe l'évènement sorting de mon gridview
    - dans cette fonction je récupère une liste triée
    - je l'affecte comme datasource à mon gridview
    - je fais un petit gv.databind()

    Mais rien à faire, mes données s'affichent toujours dans le même ordre, rien ne change.

    Auriez-vous une idée de comment faire, car j'avoue avoir épuisé tous mes recours.

    Merci d'avance

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Quelle techno ? WPF, WinForms, Silverlight, ASP.NET ?
    Si tu postes dans C# on ne peut pas deviner...

  3. #3
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Par défaut
    Coucou tomlev,

    oui désolé gros oublis de ma part. Je suis en WinForms

  4. #4
    Membre Expert Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Par défaut
    Tu n'aurais pas, par hasard, un ordre qui s'appliquerait au moment du bind ? (car configuré comme ça...)

    Peux-tu nous montrer le code de ton gridview ?

  5. #5
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Par défaut
    non je ne pense pas... voilà le code de mon gridview :

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
     
    <asp:GridView runat="server" ID="gv" Style="width: 1440px" SkinID="gv_General" 
                    DataKeyNames="id" AutoGenerateColumns="False" EmptyDataText="Aucun motif d'hospitalisation pour la spécialité"
                    OnRowCommand="gv_RowCommand" AllowPaging="True" 
                    OnPageIndexChanging="gv_PageEventHandler" AllowSorting="True" 
                    onsorting="gv_Sorting1">
                    <EmptyDataRowStyle BackColor="Red" BorderStyle="None" />
                    <Columns>
                        <asp:TemplateField HeaderText="Motif" SortExpression="libelle">
                            <HeaderStyle Width="250px" />
                            <ItemTemplate>
                                <%# Eval("libelle") %>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Spécialité" SortExpression="nomspecialite">
                            <HeaderStyle Width="150px" />
                            <ItemTemplate>
                                <%# Eval("nomspecialite")%>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Type" SortExpression="TypeHospi">
                            <HeaderStyle Width="90px" />
                            <ItemTemplate>
                                <%# Eval("TypeHospi") %>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Dmi" SortExpression="dmi">
                            <ItemTemplate>
                                <%# Eval("dmi") %>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Dms" SortExpression="dms">
                            <ItemTemplate>
                                <%# Eval("dms") %>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Ambulatoire" SortExpression="ambulatoire">
                            <ItemTemplate>
                                <asp:CheckBox runat="server" ID="c2" Enabled="false" Checked='<%# Eval("ambulatoire") %>'
                                    EnableViewState="false" />
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Isolement" SortExpression="isolement">
                            <ItemTemplate>
                                <asp:CheckBox runat="server" ID="c1" Enabled="false" Checked='<%# Eval("isolement") %>'
                                    EnableViewState="false" />
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Lateralité" SortExpression="lateralite">
                            <ItemTemplate>
                                <asp:CheckBox runat="server" ID="c3" Enabled="false" Checked='<%# Eval("lateralite") %>'
                                    EnableViewState="false" />
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Grosse installation" SortExpression="grosseinstallation">
                            <ItemTemplate>
                                <asp:CheckBox runat="server" ID="c4" Enabled="false" Checked='<%# Eval("grosseinstallation") %>'
                                    EnableViewState="false" />
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Propre" SortExpression="propre">
                            <ItemTemplate>
                                <asp:CheckBox runat="server" ID="c5" Enabled="false" Checked='<%# Eval("Propre") %>'
                                    EnableViewState="false" />
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Risque infectieux" SortExpression="risqueinfectieux">
                            <ItemTemplate>
                                <asp:CheckBox runat="server" ID="c6" Enabled="false" Checked='<%# Eval("risqueinfectieux") %>'
                                    EnableViewState="false" />
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Difficile" SortExpression="Difficile">
                            <ItemTemplate>
                                <asp:CheckBox runat="server" ID="c7" Enabled="false" Checked='<%# Eval("difficile") %>'
                                    EnableViewState="false" />
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Externe" SortExpression="Externe">
                            <ItemTemplate>
                                <asp:CheckBox runat="server" ID="c8" Enabled="false" Checked='<%# Eval("Externe") %>'
                                    EnableViewState="false" />
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Chimio" SortExpression="CHIMIO">
                            <ItemTemplate>
                                <asp:CheckBox runat="server" ID="c9" Enabled="false" Checked='<%# Eval("CHIMIO") %>'
                                    EnableViewState="false" />
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Anesthesie" SortExpression="TypeAnesthesie">
                            <ItemTemplate>
                                <%# String.IsNullOrEmpty(Eval("TypeAnesthesie").ToString()) ? "Aucune" : Eval("TypeAnesthesie")%>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="jour intervention" SortExpression="JOUR_INTERVENTION">
                            <ItemTemplate>
                                <%# Eval("JOUR_INTERVENTION")%>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField>
                            <HeaderStyle Width="60px" />
                            <ItemTemplate>
                                <asp:ImageButton runat="server" ID="cmdMod" CommandArgument='<%# Eval("id") %>' ToolTip="Modifier"
                                    Width="20px" Height="20px" ImageUrl="~/App_Themes/Default/img/edit32.png" CommandName="mod" />&nbsp;
                                <asp:ImageButton runat="server" ID="cmdSuppr" CommandArgument='<%# Eval("id") %>'
                                    ToolTip="Supprimer" Height="20px" Width="20px" ImageUrl="~/App_Themes/Default/img/editdelete32.png"
                                    CommandName="sup" OnClientClick="javascript:return confirm('Supprimer le motif ?');" />
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>
    Merci pour votre aide

  6. #6
    Membre Expert Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Par défaut
    Et quel est le code de gv_Sorting1 ?

  7. #7
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Par défaut
    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
    30
    31
    32
    33
    34
     
    protected void gv_Sorting1(object sender, GridViewSortEventArgs e)
            {
                List<maclasse> tmp = (List<maclasse>)ViewState["dataSource"];
                gv.DataSource = tmp.OrderByDescending(p => p.NOMSPECIALITE).ToList();
     
     
                String order = (String)ViewState["order"];
                if (order == null)
                    order = "Ascending";
     
     
                switch (order)
                {
                    case "Ascending":
     
                        if (e.SortExpression == "nomspecialite")
                            gv.DataSource = tmp.AsQueryable().OrderBy(p => p.NOMSPECIALITE).ToList();
     
                        ViewState["order"] = "Descending";
                        break;
     
                    case "Descending":
     
                        if (e.SortExpression == "nomspecialite")
                            gv.DataSource = tmp.AsQueryable().OrderByDescending(p => p.NOMSPECIALITE).ToList();
     
                        ViewState["order"] = "Ascending";
                        break;
                }
     
                gv.DataBind();
     
            }
    Donc en gros je récupère ma liste que j'avais mis dans le viewstate, je la trie et la redonne en datasource à mon gridview

    Merci pour ton aide

  8. #8
    Membre Expert Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Par défaut
    Ici tu la tries toujours sur NOMSPECIALITE :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    gv.DataSource = tmp.OrderByDescending(p => p.NOMSPECIALITE).ToList();

    Il faut que tu te base sur ton GridViewSortEventArgs :


  9. #9
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Par défaut
    Oui je suis d'accord avec toi je n'ai fait un test que sur une colonne. Le problème c'est qu'à l'affichage, mes données ne sont mêmes pas triées sur cette colonne, même si je clique sur le header de celle-ci ....

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Finality Voir le message
    Je suis en WinForms
    Euh, t'es sûr ?
    Citation Envoyé par Finality Voir le message
    non je ne pense pas... voilà le code de mon gridview :

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
     
    <asp:GridView runat="server" ID="gv" Style="width: 1440px" SkinID="gv_General" 
                    DataKeyNames="id" AutoGenerateColumns="False" EmptyDataText="Aucun motif d'hospitalisation pour la spécialité"
                    OnRowCommand="gv_RowCommand" AllowPaging="True" 
                    OnPageIndexChanging="gv_PageEventHandler" AllowSorting="True" 
                    onsorting="gv_Sorting1">
                    <EmptyDataRowStyle BackColor="Red" BorderStyle="None" />
                    <Columns>
                        <asp:TemplateField HeaderText="Motif" SortExpression="libelle">
                            <HeaderStyle Width="250px" />
                            <ItemTemplate>
                                <%# Eval("libelle") %>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Spécialité" SortExpression="nomspecialite">
                            <HeaderStyle Width="150px" />
                            <ItemTemplate>
                                <%# Eval("nomspecialite")%>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Type" SortExpression="TypeHospi">
                            <HeaderStyle Width="90px" />
                            <ItemTemplate>
                                <%# Eval("TypeHospi") %>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Dmi" SortExpression="dmi">
                            <ItemTemplate>
                                <%# Eval("dmi") %>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Dms" SortExpression="dms">
                            <ItemTemplate>
                                <%# Eval("dms") %>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Ambulatoire" SortExpression="ambulatoire">
                            <ItemTemplate>
                                <asp:CheckBox runat="server" ID="c2" Enabled="false" Checked='<%# Eval("ambulatoire") %>'
                                    EnableViewState="false" />
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Isolement" SortExpression="isolement">
                            <ItemTemplate>
                                <asp:CheckBox runat="server" ID="c1" Enabled="false" Checked='<%# Eval("isolement") %>'
                                    EnableViewState="false" />
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Lateralité" SortExpression="lateralite">
                            <ItemTemplate>
                                <asp:CheckBox runat="server" ID="c3" Enabled="false" Checked='<%# Eval("lateralite") %>'
                                    EnableViewState="false" />
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Grosse installation" SortExpression="grosseinstallation">
                            <ItemTemplate>
                                <asp:CheckBox runat="server" ID="c4" Enabled="false" Checked='<%# Eval("grosseinstallation") %>'
                                    EnableViewState="false" />
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Propre" SortExpression="propre">
                            <ItemTemplate>
                                <asp:CheckBox runat="server" ID="c5" Enabled="false" Checked='<%# Eval("Propre") %>'
                                    EnableViewState="false" />
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Risque infectieux" SortExpression="risqueinfectieux">
                            <ItemTemplate>
                                <asp:CheckBox runat="server" ID="c6" Enabled="false" Checked='<%# Eval("risqueinfectieux") %>'
                                    EnableViewState="false" />
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Difficile" SortExpression="Difficile">
                            <ItemTemplate>
                                <asp:CheckBox runat="server" ID="c7" Enabled="false" Checked='<%# Eval("difficile") %>'
                                    EnableViewState="false" />
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Externe" SortExpression="Externe">
                            <ItemTemplate>
                                <asp:CheckBox runat="server" ID="c8" Enabled="false" Checked='<%# Eval("Externe") %>'
                                    EnableViewState="false" />
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Chimio" SortExpression="CHIMIO">
                            <ItemTemplate>
                                <asp:CheckBox runat="server" ID="c9" Enabled="false" Checked='<%# Eval("CHIMIO") %>'
                                    EnableViewState="false" />
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Anesthesie" SortExpression="TypeAnesthesie">
                            <ItemTemplate>
                                <%# String.IsNullOrEmpty(Eval("TypeAnesthesie").ToString()) ? "Aucune" : Eval("TypeAnesthesie")%>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="jour intervention" SortExpression="JOUR_INTERVENTION">
                            <ItemTemplate>
                                <%# Eval("JOUR_INTERVENTION")%>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField>
                            <HeaderStyle Width="60px" />
                            <ItemTemplate>
                                <asp:ImageButton runat="server" ID="cmdMod" CommandArgument='<%# Eval("id") %>' ToolTip="Modifier"
                                    Width="20px" Height="20px" ImageUrl="~/App_Themes/Default/img/edit32.png" CommandName="mod" />&nbsp;
                                <asp:ImageButton runat="server" ID="cmdSuppr" CommandArgument='<%# Eval("id") %>'
                                    ToolTip="Supprimer" Height="20px" Width="20px" ImageUrl="~/App_Themes/Default/img/editdelete32.png"
                                    CommandName="sup" OnClientClick="javascript:return confirm('Supprimer le motif ?');" />
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>
    A moins que WinForms ait beaucoup changé depuis la dernière fois que j'ai regardé, ça c'est ASP.NET

  11. #11
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Par défaut
    Pffffiou excuse moi je sais pas ce qu'il m'a pris je travaille sur 2 projets en même temps me suis mélangé les pinceaux

    Alors pour reprendre : je suis en ASP .NET

    (vraiment désolé )

  12. #12
    Membre émérite Avatar de Ramajb
    Homme Profil pro
    ----------------------------
    Inscrit en
    Septembre 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ----------------------------

    Informations forums :
    Inscription : Septembre 2007
    Messages : 476
    Par défaut
    Salut,
    ton code est un peu en "désordre". Pour mieux répondre à ce genre de traitement:
    • déclare deux propriétés (SortExpression et SortDirection) dont les valeurs seront stockées dans un objet persistent(par ex: ViewState).
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
       
      //nom de colonne
      public string SortExpression
      {
         get{return ViewState["sortExpression"] as string;}
         set{ ViewState["sortDirection"]=value;}
      }
      //direction du tri
      public SortDirection SortDirection
      {
        get{ object o = ViewState["sortDirection"]; o==null?return SortDirection.Ascending:return (SortDirection)o;}
        set { ViewState["sortDirection"]=value;}
      }
      Ces deux propriétés donnent la possibilité de suivre le tri sur le gridview: la colonne triée et la direction du tri.
    • Dans le gestionnaire d’événement RowSorting, e.SortExpression donne le nom du colonne sur laquelle tu souhaites appliquer le tri.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      //si tri sur la même colonne
      if(this.SortExpression==e.SortExpression)
      {
         this.SortDirection=this.SortDirection==SortDirection.Ascending?
                SortDirection.Descending:SortDirection.Ascending;
      }
      else  //tri sur une nouvelle colonne: mettre Ascending
      {
         this.SortDirection=SortDirection.Ascending;
      }
    • Ensuite, au niveau du DataSource, le traitement devrait être conditionné par les valeurs de ces deux propriétés.
      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
      //mechanisme pour alleger le traitement ;)
      bool sortascending = this.sortDirection==SortDirection.Ascending?true:false;
      //ici tu récupères les données.
      List<maclasse> tmp = (List<maclasse>)ViewState["dataSource"];
       
      switch(this.SortExpression)
      {
         case "nomspecialite":
             tmp = sortascending?temp.orderBy( c => c.nomspecialite):
                              temp.OrderByDescending(c => c.nomspecialite);
             break;
        ..........
      }
      // DataBind
      gv.DataSource=tmp;
      gr.DataBind();
    • N'oublies pas de faire un "reset" du mode edit du gv avant le binding;


    A+

  13. #13
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Par défaut
    Salut Ramajb,

    J'ai l'impression d'avoir fait tout ce que tu m'as dit de faire... A part la mise en forme du code, je ne vois aucune différence entre le tien et le mien

    J'ai remarqué une chose étrange : quand ma page se charge, si j'ordonne ma liste d'une certaine manière cela fonctionne. Mais pas mon code dans la fonction sorting ....

    J'avoue être un peu perdu

  14. #14
    Membre émérite Avatar de Ramajb
    Homme Profil pro
    ----------------------------
    Inscrit en
    Septembre 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ----------------------------

    Informations forums :
    Inscription : Septembre 2007
    Messages : 476
    Par défaut
    Citation Envoyé par Finality Voir le message
    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
    30
    31
    32
    33
    34
     
    protected void gv_Sorting1(object sender, GridViewSortEventArgs e)
            {
                List<maclasse> tmp = (List<maclasse>)ViewState["dataSource"];
                gv.DataSource = tmp.OrderByDescending(p => p.NOMSPECIALITE).ToList();
     
     
                String order = (String)ViewState["order"];
                if (order == null)
                    order = "Ascending";
     
     
                switch (order)
                {
                    case "Ascending":
     
                        if (e.SortExpression == "nomspecialite")
                            gv.DataSource = tmp.AsQueryable().OrderBy(p => p.NOMSPECIALITE).ToList();
     
                        ViewState["order"] = "Descending";
                        break;
     
                    case "Descending":
     
                        if (e.SortExpression == "nomspecialite")
                            gv.DataSource = tmp.AsQueryable().OrderByDescending(p => p.NOMSPECIALITE).ToList();
     
                        ViewState["order"] = "Ascending";
                        break;
                }
     
                gv.DataBind();
     
            }
    Donc en gros je récupère ma liste que j'avais mis dans le viewstate, je la trie et la redonne en datasource à mon gridview

    Merci pour ton aide
    Le scénario suivante n'est pas gérée par ton code: l'utilisateur clique deux fois de suite sur le header d'une colonne.
    Citation Envoyé par Finality Voir le message
    J'ai l'impression d'avoir fait tout ce que tu m'as dit de faire... A part la mise en forme du code, je ne vois aucune différence entre le tien et le mien
    Moi je vois une grande différence, mon code il marche bien, le tien non . Sinon dans ton code tu fais comment pour récupérer le nom du colonne à trier?.
    a+

  15. #15
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Par défaut
    Citation Envoyé par Ramajb Voir le message
    Moi je vois une grande différence, mon code il marche bien, le tien non .
    Bon bah je viens de coppier / coller ton code et il pouvait pas fonctionner : il y avait plusieurs erreurs à quelques endroits

    Même après avoir corrigé ces petits bugs, rien à faire mon gridview ne se trie pas..... j'y comprend plus rien

  16. #16
    Membre émérite Avatar de Ramajb
    Homme Profil pro
    ----------------------------
    Inscrit en
    Septembre 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ----------------------------

    Informations forums :
    Inscription : Septembre 2007
    Messages : 476
    Par défaut
    En ce moment, que devient ton gv_Sorting1? Peux-tu nous montrer le code dedans?

  17. #17
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Par défaut
    Coucou Ramajb,

    voilà ce que donne actuellement le code de la fonction sorting :

    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
    30
    31
    32
    33
    34
    35
     
    protected void gv_Sorting1(object sender, GridViewSortEventArgs e)
            {
                //si tri sur la même colonne
                if (this.SortExpression == e.SortExpression)
                {
                    this.SortDirection = this.SortDirection == SortDirection.Ascending ? SortDirection.Descending : SortDirection.Ascending;
                }
                else  //tri sur une nouvelle colonne: mettre Ascending
                {
                    this.SortDirection = SortDirection.Ascending;
                    this.SortExpression = e.SortExpression;
                }
     
                //mechanisme pour alleger le traitement ;)
                bool sortascending = this.SortDirection == SortDirection.Ascending ? true : false;
     
     
                //ici tu récupères les données.
                List<maclasse> tmp = (List<maclasse>)ViewState["dataSource"];
     
                switch(this.SortExpression)
                {
                    case "nomspecialite":
                        tmp = sortascending ? tmp.OrderBy(c => c.NOMSPECIALITE).ToList() : tmp.OrderByDescending(c => c.NOMSPECIALITE).ToList();
                     break;
     
                }
     
                // DataBind
                gv.DataSource=tmp;
                gv.DataBind();
     
     
            }
    Merci encore pour ton aide

  18. #18
    Membre émérite Avatar de Ramajb
    Homme Profil pro
    ----------------------------
    Inscrit en
    Septembre 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ----------------------------

    Informations forums :
    Inscription : Septembre 2007
    Messages : 476
    Par défaut
    Tout me semble bon. Mets un point d’arrêt au début du code du gestionnaire d’événements gv_Sorting1 pour voir si les variables contiennent toutes les données attendus.

    a+

  19. #19
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Par défaut
    Alors j'ai avancé un peu sur le problème :

    oui les éléments triés sont bons. Par contre j'ai fait un test qui va nous faire avance : j'ai modifié ma requête pour ne lui donné en datasource qu'une List de 10 éléments. ET là que vois-je : le gridview n'est pas rafraichit !!!!! j'ai toujours mes 50 éléments d'affichés !

    Donc je pense qu'il s'agit bien d'un problème de refresh. Quelqu'un aurait-il une idée du pourquoi du comment ?

    Je précise, j'ai bien fait un gv.DataBind()

  20. #20
    Membre émérite Avatar de Ramajb
    Homme Profil pro
    ----------------------------
    Inscrit en
    Septembre 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ----------------------------

    Informations forums :
    Inscription : Septembre 2007
    Messages : 476
    Par défaut
    Citation Envoyé par Finality Voir le message
    Alors j'ai avancé un peu sur le problème :

    oui les éléments triés sont bons. Par contre j'ai fait un test qui va nous faire avance : j'ai modifié ma requête pour ne lui donné en datasource qu'une List de 10 éléments. ET là que vois-je : le gridview n'est pas rafraichit !!!!! j'ai toujours mes 50 éléments d'affichés !

    Donc je pense qu'il s'agit bien d'un problème de refresh. Quelqu'un aurait-il une idée du pourquoi du comment ?

    Je précise, j'ai bien fait un gv.DataBind()
    Problème des caches peut être. Pour en être sur, pourrais-tu les vider de ton navigateur?
    a+

Discussions similaires

  1. list dans un gridview
    Par hokidoki dans le forum ASP.NET
    Réponses: 2
    Dernier message: 23/04/2009, 18h08
  2. QSet<ptr*> liste triée
    Par laflak dans le forum Débuter
    Réponses: 15
    Dernier message: 16/12/2008, 17h16
  3. position dans une liste triée
    Par mdr_cedrick dans le forum Langage SQL
    Réponses: 6
    Dernier message: 27/11/2008, 15h33
  4. liste triée mais pas SortedList :p
    Par duaner dans le forum C#
    Réponses: 6
    Dernier message: 19/09/2007, 17h10
  5. Recherche d'un élément dans une liste triée (vitesse)
    Par Rodrigue dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 18/05/2006, 09h23

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