Zum Inhalt springen
  • 0

c# Wpf Kann nur ganze Zahlen eingeben, obwohl ich eigentlich nur Double Werte eingeben möchte.


Frage

Geschrieben

Hallo Zusammen,

wie oben schon erwähnt, ich habe eine DataGrid mit einem DataGridTextColumn, wo ich anfangs das Problem hatte das ich Double Werte nur mit einem "."(Kommazahlen hat er irgendwie komisch umgewandelt) eingeben konnte, dann hab ich versucht ein Converter einzubauen welches halt die Kommazahl austauscht gegen Zahlen mit einem Punkt. Das hat auch so immer ganz gut Funktioniert, aber irgendwie kann ich kein "," oder "." eingeben wenn ich davor eine Zahl eingegeben habe.

Hatte jemand schonmal so ein ähnliches Problem? Wenn ja würd ich mir über eure Hilfe freuen.

11 Antworten auf diese Frage

Empfohlene Beiträge

  • 0
Geschrieben

Das Problem mit dem PropertyChanged-Event wurde weiter vorne erklärt. Dann kommt der Wert "2," oder "2." rein und den kann er ggf. nicht parsen, da er an dieser Stelle "2,0" bzw. "2.0" erwarten würde. Was spricht denn gegen die LostFocus-Lösung?

  • 1
Geschrieben (bearbeitet)
vor 23 Minuten schrieb danieljess88:

Wenn ich 2,6 in die Datenbank eintrage kommt 26 raus statt 2.6). Aus diesem Grund habe ich den Converter erstellt.

Warum parst du aber nur in ConvertBack? Wenn deine Werte in der Tabelle nur mit "." gespeichert sind, dann konvertiere halt auch, wenn du die Werte von der DB bekommst. Der Punkt ist halt dezimaler Seperator in den US und somit auch in den meisten DB und Programmiersprachen.

Bearbeitet von KeeperOfCoffee
  • 0
Geschrieben (bearbeitet)

Unbenannt.thumb.PNG.5707c60b608f34c74106e85b7caccd8d.PNG

<local:DoubleConverter x:Key="Converter"/>

Hier ist ein Ausschnitt, vom XAML.

Und unten der Konverter.

class DoubleConverter : IValueConverter

{

#region IValueConverter Member

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)

{

return value;

}

public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)

{

return double.Parse(value.ToString().Replace(",", "."), CultureInfo.InvariantCulture);

}

#endregion

}

 

Ich hab nochmal in meine Backups geschaut und geprüft wann bei mir der Fehler noch nicht war und mir ist aufgefallen das der Fehler nur auftaucht wenn ich den UpdateSourceTrigger auf PropertyChanged setze, was ich nicht genau versteh warum.

 

Bearbeitet von danieljess88
  • 0
Geschrieben

Hallo,

anstelle des Converters könntest du besser in XAML das Format des Strings vorgeben.

 

Beispiel:

Text="{Binding Preis, StringFormat={}{0:C}}"

Das bedeutet, dass die Anzeige als Währung formatiert wird und der aktuellen Programm/Systemsprache (sprich Dezimaltrenner) entspricht.

 

Falls es nicht um Währung geht kannst du hier weitere Formatierungen finden (auch um bspw. Nachkommastellen einzuschränken).

  • 0
Geschrieben

Hallo Markus,

danke für deinen Tipp mit dem Format,

leider ist es nicht das was ich wollte. Der Converter den ich verwende macht schon das was ich von ihm möchte. Der User soll die Möglichkeit haben Kommazahlen eingeben zu können, Problem für mich ist da aber das ich Kommazahlen nicht wirklich z.B. in MySql verwenden kann(MySql möchte "2.6", aber User gibt "2,6" ein. Wenn ich 2,6 in die Datenbank eintrage kommt 26 raus statt 2.6). Aus diesem Grund habe ich den Converter erstellt.

Aber mein Problem liegt glaub ich eher an dem UpdateSourceTrigger. Ich hab ihn im Moment auf "LostFocus" gestellt (damit funktioniert der Converter auch), aber ich find "LostFocus" nicht so gut, weil die Werte die man in der DataGrid einträgt erst in die Binding Variable übertragen wird wenn man fertig mit dem bearbeiten ist. Ich wollte aber das der Wert sofort geändert wird, wodurch ich "PropertyChanged" probiert habe, womit dann ein Problem mit dem Converter entstanden ist und man kann dann im allgemeinen keine Kommazahlen eintragen ("2,6" und "2.6" ging dann nicht mehr).

  • 0
Geschrieben
vor 1 Stunde schrieb Errraddicator:

Das Problem mit dem PropertyChanged-Event wurde weiter vorne erklärt. Dann kommt der Wert "2," oder "2." rein und den kann er ggf. nicht parsen, da er an dieser Stelle "2,0" bzw. "2.0" erwarten würde. Was spricht denn gegen die LostFocus-Lösung?

Nach mehreren Tests habe ich dann auch verstanden das das PropertyChanged-Event das "2," oder "2." nicht parsen kann. Trotzdem danke nochmal für die Erklärung.

 

Ich hab jetzt schon für mich eine Lösung gefunden, wie ich mein Problem beheben kann. Danke an alle die mir weitergeholfen haben. :) 

  • 0
Geschrieben
vor 1 Stunde schrieb KeeperOfCoffee:

Warum parst du aber nur in ConvertBack? Wenn deine Werte in der Tabelle nur mit "." gespeichert sind, dann konvertiere halt auch, wenn du die Werte von der DB bekommst. Der Punkt ist halt dezimaler Seperator in den US und somit auch in den meisten DB und Programmiersprachen.

Die Änderung meiner Werte von "," auf "." hab ich in der MySql Update Methode eingebaut. Aber ich denke das dein Vorschlag einfacher ist. Ich werde versuchen mir das zu nutze zu machen. Danke für den Tipp.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Diese Frage beantworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...