2011-10-06 4 views
0

L'ordre de tri par défaut du contrôle gridview est d'abord croissant, puis décroissant. Maintenant ci-dessous j'ai du code pour changer ça. Jusqu'ici tout va bien. Mais quand je clique à nouveau sur une autre colonne, elle définit la direction de tri pour remonter à nouveau. Il alterne entre descendant et ascendant à chaque clic, quelle que soit la colonne. Maintenant ce que je veux vraiment, c'est que le premier clic sur n'importe quelle colonne soit descendant, et si je clique sur une colonne pour la deuxième fois (deuxième sens signifiant consécutivement), cela devrait être ascendant. Exemple: J'ai 2 colonnes, l'une est le salaire et l'autre est l'âge. Maintenant, je clique sur le salaire, et la première direction de tri est décroissante, et non l'ascendante par défaut (c'est ce que fait le code). Maintenant, quand je clique sur l'âge, il change la direction de tri à ascendant, je veux qu'il reste le même quand je change à une autre colonne, MAIS dois-je cliquer sur le salaire pour la deuxième fois, il devrait passer à ascendant (parce que le premier clic). Aucune suggestion?Direction de tri du contrôle Gridview

Mon code:

public SortDirection GridViewSortDirection 
{ 
    get 
    { 
     if (ViewState["sortDirection"] == null) 
      ViewState["sortDirection"] = SortDirection.Ascending; 
     return (SortDirection)ViewState["sortDirection"]; 
    } 
    set 
    { 
     ViewState["sortDirection"] = value; 
    } 
} 
protected void GridView1_OnSorting(object sender, GridViewSortEventArgs e) 
{ 
    if (ViewState["sortDirection"] == null) 
    { 
     e.SortDirection = SortDirection.Descending; 
    } 
    else if (GridViewSortDirection == SortDirection.Ascending) 
    { 
     e.SortDirection = SortDirection.Descending; 
    } 
    else if (GridViewSortDirection == SortDirection.Descending) 
    { 
     e.SortDirection = SortDirection.Ascending; 
    } 

    GridViewSortDirection = e.SortDirection; 
} 

Répondre

0

Essayez de vérifier pour déterminer si le SortExpression a changé depuis le SortExpression précédemment défini et si oui par défaut le SortDirection de descendre.

protected void GridView1_OnSorting(object sender, GridViewSortEventArgs e) 
{ 
    if (e.SortExpression != GridView1.SortExpression) 
    { 
     e.SortDirection = SortDirection.Descending; 
     GridViewSortDirection = e.SortDirection; 
    } 
    else if (GridViewSortDirection == SortDirection.Ascending) 
    { 
     e.SortDirection = SortDirection.Descending; 
    } 
    else if (GridViewSortDirection == SortDirection.Descending) 
    { 
     e.SortDirection = SortDirection.Ascending; 
    } 

    GridViewSortDirection = e.SortDirection; 
} 
+0

Je suppose que cette partie vous suggérez: if (! E.SortExpression = GridView1.SortExpression) { e.SortDirection = SortDirection.Descending; } devrait juste être ajouté à mon code, la première chose dans le void protégé - GridView1_OnSorting (expéditeur d'objet, GridViewSortEventArgs e)? déclaration –

+0

parce que je ne suis pas sûr depuis que j'ai obtenu ce code à partir d'un autre forum de discussion. Je ne comprends vraiment que la moitié du code. –

+0

J'ai mis à jour ma réponse en fonction de votre code ci-dessus. Cela devrait fonctionner, mais je n'ai pas pu le tester. – jdavies