Entwickler-Ecke

WinForms - maskedTextBox richtig formatierte Zahlen


alexbrodi - Mi 04.03.09 11:15
Titel: maskedTextBox richtig formatierte Zahlen
Hallo,

ich habe eine maskedTextBox mit einer MSSQL Datenbank verknüpft.
Das Feld hat den Datentyp DECIMAL (15,6).
Ich möchte das in der maskedTextBox die Zahlen so dargestellt werden. 1.000,00 €
Versucht habe ich schon #.###,## $ und #,###.##. Bei 9 € werden so angezeigt 9.000,00 € oder 9,000.00 €.
Ich verwende Visual Studio 2008.

Ist das ein Bug?

Gruß

Alex


JüTho - Mi 04.03.09 12:26

Ein Bug ist in dem Ding enthalten, was vor dem PC sitzt. :wink:

Wenn Du in der SDk-Doku/MSDN unter MaskedTextBox.Mask nachliest, wirst Du erkennen, was Du für obligatorische Ziffern, für Dezimaltrenner und für Tausendertrenner verwenden musst. Dort steht dann auch: "Das eigentliche für die Anzeige verwendete Zeichen " legt der FormatProvider fest.

Eine Verknüpfung mit der Datenbank ist überhaupt nicht möglich. Du kannst allenfalls mit einer Spalte einer DataTable verbinden, und die bekommt per DbDataAdapter oder DbCommand die Verbindung mit der Datenbank.

Gruß Jürgen


alexbrodi - Mi 04.03.09 15:02

@Jürgen

das man eine maskedTextBox an eine Spalte von einer Tabelle verknüpft ist klar.
DataBindings - Text -- Tabellenname - Spaltenname.

In der Doku steht z.B. $999,999.00 diese Variante.

Letztlich wird die erste Ziffer am ersten linken Platzhalter eingefügt und alle anderen Ziffer von links nach rechts aufgefüllt.

Gruß

Alex


Kha - Mi 04.03.09 17:10

user profile iconalexbrodi hat folgendes geschrieben Zum zitierten Posting springen:
Ist das ein Bug?
Nein, MaskedTextBox besitzt einfach keine spezielle Logik für Preis-Formatierungen. Das Binding weist Text den Wert "9" (also einen String) zu und der wird eben irgendwie in die Maske gepresst. Wenn du keine gewöhnliche TextBox benutzen willst, müsstest du den Wert beim Binden also in "0009" umwandeln.


alexbrodi - Mi 04.03.09 18:37

Was ich benutze Textbox oder maskedTextBox ist mir egal.
Ich hätte gerne eine schöne und übersichtliche Darstellung der Werte.
Wenn ich das einer Textbox die Darstellung beibringen kann ist das auch OK.

Größere Beträge sind mit 1000er Punkt einfach übersichtlicher.


alexbrodi - Mi 11.03.09 15:55

Hallo,

Lösung gefunden.

Das geht auch mit einer textBox und DB Anbindung.

Binding bind = new System.Windows.Forms.Binding("Text", this.db_source, "db_Feld", true);
bind.FormatString = "C"; //oder N P ...
this.textBox.DataBindings.Add(bind);

Gruß

Alex