Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Falsche Sortierung im GridView
marv100
myCSharp.de - Member



Dabei seit:
Beiträge: 227

Themenstarter:

Falsche Sortierung im GridView

beantworten | zitieren | melden

Hallo zusammen,

ich habe ein kleines Problem mit meiner Sortierung vom GridView. Und zwar habe ich dort eine Spalte "Preis". Da sind z.B. 3 Datensätze mit den Preisen 34, 79 und 114.
Wenn ich jetzt sage, sortier mir mal die Datensätze nach dem Preis, dann kommt folgendes bei raus:
114
34
79

oder

79
34
114

Woran liegt das und wie kann ich das ändern?
Meine Sortierfunktion sieht so aus:


    protected void GV_Artikeluebersicht_Sorting(object sender, GridViewSortEventArgs e)
    {
        DataTable dataTable = GV_Artikeluebersicht.DataSource as DataTable;

        if (dataTable != null)
        {
            DataView dataView = new DataView(dataTable);
            dataView.Sort = e.SortExpression + " " + ConvertSortDirectionToSql(e.SortDirection);

            GV_Artikeluebersicht.DataSource = dataView;
            GV_Artikeluebersicht.DataBind();
        }
    }
    private string ConvertSortDirectionToSql(SortDirection sortDirection)
    {
        string newSortDirection = String.Empty;

        switch (sortDirection)
        {
            case SortDirection.Ascending:
                newSortDirection = "ASC";
                break;

            case SortDirection.Descending:
                newSortDirection = "DESC";
                break;
        }

        return newSortDirection;
    }
Habe dies irgendwoe im Internet gefunden...

Viele Grüße,
marv100
"Niemand wird je mehr als 640KB RAM benötigen!"

Bill Gates, 1981
private Nachricht | Beiträge des Benutzers
Lion1984
myCSharp.de - Member



Dabei seit:
Beiträge: 782
Herkunft: Österreich

beantworten | zitieren | melden

Das liegt wohl daran, dass du einen String verwendest oder das Feld ein String ist.
Bei einem String ist eben 11X vor 34 oder 79, umgekehrt natürlich das selbe.

Das Problem dürfte sich lösen, wenn du geeignete Typen verwendest.
lg Lion
private Nachricht | Beiträge des Benutzers
marv100
myCSharp.de - Member



Dabei seit:
Beiträge: 227

Themenstarter:

beantworten | zitieren | melden

Hab ich schon versucht... Im GV sieht die Zeile so aus:
<asp:Label ID="L_Preis" runat="server" Font-Bold="true" Text='<%# Convert.ToDouble(Eval("VKPreis")) %> ' />
Der Wert steht in der DB als varchar, ich wandel den aber in dem Label zu ToDouble um, oder muss in den Datentyp direkt in der DB ändern?
"Niemand wird je mehr als 640KB RAM benötigen!"

Bill Gates, 1981
private Nachricht | Beiträge des Benutzers
Phil_B
myCSharp.de - Member



Dabei seit:
Beiträge: 120

beantworten | zitieren | melden

Im Label wandelst du den Wert zwar um, aber dort sortierst du ja nicht.
Das Sortieren machst du ja im GV_Artikeluebersicht_Sorting-Event. Und hier verwendest du Strings.
Wenn du hier die Reihenfolge festlegst, wenn die Werte noch Strings sind, dann ist es letztendlich dem Label egal, ob der ankommende Wert ein Double oder ein String ist.
Der wird eh wieder in einen String umgewandelt.

An der Stelle, wo du die DataTable erstellst, verwendest du wahrscheinlich für den Preis den Datentyp String, oder?

Poste mal bitte, wie du die DataTable erstellst.

Mit freundlichem Gruß

- Philipp
private Nachricht | Beiträge des Benutzers
marv100
myCSharp.de - Member



Dabei seit:
Beiträge: 227

Themenstarter:

beantworten | zitieren | melden

Hab jetzt einfach mal den Datentyp in der DB geändert und nun funktioniert es.
Danke für eure Tipps.
"Niemand wird je mehr als 640KB RAM benötigen!"

Bill Gates, 1981
private Nachricht | Beiträge des Benutzers