Ich bin ein User Control für jeden Datensatz Hinzufügen gezogen in einem Datenlesegerät auf, hier ist die grundlegende Schleife:Failing Kontrollen zu einer Seite hinzuzufügen dynamisch
while (dr.Read())
{
ImageSelect imgSel = new ImageSelect(dr["Name"].ToString());
myPanel.Controls.Add(imgSel);
}
Das Problem ist, dass es keine Kontrollen hinzugefügt Die Seite, ich überprüfe die HTML-Ausgabe und dort ist mein Panel, mit nichts drin.
Ich trat sogar durch den Code im Debugger, und verifiziert, dass myPanel.Controls ein Steuerelement in jeder Schleife hinzugefügt, mit der Zählung ist 6, keine Fehler, aber dann werden sie nicht auf der Seite angezeigt.
Ich habe den obigen Code in den Page_Init und Page_Load -Ereignissen ausgeführt, beide mit dem gleichen Ergebnis.
EDIT: Ok, damit ich zur Verwendung von Loadcontrol eingeschaltet haben („.... ascx“) meine Steuer Instanz zu erhalten, die jetzt funktioniert. Aber ursprünglich habe ich auch Daten über den Controls-Konstruktor übergeben. Ist das noch möglich oder muss ich sie nur über get/set setzen?
EDIT 2: Dank Freddy für den Hinweis auf, dass die Loadcontrol eine Überlastung, wo Sie in Konstruktor params siehe akzeptierte Antwort passieren können.
EDIT 3: Nach dem Versuch diese Methode sowohl mit als auch ohne den Konstruktor. Ich habe es besser gefunden, Setter nur für alle Eigenschaften zu verwenden, die das Steuerelement haben soll, anstatt zu versuchen, das übergebene Objektarray für meinen Konstruktor zu verwenden.
@Neil ist es möglich, veröffentlichte ein Update auf meine Antwort. – eglasius
Bedenken Sie, dass diese Überladung nicht auf die gleiche Weise funktioniert wie die andere, daher können Sie Null-Referenz-Ausnahmen erhalten, wenn Sie Designer-Elemente dort haben. Es gibt eine Erweiterungsmethode in meinem Blog, um es bei Bedarf zu umgehen. –
Nachdem ich die bestandenen Params ausprobiert habe, habe ich entschieden, dass Freddies Ratschläge zur Verwendung von Settern ein besserer Weg sind. –