Laden...

Controls dynamisch im Codebehind erstellen

Erstellt von Savage vor 14 Jahren Letzter Beitrag vor 14 Jahren 837 Views
S
Savage Themenstarter:in
100 Beiträge seit 2004
vor 14 Jahren
Controls dynamisch im Codebehind erstellen

Hi Leute,

ich erstelle Checkboxen im Code-Behind auf dieser Art:

CheckBox cb = new CheckBox();                
cb.Text = r.Rolename;
cb.ID = "role_" + r.ID;
cb.EnableViewState = true;                
myplaceholder.Controls.Add(cb);    

Nach dem Postback kann ich das Control aber nicht mehr ansprechen:
myplaceholder.Controls.count liefert immer 0

Was mache ich falsch? Oder sehe ich den Wald vor lauter Bäume nicht mehr?

1.433 Beiträge seit 2006
vor 14 Jahren

Tritt der Postback beim Selektieren einer Checkbox ein? Wenn ja solltest Du die Autopostback Eigenschaft auf false setzen. Ich denke mal dass nachdem selektieren und bei einem Postback die Controls nicht noch einmal generiert werden sodass MyContainer.Controls auch keine Controls enthält.


        protected void Page_Load(object sender, EventArgs e) {
            addControls();
        }

        private void addControls() {
            for(int i = 0; i < 10; i++) {
                CheckBox chKBox = new CheckBox();
                chKBox.ID = string.Format("CheckBox_{0}", i.ToString());
                chKBox.Text = "Role name";
                chKBox.AutoPostBack = false;
                this.form1.Controls.Add(chKBox);
            }
        }

Wenn Du dann die entsprechenden Checkboxen seletiert hast und deren Zustand, beispielsweise bei einem Button-Click Ereignis abfragen willst, dann kannst Du nur die Controls-Collection durchiterieren und abfragen ob das Control typeof(CheckBox) ist und dann den Zustand derer erfragen, oder mit JavaScript.

Grüsse
Daniel
Space Profile
Wer nicht fragt, der nicht gewinnt

3.003 Beiträge seit 2006
vor 14 Jahren

Genauer gesagt:

bei jedem PostBack wird ein neues Objekt der Klasse der Webseite erzeugt, das nichts vom vorherigen weiß. Dann werden wieder alle Methoden durchlaufen, alle Controls erzeugt und so weiter. Es ist sehr gut möglich, dass in deiner Abfrage des Controls nach dem PostBack das Control noch gar nicht erzeugt wurde.

ASP.NET Page Life Cycle

Prüf mal, ob die Reihenfolge bei dir so, wie sie ist, korrekt ist.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

S
Savage Themenstarter:in
100 Beiträge seit 2004
vor 14 Jahren

Dank euch beiden, euer Anstoß hat mich drauf gebracht!
Ich hab tatsächlich den Wald vor lauter Bäume nicht mehr gesehen.
Die Erzeugung der Checkboxen war in einer if(!IsPostBack) Abfrage… 50mal drübergelesen, nicht gesehen. peinlich

Thx 👍