Durchlaufen Steuerelemente in einem panel C#

Habe ich gesehen, dass viele andere mit ähnlichen Problemen, aber ich kann nicht finden den Fehler in meiner Logik hier. Jegliche Hilfe würde sehr geschätzt werden.

Ich habe ein Panel, welches ich Hinzugefügt haben zahlreiche label und textbox-Steuerelemente zu, dh:

myPanel.Controls.Add(txtBox);

Diese Steuerelemente werden erstellt und Hinzugefügt, in der eine Methode aufgerufen, vor der iteration-Methode.

Möchte ich Durchlaufen jedes Textfeld und verwenden Sie die Text-Eigenschaft als parameter in einer anderen Methode, aber ich bin nicht mit jeder Glück. Hier ist mein Versuch, zu iterieren:

public void updateQuestions()
{
    try
    {
        foreach (Control c in editQuestionsPanel.Controls)
        {
            if (c is TextBox)
            {
                TextBox questionTextBox = (TextBox)c;

                string question = questionTextBox.Text;

                writeNewQuestionToTblQuestions(question);
            }
        }
    }
    catch (Exception err)
    {
        Console.WriteLine(err.Message);
    }
}

Das problem, das ich habe ist, dass die Steuerelemente nicht in der Systemsteuerung, wenn ich ankomme bei diesem updateQuestions () - Methode. Hier ist der Prozess beteiligt:

Einen commandButton geklickt wird und die Fragen werden Lesen aus einer DB, für jede Frage eine Methode aufgerufen wird, die fügt 2 labels und ein Textfeld editQuestionsPanel.Controls. Dieses panel ist in einem Platzhalter, die dann sichtbar gemacht.

Wenn eine Schaltfläche innerhalb des Platzhalters klicken, wird die updateQuestions () - Methode aufgerufen, und die editQuestionsPanel.Controls.Count = 1. Da sind ca 12 Fragen in der DB-es sollte um die 36. Die ein Steuerelement innerhalb des Panel-Typ:

System.Web.UI.LiteralControl  

Es enthält keine Bedienelemente.

Ich bin sicher, dass irgendwo im Lebenszyklus der Panel-Steuerelemente werden deaktiviert, aber ich weiß nicht, wie Sie Schritt durch den Lebenszyklus. Ich habe eine Page_load-Methode, die aufgerufen wird, sobald auf eine Schaltfläche geklickt wird, aber sobald die-Taste, die Anrufe updateQuestions() geklickt wird die editQuestionsPanel.Controls.Zählen ist schon wieder auf 1, damit es geklärt werden muss, bevor diese, aber ich weiß nicht, wie diese zu beheben...

Jede Hilfe, die Sie geben können mir helfen, dieses Problem lösen wäre sehr dankbar - Ihr bringt mich um!

  • Was ist es, das nicht funktioniert?
  • Dein code funktioniert bei mir. Versuchen Sie, erstellen eine app, die macht genau das, was Sie skizziert haben, und wenn es nicht funktioniert, poste die ganze Sache.
  • Als seitliche Anmerkung, die Sie verwenden sollten as statt is hier. Jetzt sind Sie Gießen die variable c zweimal. Versuchen Sie TextBox questionTextBox = c as TextBox; if (questionTextBox != null) { ... } Dadurch vermeiden Sie eine unnötige Besetzung.
  • Meine Wette ist, dass Sie einen Lebenszyklus-problem, oder dass myPanel ist nicht editQuestionsPanel. Zu diagnostizieren lifecycle-Probleme, debugger und prüfen Sie die Steuerelemente-Sammlung auf Ihrem panel an verschiedenen Lebenszyklus-Ereignisse (OnInit, OnLoad, OnPreRender, OnRender -, event-Handler, etc.), Besondere Aufmerksamkeit zu widmen, wenn die controls-Auflistung wird gelöscht.
  • Ich denke, es ist ein life-cycle-problem, die Steuern zählen, ist 37, nachdem Sie Hinzugefügt wurden. Wie kann ich Schritt für Schritt durch die Stufen.. Wie setze ich einen Haltepunkt am Anfang der OnInit-und step-thru, um zu sehen, wo wird es deaktiviert?
  • Wo sind Sie bei der Erstellung der Textfelder? Seite Laden? Auch, wo sind Sie zu Lesen versucht, Ihnen aus? Ein click-Ereignis?

InformationsquelleAutor Frank | 2010-08-26
Schreibe einen Kommentar