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
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
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
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ß
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