2009-04-06 8 views
2

Ich habe eine Webanwendung (ASP.NET 2.0 mit C#), und darin habe ich eine Gridview, die ihre Daten aus einer Oracle-Datenbank bezieht.Gridview Sortierung mit Bildern

Ich musste die Sortierfunktion für die Gridview implementieren, also fügte ich ein Dropdown-Menü direkt über der Gridview mit zwei Auswahlmöglichkeiten hinzu: Aufsteigend und Absteigend. Dann habe ich in der Gridview_Sorting Methode eine switch-Anweisung, die im Grunde die Auswahl im Dropdown-Menü überprüft und entsprechend sortiert.

Dies funktioniert, aber ich möchte in der Lage sein, es einmal zu klicken, und es sortiert in eine Richtung, dann klicken Sie es erneut, und es sortiert in die andere Richtung. Eine andere Sache, die ich gerne hätte, wären Bilder neben den Spaltennamen, die Ihnen sagen, in welche Richtung die Daten sortiert sind.

Irgendwelche Vorschläge? Danke.

Antwort

3

prüfen diese blog post für eine generische Funktion aus dieser

+0

nette Informationen..danke viel –

1

Eine einfache Lösung wäre die Verwendung einer Bildsteuerungs- oder Bildschaltfläche. Bei dem Klickereignis können Sie das Bild von einem Bild zum anderen wechseln. Um den vorherigen Status zu ermitteln, verwenden Sie entweder eine Sitzungsvariable oder legen Sie fest, auf was die imageurl-Eigenschaft der Bildschaltfläche eingestellt wurde, schalten Sie sie um und rufen Sie Ihre Sortiermethode auf.

0

ich JQuery Tisch Sortierer verwenden zu handhaben. Client-Seite Sortierung ist schneller auf dem Frontend und dieses Plugin ermöglicht es Ihnen, Bilder zu spezifizieren, die in den Überschriften der Spalten angezeigt werden:

http://tablesorter.com/docs/

Ich bin nicht sicher, was die Auswirkungen sein werden, wenn bei der Auswahl und Interaktion arbeitet Mit dieser Methode, also Vorsicht.

0

ich hinzufügen, um das Bild auf die Kopfzelle auf Sortierung:

// ... 

GridViewRow headerRow = GridView1.HeaderRow; 

foreach (TableCell tableCell in headerRow.Cells) 
{ 
    if (tableCell.HasControls()) 
    { 
     LinkButton button = tableCell.Controls[0] as LinkButton; 
     if (button != null) 
     {            
      if (sortExp == button.CommandArgument) 
      { 
       Image image = new Image(); 
       if (sortDir == "ASC") 
       { 
        image.ImageUrl = "/_layouts/Document LibraryManager/icon_ascending.gif"; 
        tableCell.Controls.Add(image); 
       } 
       else 
       { 
        image.ImageUrl = "/_layouts/Document LibraryManager/icon_descending.gif"; 
        tableCell.Controls.Add(image); 
       } 
      } 
     } 
    } 
} 
+0

Ich habe 'sorteExp' und' sortDir' von einer anderen Funktion Ich bevölkere meine 'GridView' aus, aber es funktioniert nicht. Können Sie bitte helfen? – SearchForKnowledge

0

Die einfachste und elegante Art und Weise zu tun, es Viewstate zu verwenden ist. Behalten Sie die Sortierrichtung in ViewState bei und greifen Sie bei jedem Sortiervorgang darauf zu.

public SortDirection GridViewSortDirection 
    { 
     get 
     { 
      if (ViewState["sortDirection"] == null || (SortDirection)ViewState["sortDirection"] == SortDirection.Descending) 
       ViewState["sortDirection"] = SortDirection.Ascending; 
      else if ((SortDirection)ViewState["sortDirection"] == SortDirection.Ascending) 
       ViewState["sortDirection"] = SortDirection.Descending; 

      return (SortDirection)ViewState["sortDirection"]; 
     } 
     set 
     { ViewState["sortDirection"] = value; } 
    } 

Wenn keine Sortierung zuvor getan wurde (null Zustand) oder vorherige Sortierrichtung wurde absteigend, soll beim nächsten Mal Sortierung in aufsteigender Reihenfolge geschehen. Ähnlich, umgekehrt.