Daten werden nicht an Textbox übergeben



  • Hallo,

    auf meiner Form 1 wähle ich einen Datensatz eindeutig über ID aus.
    Nun sollen diese Daten auf einer Form 2 in Label und Textboxen angezeigt werden.

    D.h. ich übergebe die ID an Form 2 und mache ein SELECT Statement um an die Daten zu kommen.

    Nun möchte ich die Daten anzeigen lassen:

    ...
    if (dr.IsDBNull(3) == true)
                        {
                            lblArt.Text = "";
                        }
                        else
                        {
                            lblArt.Text = dr.GetString(3);
                        }
    
                        if (dr.IsDBNull(4) == true)
                        {
                            txtFehler.Text = "";
                        }
                        else
                        {
                            txtFehler.Text = dr.GetString(4);
                        }
    ...
    

    Die Daten werden auch korrekt in das Label geschrieben, die Textbox bleibt jedoch immer leer. Warum?
    Daten enthält nämlich auch dr.GetString(4) -> wenn ich dies über eine MessageBox ausgeben lasse, werden die korrekten Daten angezeigt.

    Also zusammengefasst meine Frage: Warum erscheinen meine Daten nicht in der Textbox?



  • Welche Zeichen stehen denn genau in dem String drin?
    Wenn z.B. ein '\n' am Anfang des Strings steht, dann wird die (einzeilige) TextBox geleert.
    Laß dir mal im Debugger den Wert von

    string text = dr.GetString(4);
    

    ausgeben.



  • Es ist unterschiedlich, was im String steht.
    Bei meinem Testdatensatz steht z.B. nur Fehlerursache drin.
    Dies wird vom Debugger (wie Du vorgeschlagen hast) auch richtig angezeigt.

    In ein Label kann ich das auch problemlos schreiben, aber eben nicht in die Textbox.



  • Kann es sein das du das den Part den du uns gezeigt hast in einer Schleife machst und er beim ersten durchgang vielleicht daten finden in den nachfolgenden aber in den if-zweig geht wo txtFehler auf "" gesetzt wird?



  • War auch anfangs mein Verdacht, aber die Schleife wird nur einmal durchlaufen. 😕



  • Mit Sicherheit? Weil das Verhalten ist sonst nicht wirklich erklärbar. Zeig mal die Schleife bitte.



  • private void Bearbeiten_Load(object sender, EventArgs e)
            {
                if (durchgelaufen == false)
                {
                    try
                    {
                        conn.Open();
                        MySqlCommand cmd = new MySqlCommand("SELECT Bericht, Seriennummer, Datum, Artikelnr, Fehler FROM berichte WHERE lfdNummer = " + this.nr + "", conn);
                        dr = cmd.ExecuteReader();
    
                        while (dr.Read())
                        {
    
                            if (dr.IsDBNull(0) == true)
                            {
                                txtBerichtnr.Text = "";
                            }
                            else
                            {
                                txtBerichtnr.Text = dr.GetString(0);
                            }
    
                            if (dr.IsDBNull(1) == true)
                            {
                                txtSeriennr.Text = "";
                            }
                            else
                            {
                                txtSeriennr.Text = dr.GetString(1);
                            }
    
                            if (dr.IsDBNull(2) == true)
                            {
                                dtpKalender.Text = System.DateTime.Now.ToString();
                            }
                            else
                            {
                                string strDatum = dr.GetString(2);
                                dtpKalender.Text = DateTime.ParseExact(strDatum, "dd.MM.yyyy hh:mm:ss", new CultureInfo("de-DE")).ToString("dd.MM.yyyy");
                            }
    
                            if (dr.IsDBNull(3) == true)
                            {
                                lblArtID.Text = "";
                            }
                            else
                            {
                                lblArtID.Text = dr.GetString(3);
                            }
    
                            if (dr.IsDBNull(4) == true)
                            {
                                txtFehler.Text = "";
                            }
                            else
                            {
                                txtFehler.Text = dr.GetString(4); ;
                            }
    }
    conn.Close();
    
    durchgelaufen = true;
    }
    catch (Exception ex)
    {
    MessageBox.Show(ex.Message);
    }
    }
    


  • Rufst du Invalidate() auf?



  • Rufst du Invalidate() auf?

    Nein



  • Hast du vllt. aus Versehen im Designer eine zweite TextBox über deine TextBox "txtFehler" gelegt, d.h. du sprichst die falsche an?

    Ansonsten teste es mal mit einer anderen TextBox aus...



  • Das hatte ich mir auch schon überlegt, da ich dies von einer anderen Form kopiert habe.

    Aber wenn ich einfach eine neue Textbox erstelle und versuche zu füllen klappt es auch nicht.

    Selbst hier wird nichts gefüllt :

    if (dr.IsDBNull(4) == true)
                            {
                                textBox1.Text = "leer";
                            }
                            else
                            {
                                textBox1.Text = "gefüllt";
                            }
    

    Kann es irgendwie an den Einstellungen an meiner Form liegen?



  • Weberknecht schrieb:

    Rufst du Invalidate() auf?

    Nein

    Hast du mal versucht, Invalidate() NACH dem Füllen deiner Form aufzurufen?



  • Ich habe Invalidate() nun nach dem Füllen aufgerufen (am Ende mit finally, dass es nach dem Füllen ist)
    Es ändert sich aber nichts, d.h. immer noch ins in der Textbox.

    Kann es sonst noch damit zusammen hängen, dass ich ein Aufruf von einer anderen Form aus mache?

    Aufruf auf Form 1:

    private void btnBearbeiten_Click(object sender, EventArgs e)
            {
                try
                {
                    int c = dgvEingetrageneBerichte.CurrentRow.Index;
    
                    BerichteBearbeiten bearb = new BerichteBearbeiten();
                    bearb.Nr = Convert.ToInt16(dgvEingetrageneBerichte[16, c].Value.ToString());
                    bearb.Show();
    
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
    


  • Nimm mal bitte das Activated Event anstatt das Load Event, kann sein das die Controls noch nich komplett durchgeladen sind. Hab den LifeCycle grad nich komplett im Kopf.



  • Leider auch ohne Erfolg ... 😞

    Das "komische" daran ist, dass ich den Teil einmal als separates Programm hatte und nun in ein größeres einbauen möchte.
    Daher habe ich einfach alles von meinem ersten Projekt kopiert und beim neuen Projekt eingefügt.

    Eigentlich kann da doch nichts schief gehen? 😕
    Es läuft ja auch alles, bis auf das Füllen der Textboxen (diese brauch ich aber, wenn Änderungen gemacht werden sollen)



  • Werden die Texte in den anderen beiden TextBoxen 'txtBerichtnr' und 'txtSeriennr' denn richtig angezeigt? (Sehr eigenartig ist aber, daß selbst eine neue TextBox anscheinend nichts anzeigt!?).
    Ansonsten zeig mal den Ausschnitt aus der Form.Designer.cs, wo die Eigenschaften der 'txtFehler' gesetzt werden.

    P.S: Deine Abfragen auf "== true/false" sind unnötig. Besser ist

    if (!durchgelaufen)
    {
      if (dr.IsDBNull(0))
      {
    
      }
    }
    


  • Nein, es wird in keiner Textbox etwas angezeigt

    Danke für den Tipp!

    Anbei der Code aus dem Designer:

    // txtFehler
    // 
    this.txtFehler.Location = new System.Drawing.Point(141, 235);
    this.txtFehler.Multiline = true;
    this.txtFehler.Name = "txtFehlerursache";
    this.txtFehler.Size = new System.Drawing.Size(333, 55);
    this.txtFehler.TabIndex = 31;
    


  • Mal ganz blöd: Textfarbe im Projekt zufällig verändert?

    Da es aus einem anderen Programm stammt: namespace angepasst?



  • Nein, leider auch nicht. 😞
    Textfarbe ist schwarz und namespace hab ich alle übernommen.

    Hab versucht eine einfache Methode nur auf der Form zu machen, geht aber auch nicht ... also Textbox bleibt leer.

    private void button1_Click(object sender, EventArgs e)
            {
                textBox2.Text = "Test";
            }
    

    Nur wenn ich "hart" über die Entwurfsansicht Text eintrage, wird dieser auch sichtbar.



  • Ok also ich bin noch der Meinung das die Schleife doch mehr als einmal läuft und dir das wieder leer macht. Anderer Versuch, setz mal ein komplett neues Projekt auf, mit nem Form und einer Textbox und versuch diese Textbox zu füllen.
    Langsam gehen mir die Ideen aus 😞


Anmelden zum Antworten