Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Werte aus Texboxen u. Combobox berechnen und ausgeben
WilliamDexter
myCSharp.de - Member



Dabei seit:
Beiträge: 5

Themenstarter:

Werte aus Texboxen u. Combobox berechnen und ausgeben

beantworten | zitieren | melden

Moin aus dem Norden,

ich bin zwar jetzt kein wirklicher Anfänger mehr, stehe momentan aber echt auf den Schlauch. Ich erstelle gerade eine kleine Software Applikation, um Bücher oder ähnliches in eine Datenbank zu schreiben. Datenbankanbindung etc. steht bereits. Nur möchte ich jetzt etwas Feinarbeit leisten.

Konkret: Der Preis eines Buches aus einer Textbox und die Anzahl des Buches aus der Combobox auslesen und in ein Label, oder je nachdem auch Textbox ausgeben.
Habe Die Anzahl der Bücher in der Combobox über eine For-Schleife laufen, was auch gut funktioniert hat. Habe nun die Methode InitializeValues() gebaut, um sobald, ein Preis eingetragen und die Menge ausgewählt wurde, der gesamtbetrag im Label ausgegeben wird.

(Ich wei dass das möglich ist, da ich schonmal sowas gemacht habe und das hat auch funktioniert hat. Leider finde ich nichts mehr davon (wegen Umzug), zumal die zwar in VBA geschrieben waren, aber das eher nur am Rande.)

Meine Versuche über:


private void [tt][color]InitializeValues()[/color][/tt]
        {
            if(txtBuchpreis.Text != "" || cmbBuchMenge.Text != "")
            {
                float Gesamt = float.Parse(txtBuchpreis.Text) * float.Parse(cmbBuchMenge.SelectedIndex.Text);
                Gesamt = float.Parse(lblGesamtpreis.Text);
            }
        }

Falls das Thema schon gibt, bitte kurze Rückmeldung, da ich es noch nicht hier oder anderswo gefunden habe. Naja Gefunden habe ich zu dem Thema zwar schon einiges, aber nicht zu dem Konkreten Problem was ich habe.
Könnte zwar auch am Parsing liegen, aber das bezweifel ich.

Wäre super für eine geeignete Schützenhilfe.

Mfg

WilliamDexter
private Nachricht | Beiträge des Benutzers
Papst
myCSharp.de - Experte



Dabei seit:
Beiträge: 394
Herkunft: Kassel

beantworten | zitieren | melden

Wann wird denn deine InitializeValues Methode aufgerufen?
Schau mit dem Debugger, was in den einzelnen Variablen steht.

P.S.: das wird knallen, wenn keine Zahl eingetragen ist.
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4184

beantworten | zitieren | melden

Wenn du den berechneten Wert ausgeben möchtest, dann mußt du den Text setzen (nicht parsen):


lblGesamtpreis.Text = Gesamt.ToString();
Das sind aber absolute Grundlagen.

PS: Und Papst hat Recht - du solltest TryParse verwenden, damit keine Exception deine Anwendung beendet, wenn der Text nicht als Zahl interpretiert werden kann.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Th69 am .
private Nachricht | Beiträge des Benutzers
WilliamDexter
myCSharp.de - Member



Dabei seit:
Beiträge: 5

Themenstarter:

beantworten | zitieren | melden

Die steht im public ProductScreen() {}
Also sobald das Fenster geladen ist und ich was eintragen kann, soll es halt auch berechnet werden können, unabhängig ob ich ein neues Produkt hinzufüge oder nicht, zumal ich mit dem If-Statement das ja durchaus absicher.

.... Es tut sich irgendwie gar nischt.
private Nachricht | Beiträge des Benutzers
Jompikumpi
myCSharp.de - Member



Dabei seit:
Beiträge: 36

beantworten | zitieren | melden


Einfach in der Methode einen Breakpoint setzen… da gibt es kein „Es tut sich irgendwie gar nischt.“
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Jompikumpi am .
private Nachricht | Beiträge des Benutzers
WilliamDexter
myCSharp.de - Member



Dabei seit:
Beiträge: 5

Themenstarter:

beantworten | zitieren | melden

haha, glaub mir das ist mir klar, dass das Gruindlagen sind. Nur Theorie und Praxis sind teilweise zwei Paar Schuhe.

Das setzen funktioniert ja eben nicht. Ich bekomme die Werte ja als string. Die muss ich ja zuerst Konvertieren, damit ich sie berechnen kann.
Und da ist der springende Punkt.
Ohne Konvertierung bekomme ich die Werte nicht berechnet bzw ausgegeben, oder kannst du Textzeichen rechnen?. Oder reden wir aneinander vorbei?
private Nachricht | Beiträge des Benutzers
Jompikumpi
myCSharp.de - Member



Dabei seit:
Beiträge: 36

beantworten | zitieren | melden

Wie schon von Th69 geschrieben, du setzt nirgends den Inhalt deines Textfeldes. Deine Variable „Gesamt“ existiert nur im Bereich deiner Methode, die kannst du nirgendwo anders auslesen.
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4184

beantworten | zitieren | melden

Du sollst nur Zeile 6 aus deinem Code mit meiner Zeile ersetzen...

PS: Und bevor du damit eine Datenbankanwendung entwickelst, solltest du auf jeden Fall vorher [Artikel] Drei-Schichten-Architektur durchlesen und anwenden.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Th69 am .
private Nachricht | Beiträge des Benutzers
WilliamDexter
myCSharp.de - Member



Dabei seit:
Beiträge: 5

Themenstarter:

Format Exception

