Veröffentlicht 19. Juli 20196 j 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.
19. Juli 20196 j Dem DataGridTextColumn sollte es doch egal sein, ob es eine Zahl oder ein Text ist. Wie sieht denn der Code deiner Konvertierung aus? Bzw. wie läuft denn die Konvertierung von statten?
19. Juli 20196 j Liegt wohl daran, dass man den String "1," nicht in eine Zahl umwandeln kann bzw. gibt "1," beim Konvertieren womöglich 1 zurück.
19. Juli 20196 j Autor <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 19. Juli 20196 j von danieljess88
19. Juli 20196 j Autor Warum macht der nichts? Wie kommst du darauf? Bearbeitet 19. Juli 20196 j von danieljess88
21. Juli 20196 j 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).
22. Juli 20196 j Autor 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).
22. Juli 20196 j Lösung 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?
22. Juli 20196 j 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 22. Juli 20196 j von KeeperOfCoffee
22. Juli 20196 j Autor 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.
22. Juli 20196 j Autor 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.
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.