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 : Problème d'affichage d'indicateur de tri lorsque changement de page [Débutant]


Sujet :

ASP.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 110
    Points : 44
    Points
    44
    Par défaut GridView : Problème d'affichage d'indicateur de tri lorsque changement de page
    Bonjour,

    J'ai mis en place un gridview sur une page qui lorsque je tri sur l'une ou l'autre des colonnes affiche une image indiquant la colonne de tri et la direction du tri. Tout cela fonctionne très bien, mais lorsque je change de page l'image qui normalement devrait apparaitre au côté de l'en-tête sélectionnée n'apparait pas !

    Auriez-vous une idée de la solution à mettre en œuvre pour résoudre ce problème ? Devrais-je ajouter quelque chose quelque part ?

    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
     
           <asp:GridView ID="GridView1" runat="server" 
                AutoGenerateColumns="False" 
                CellPadding="4" 
                ForeColor="#333333" 
                GridLines="None"
                DataKeyNames="Identifiant"       
                AllowSorting="True"
                onsorting="GridView1_Sorting"
                onpageindexchanging="GridView1_PageIndexChanging" 
                OnRowCreated = "GridView1_OnRowCreated"
                allowpaging="True"
                PageSize="5"
                EnableViewState="False"
                >
                <Columns>
                </Columns>
    </asp: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
     
            private String m_strSortExp;
            private SortDirection m_SortDirection;
     
            private DataSet Liste_GridView1 
            {
                get { return (Session["Liste_GridView1"] == null) ? null : (DataSet) Session["Liste_GridView1"]; }
                set { Session["Liste_GridView1"] = value; }
            }
     
     
            public string SortExpression
            {
                get { return (ViewState["sortExpression"]==null)? "Monchamp1": (string)ViewState["sortExpression"]; }
                set { ViewState["sortDirection"] = value; }
            }
     
            public SortDirection SortDirection
            {
                get{return (ViewState["SortDirection"] == null)? SortDirection.Ascending : (SortDirection)ViewState["SortDirection"];}
                set{ViewState["SortDirection"] = value;}
            }       
     
     
            protected void Page_Load(object sender, EventArgs e)
            {
     
     
     
                if (!IsPostBack)
                {
                    m_strSortExp = SortExpression;
                    m_SortDirection =SortDirection;
     
                    Liste_GridView1 = MaClasse.MaListeData().ToDataSet();
                    GridView1.DataSource = Liste_GridView1;
                    GridView1.DataBind();
                }
            }
     
     
            protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
            {
                GridView1.DataSource = Liste_GridView1;
                GridView1.PageIndex = e.NewPageIndex;
                GridView1.DataBind();
            }
     
     
            protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
            {
                string sortExpression = e.SortExpression;
                string direction = string.Empty;
     
                switch(SortDirection)
                {
                    case SortDirection.Ascending:
                        SortDirection = SortDirection.Descending;
                        SortExpression = sortExpression;
                        m_SortDirection = SortDirection;
                        m_strSortExp = sortExpression;
                        direction = " DESC";
                        break;
     
                    case SortDirection.Descending:
                        SortDirection = SortDirection.Ascending;
                        SortExpression = sortExpression;
                        m_SortDirection = SortDirection;
                        m_strSortExp = sortExpression;
                        direction = " ASC";
                        break;
                }
     
                DataTable table = Liste_GridView1.Tables[0];
                table.DefaultView.Sort = sortExpression + direction;
     
                GridView1.DataSource = table;
                GridView1.DataBind();
            }
     
     
            protected void GridView1_OnRowCreated(object sender, GridViewRowEventArgs e)
            {
                if (e.Row.RowType == DataControlRowType.Header)
                    AddSortImage(e.Row);
            }
     
            private void AddSortImage(GridViewRow headerRow)
            {
                int selCol = GetSortColumnIndex(m_strSortExp);
                if (-1 == selCol)
                    return;
     
                Image sortImage = new Image();
                if (SortDirection.Ascending == m_SortDirection)
                    sortImage.ImageUrl = "~/ressources/icones/asc.jpg";
                else
                    sortImage.ImageUrl = "~/ressources/icones/desc.jpg";
     
                headerRow.Cells[selCol].Controls.Add(sortImage);
            }
     
     
            private int GetSortColumnIndex(String strCol)
            {
                foreach (DataControlField field in LstClients.Columns)
                    if (field.SortExpression == strCol)
                        return LstClients.Columns.IndexOf(field);
     
                return -1;
            }

    Merci d'avance pour vos réponse

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Points : 1 502
    Points
    1 502
    Par défaut
    Salut,

    Lorsque tu changes de page l'évènement GridView1_Sorting n'est pas appellé, donc tu perds le tric, et l'entete de ta colonne.

    Donc, tu devrais adapter exécuter ces lignes dans le page_index_changed
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DataTable table = Liste_GridView1.Tables[0];
    table.DefaultView.Sort = sortExpression + direction;
    GridView1.DataSource = table;
    GridView1.DataBind();
    La solution pour fusionner ce doublon est d'utiliser le page_preRender pour effectuer le datatbind de ton gridview .

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 110
    Points : 44
    Points
    44
    Par défaut
    Bonjour,

    Merci pour ce coup de main.

    J'ai entré grossièrement ton code ci-dessous (je m'occuperai de la résolution des doublons plus tard), mais hélas cela ne semble pas fonctionner ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
            {
                DataTable table = Liste_GridView1.Tables[0];
                table.DefaultView.Sort = SortExpression + ((SortDirection == SortDirection.Descending)? " DESC" : " ASC").ToString();
                GridView1.DataSource = table;
                GridView1.PageIndex = e.NewPageIndex;
                GridView1.DataBind();
            }
    Une autre solution ?

    Cordialement

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Points : 1 502
    Points
    1 502
    Par défaut
    Tu as mis un point d’arrêt sur la méthode GridView1_OnRowCreated, passe-t-il dedans ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 110
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par mermich Voir le message
    Tu as mis un point d’arrêt sur la méthode GridView1_OnRowCreated, passe-t-il dedans ?
    Bonjour,

    Désolé pour le temps de réponse. Oui j'ai mis un point d'arrêt et l'événement était bien exécuté. Pour tout dire, j'ai pas mal modifié de code depuis avant hier et j'ai réussi à résoudre le problème.

    Merci encore pour ton aide

    Cordialement

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

Discussions similaires

  1. Problème d'affichage de la pop up lorsque plusieurs GPX sont chargés
    Par youri89 dans le forum IGN API Géoportail
    Réponses: 8
    Dernier message: 04/09/2013, 10h12
  2. [MySQL] problème d'affichage d'un graphique en php sur ma page html
    Par sbenamor dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 24/05/2011, 17h00
  3. Problème d'affichage d'une JSP et rafraichissement d'une page
    Par mega_info dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 05/10/2007, 15h37
  4. [XI] Tri & problèmes d'affichages
    Par jsebfranck dans le forum SAP Crystal Reports
    Réponses: 12
    Dernier message: 10/07/2007, 09h56
  5. Problème d'affichage après un tri....
    Par lyim dans le forum Langage
    Réponses: 4
    Dernier message: 27/04/2006, 17h06

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