beantworten | zitieren | melden

ja das habe ich doch auch bereits gemacht. es hat bis heute alles nichts gebracht. Es kam immer wieder eine Format Exception...

Aber ich habe jetzt eine alternative Lösung gefunden.


private void btnPreisBerechnen_Click(object sender, EventArgs e) 
        {
            double a = Convert.ToDouble(txtBuchpreis.Text);
            double b = Convert.ToDouble(cmbBuchMenge.Text);
            double gesamt = a * b;
            txtGesamtPreis.Text = gesamt.ToString();
        }


Das funktioniert, über einen button, den man dann demensprechen klicken muss, wenn man den Preis berechnen will.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von WilliamDexter am .

Moderationshinweis von Abt (21.08.2021 - 13:50:23):

Bitte [Hinweis] Wie poste ich richtig? beachten und selbst die Code Tags setzen.

private Nachricht | Beiträge des Benutzers
Papst
myCSharp.de - Experte



Dabei seit:
Beiträge: 394
Herkunft: Kassel

beantworten | zitieren | melden

Dann ist dein Problem wohl, dass dein Code gar nicht aufgerufen wurde.
Das hättest du mit dem Debugger und einem Breakpoint herausgefunden (war das dass „passiert nichts“?).

Um 8m gleichen Kontext zu bleiben: du müsstest das richtige Event von deinen Uli Elementen abonnieren und dort deinen Code auswerten.

Zwei Tipps:
Auch Convert.ToDouble (Api-Docs) wirft eine exception , wenn keine lesbare Zahl eingegeben wird. Convert ist in dem Kontext nicht die korrekte Klasse, nutze besser double.TryParse (Api-Docs).

Verwende Databinding, das wirkt erst einmal komplexer, nimmt dir aber später viel Arbeit ab!
private Nachricht | Beiträge des Benutzers
WilliamDexter
myCSharp.de - Member



Dabei seit:
Beiträge: 5

Themenstarter:

beantworten | zitieren | melden

Debugt habe ich es ja auch, mehrfach. Im Lokalfenster habe ich lediglich die normalen Werte gesehen... es wurden aber keine Variablen mit den Werten aufgelistet.

Danach habe ich es ja auch wie du sagtest, mit Breakpoints versucht. Den Fehler dort abgefangen wo er war. Nur wenn die Exception mir zwar was sagt, dass da ein Fehler ist, hat sie mir ja nicht gezeigt von welchem Code es verursacht wird.

Ich habe inzwischen die Datenbank nochmal neu gemacht, da das ständige hin und her wechseln der Datentypen, die Datenbank nicht so sehr gemocht hat.

Ist ja auch eine eher kleine. Habe das jetzt nochmal neu aufgesetzt. Es fehlten noch einige Verweise und using-Direktive. Also bei den Daten an sich gibts jetzt keine Konvertierungsprobleme mehr, da ich ja im Lokalfenster die Daten aufgelistet bekomme.

Jetzt kommt bisher noch den Fehler bei der SQLCommand.ExecuteNonQuery();

Fehler
System.Data.SqlClient.SqlException: "Error converting data type varchar to numeric".


Jetzt ist es so ich habe aber im Lokalfenster alle Variablen, die aufgenommen werden. Von Artikelnummer, Artikelname, Artikelmenge, Artikelpreis, etc.
Auch die query Line = "insert into BuecherTb values("......."), hat alle Daten die ich in die Textboxen/Comboboxen eingetragen habe, aufgenommen.

In meiner Datenbank habe ich folgende Daten:

CREATE TABLE [dbo].[BuecherTb] (
    [artikelNummer]      BIGINT       NOT NULL,
    [artikelName]        VARCHAR (50) NOT NULL,
    [artikelAutor]       VARCHAR (50) NOT NULL,
    [artikelBuchseiten]  INT          NOT NULL,
    [artikelGenre]       VARCHAR (50) NOT NULL,
    [artikelCover]       VARCHAR (50) NOT NULL,
    [artikelMenge]       INT          NOT NULL,
    [artikelPreis]       NUMERIC (18) NOT NULL,
    [artikelGesamtpreis] NUMERIC (18) NOT NULL,
    PRIMARY KEY CLUSTERED ([artikelNummer] ASC)
);



Jetzt wüsste ich eigentlich gerne, wo da mein Fehler liegt. Denn das möchte ich gerne lösen. Ich bin zwar immer noch ein Anfänger, aber wie soll man Fehler finden, wenn man nicht weiß wo man suchen soll. Sonst wäre ich nicht hier in diesem Forum, um zu fragen.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16152

beantworten | zitieren | melden

Kannst Du Dich bitte an [Hinweis] Wie poste ich richtig? orientieren und Code / SQL in Zukunft selbst in die entsprechenden Code Tags packen?
Niemand mag Plain Text lesen und ich mag nich dauernd Beiträge editieren :-)
Danke Dir..
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4184

beantworten | zitieren | melden

Zitat von WilliamDexter
Danach habe ich es ja auch wie du sagtest, mit Breakpoints versucht. Den Fehler dort abgefangen wo er war. Nur wenn die Exception mir zwar was sagt, dass da ein Fehler ist, hat sie mir ja nicht gezeigt von welchem Code es verursacht wird.
Dafür gibt es den Stack-Trace (auf deutsch: Aufrufliste): Anzeigen der Aufrufliste

Bei Datenbankenzugriffen solltest du Datenbankparameter benutzen: [Artikelserie] SQL: Parameter von Befehlen
private Nachricht | Beiträge des Benutzers