2017-03-02 1 views
0

Ich habe eine WinForms-Anwendung mit einer DataGridView-Spalte, die zur Laufzeit mit Preisen gefüllt ist, die Preise sind String-Datentyp.Sortieren von C# .net DataGridView-Spalten als Dezimalzahl

Wenn ich diese Spalten sortieren, mit:

dgvDealerPrices.Sort(colPrice, ListSortDirection.Ascending); 

es die Preise sortiert wie so:

£ 10.350
£ 11.294
£ 8.999
£ 9.050
9099 £
£ 9.099
€ 9,149
£ 9199
£ 9,199.99
£ 9.200
9299 £
£ 9,457.31
£ 9.899
£ 9.994

Offensichtlich, weil es Strings zu sortieren. Wie kann ich die Preise korrekt sortieren lassen? d. h. als Dezimalzahlen, wobei die dargestellte Zeichenfolge beibehalten wird. Ich habe mich mit der SortCompare-Eigenschaft herumgetrieben, konnte es aber nicht zum Laufen bringen.

+1

Mögliche Duplikat [wie String als Zahl in Datagridview in WinForms sortieren] (http://stackoverflow.com/questions/2674670/how-to-sort -string-as-number-in-datagridview-in-winforms) – Reniuz

+0

Verwenden Sie eine Schaltfläche zum Sortieren? – Berkay

+0

@Berkay Programmatisch, nachdem das DataGridView ausgefüllt wurde –

Antwort

2

Sie können Ihre eigenen comparer verwenden:

dgvDealerPrices.Sort(new PriceComparer()); 

class PriceComparer : IComparer 
{ 
    public int Compare(object x, object y) 
    { 
     var rowX = (DataGridViewRow)x; 
     var rowY = (DataGridViewRow)y; 
     var strX = (string)rowX.Cells["colPrice"].Value; 
     var strY = (string)rowY.Cells["colPrice"].Value; 
     return Decimal.Compare(Decimal.Parse(strX.Replace("£", "")), Decimal.Parse(strY.Replace("£", ""))); 
    } 
} 
+0

Sie Legende! Tweaked es ein bisschen und es funktioniert ein Vergnügen! –

+1

Ich bin froh, dass ich @TomCarroll geholfen habe :) – MKoperski

Verwandte Themen