Laden...

Falsche Sortierung im GridView

Erstellt von marv100 vor 14 Jahren Letzter Beitrag vor 14 Jahren 920 Views
M
marv100 Themenstarter:in
227 Beiträge seit 2008
vor 14 Jahren
Falsche Sortierung im GridView

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

L
770 Beiträge seit 2006
vor 14 Jahren

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

M
marv100 Themenstarter:in
227 Beiträge seit 2008
vor 14 Jahren

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

P
120 Beiträge seit 2008
vor 14 Jahren

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
M
marv100 Themenstarter:in
227 Beiträge seit 2008
vor 14 Jahren

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