Abfrage von Dynamisch erstellen Textboxen



  • Hey,

    Ich habe eine Frage und zwar es geht um Folgendes...

    Ich frage mit meinem Programm eine Mysql Datenbank ab. Und erstelle anhand der Informationen die ich dort auslese die Passenden Textboxen und plaziere sie in der Form. Mein Problem ist jetzt ich weiß nicht weiter... Ich möchte die Eingaben die der Nutzer am Ende in den Textboxen macht nutzen um Datenbank Einträge zu machen. Es soll also am ende ein Programm werden das dynamisch die Datenbank ausliest die Boxen passend zu der Datenbank erstellt und dann Einträge in die Datenbank macht.

    try
                    {
                        MySqlDataReader Reader = cmd.ExecuteReader();
                        while (Reader.Read())
                        {
                            adapter.Fill(data); //Erforderlichen Daten auslesen
                        }
                        Reader.Close();
    
                        foreach (DataRow dtRow in data.Rows) //Spalten Zählen
                        {
                            rowsWhile++;
    
                            string name = data.Rows[rowsWhile].ItemArray[0].ToString(); // Versuch die Textboxen nach den Spalten zu benennen.
    
                            TextBox textBox = new TextBox();
                            Label label = new Label();
                            label.Location = new Point(label_x, label_y);
                            textBox.Location = new Point(textbox_x, textbox_y);
                            label.ForeColor = Color.White;
                            this.Controls.Add(textBox);
                            this.Controls.Add(label);
                            label.Text = data.Rows[rowsWhile].ItemArray[0].ToString(); // Überschriften für die Boxen
                            textbox_y = textbox_y + 42;
                            label_y = label_y + 42;
    
                            if (rowsWhile == 13 || rowsWhile == 27 || rowsWhile == 41 || rowsWhile == 55 || rowsWhile == 69)
                            {
                                textbox_x = textbox_x + 150;
                                textbox_y = 20;
                                label_x = label_x + 150;
                                label_y = 0;
                            }
                        }
                    }
    

    So sieht das ganze dann aus.

    Ich hoffe ich habe das verständlich Formuliert. Hoffe mir kann jemand helfen.



  • Hi,
    was genau ist denn das Problem? Der nicht vorhandene eventhandler für die textboxen?



  • Hallo,

    der kürzeste und einfachste Weg wäre wohl den Spaltennamen der Datenbank im Tag des Controls zu hinterlegen.

    foreach(var column in datatable.Columns)
    {
         TextBox tbx = new TextBox();
         // Positionierung und Label
         // ...
         tbx.Tag = column.ColumnName;
    
         // zur Optimierung verwenden wir eine Liste mit den Eingabetextboxen
         myTextboxes.Add(tbx);
    }
    

    Nachdem die Eingaben durchgeführt wurden, wird durch den Nutzer "Speichern" geklickt und du gehst einfach alle Textboxen durch und baust dir deine Parameter für das Insert / Update auf.

    List<KeyValuePair<string, string>> parameterInputs = new List<KeyValuePair<string, string>>();
    
    foreach(TextBox tbx in myTextboxes)
    {
         parameterInputs.Add(new KeyValuePair<string, string>((string)tbx.Tag, tbx.Text));
    }
    
    myDataLayer.Update(parameterInputs);
    

    Und im Datalayer erstellst du dann das entsprechende Statement und füllst die Parameter.

    public void Update(List<KeyValuePair<string, string>> parameterInputs)
    {
        String query = "UPDATE tabelle Set ";
        List<IDbParameter> parameters = new List<IDbParameter>();
    
        foreach(var param in parameters)
        {
           query += String.Format("{0} = @{0}, param.Key);
           parameters.Add(...);
        }
    }
    

    Alles was ich hier jetzt nicht vollständig ausgefüllt habe findest du wenn du anständig suchst allein.



  • Okay das mit dem Tag kann ich mir erklären damit ich die Boxen später identifizieren kann.

    Nur dann wird es für mich komisch.

    foreach(TextBox tbx in myTextboxes) 
    { 
         parameterInputs.Add(new KeyValuePair<string, string>((string)tbx.Tag, tbx.Text)); 
    }
    

    Dieser Teil hier was genau passiert da? Es ist eine schleife für jede Textbox ist klar. Nur was genau tut er da?

    Und die restlichen schritte sind mir auch nicht ganz einleuchtend.

    sorry das ich so doof frage 😞



  • Siehe meinen letzten Kommentar. - Alles was du in meinem Beitrag nicht findest, findest du durch Verwendung der Suchfunktion.

    Die Schleife im 2. Codebeispiel dient nur dazu, die Werte der Textboxen in eine geeignete Struktur zu bringen um diese im DataLayer den Command.Parametern zuzuordnen.


Log in to reply