Währungsformat in double



  • Hallo,

    um die Preise ordentlich darzustellen, formatiere ich diese (double-Format) folgendremaßen:

    double ep = Convert.ToDouble(item.Preis.ToString());
    string preis = string.Format("{0:c}", ep);
    

    D.h. es wir z.B. 12,50 € angezeigt.
    Möchte ich nun ein Update auf diesen Datensatz durchführen, kann aufgrund des falschen Formats nicht gespeichert werden.

    Wie kann ich daher das Feld zum Speichern wieder in ein double Wert konvertieren?



  • Indem Du Inhalt und Ansicht trennst. 😉



  • Und wie mache ich dies als sauberen/richtigen Wert?

    Ich könnte den String mit dem Wahrungszeichen z.B. mit Substring etc. abschneiden, aber ob dies eben der richtig Weg wäre, weiß ich nicht?!



  • Marsipulami schrieb:

    Ich könnte den String mit dem Wahrungszeichen z.B. mit Substring etc. abschneiden, aber ob dies eben der richtig Weg wäre, weiß ich nicht?!

    Ist es nicht. Zumindest bist du dann wieder an der Stelle wo UI und Businesslogik vermanschen.

    Auf was für Controls gibst du die Daten aus? Es gibt Controls bei denen man das Anzeigeformat anpassen kann und die Zuordnung zu den dahinter liegenden Daten dennoch im korrekten Format durchgeführt werden.



  • Der Wert wird in einer Zelle in einer DataGridView ausgegeben.



  • Arrrwww. Dann schau dir zu aller erst einmal DataBinding an. Dein Codebeispiel sieht nämlich nach "Ich setze den Wert manuell" aus. Und für weiteres dürfte dir folgender Link weiterhelfen: DataGridViewCellStyle.Format-Eigenschaft



  • Und da steht in jeder einzelnen Zelle "€" mit dabei?



  • Und da steht in jeder einzelnen Zelle "€" mit dabei?
    

    Ja 😕

    Ich füge die Daten nicht über eine DataSource hinzu, sondern wie folgt:

    string[] row = { id.ToString(), anzahl, preis };
    dataGridView1.Rows.Add(row);
    


  • Marsipulami schrieb:

    Ich füge die Daten nicht über eine DataSource hinzu, sondern wie folgt:

    string[] row = { id.ToString(), anzahl, preis };
    dataGridView1.Rows.Add(row);
    

    Dann gilt mein Link immernoch. - Ändere das Verhalten, auf eine DataSoure. Das erspart dir z.B. viel Code geschreibse (falls deine Items eine Collection sind, kannst du z.B. eine BindingList<T> an das DataGridView hängen).


Log in to reply