Gebundene Textbox formatieren

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Gebundene Textbox formatieren

    Moin,

    wie stelle ich es an, dass der Wert, einer an ein Databinding gebundene Textbox, als z.B. Währung formatiert wird?

    VB.NET-Quellcode

    1. Dim Gesamtpreis As Decimal = 0.125
    2. tb_Gesamtpreis.Text = Gesamtpreis .ToString("c")


    Dies funktioniert, allerdings ist das dann nicht über ein DataBinding zu ändern.

    Gebunden wird mit ...

    VB.NET-Quellcode

    1. With BS
    2. tb_Gesamtpreis.DataBindings.Add("Text", .DataSource, "Gesamtpreis", True, DataSourceUpdateMode.OnPropertyChanged)
    3. End With


    Damit steht allerdings der Wert mit x Nachkommastellen und ohne Währungssymbol in der TextBox.
    Die formattingEnabled Eigenschaft formatiert hier gar nichts, entsprechend der IntelliSense Beschreibung scheint diese auch nur für Datumswerte zu sein.

    Gewünscht wäre eine festzulegende Anzahl an Dezimalstellen und das aktuelle Währungssymbol.

    Grüße :)
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Die MaskedTextBox kannte ich noch gar nicht, scheint aber nicht ganz das zu sein was ich gerne hätte.

    Man gibt über Mask das Format vor, was angezeigt wird, allerdings wird dann der Wert in das Format "gepresst"

    Beispiel:

    VB.NET-Quellcode

    1. Dim GesamtPreis As Decimal = Convert.ToDecimal(125.25 * 5)
    2. mtb_GesamtPreis.Mask = "###.## €"
    3. mtb_GesamtPreis.Text = GesamtPreis.ToString
    4. 'Ausgabe: 626,25 €


    Übersteigt der Wert die 3 ###, so wird er abgeschnitten. Die Eingabe erfolgt von links nach rechts, wenn nur ein kleiner Betrag eingegeben wird steht dort nicht das was man eigentlich erwarten würde. Beschissen beschrieben was ich meine, aber ich denke du verstehst es?

    Gibt man nun 5,50 ein steht dort <code>550,__ €</Code> und nicht <code>5,50 €</code>

    Muss wohl was mit der Maske zu tun haben, alledings werde ich aus der Syntax nicht wirklich schlauer.
    Ist das nicht so wie z. B. in Excel. Dann müsstest du 00##.##€ schreiben. Also # steht für Muss und die 0 für KANN. Ich weiß nur nicht ob sie dann mit ausgegeben wird. Oder war das genau andersherum?
    Die Format Überladungen habe ich tatsächlich übersehen.

    Funktionieren tut es im Prinzip jetzt, beim Laden der Daten steht der Betrag in € drin.
    Allerdings wird nun beim erneuten Befüllen der BindingSource (Datensatzwechsel) der Wert in der Textbox auf 0 gesetzt und die Formatierung mit € ist weg.

    VB.NET-Quellcode

    1. If tb_Gesamtpreis.DataBindings.Count > 0 Then tb_Gesamtpreis.DataBindings.RemoveAt(0)
    2. tb_Gesamtpreis.DataBindings.Add("Text", .DataSource, "Gesamtpreis", True, DataSourceUpdateMode.OnValidation, New Decimal, "C")


    Lasse ich den DefaultValue sowie die Formatierung mit "C" weg, wird der Wert wie sonst auch immer, beim Datensatzwechsel aktualisiert.
    Das Databinding setze ich nicht über den Designer, sondern per Code beim Datensatzwechsel.

    VB.NET-Quellcode

    1. Private Property BS As New BindingSource()
    2. Private Property DA As New SqlDataAdapter()
    3. Private Property DS As New DataSet


    VB.NET-Quellcode

    1. Dim DT_Data As New DataTable("Positionen")
    2. Using Adapter As New SqlDataAdapter(SelectCommand(ID), Conn_MSSQL)
    3. Adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
    4. Adapter.Fill(DT_Data)
    5. End Using
    6. BS.DataSource = DT_Data
    7. DA = New SqlDataAdapter(SelectCommand(ID), Conn_MSSQL)
    8. DA.Fill(DS, DT_Data.TableName)
    9. Dim CommandBuilder As New SqlCommandBuilder(DA)
    10. DA.UpdateCommand = CommandBuilder.GetUpdateCommand


    Oft durchlaufen werden sie nicht, beim Datensatzwechsel je einmal.

    BlueLagoonX schrieb:

    Oft durchlaufen werden sie nicht, beim Datensatzwechsel je einmal.
    Witzbold.
    "beim Datensatzwechsel je einmal" erfüllt mein Verständnis von "oft".
    Aber ich war ungenau - ich meinte "öfter".

    (Listig nich? "öfter" ist eiglich sprachlich als Steigerungsform gebildet, aber im Falle "oft" bedeutet es "hin und wieder", also eher weniger.)