2009-02-23 6 views
2

J'ai un contrôle utilisateur (.ascx) dans mon projet que je suis d'ajouter à une page programme dans le gestionnaire d'événements Page_Load de la page, comme suit:Programmatically ajoutée de l'utilisateur ne crée pas son enfant contrôle

Controls.Add(new MyProject.Controls.ControlWidget()); 
Databind(); 

Lorsque j'essaie d'accéder aux contrôles enfants du contrôle depuis le contrôle lui-même, ils n'existent pas.

public override void DataBind() 
{ 
    myrepeater.DataSource = GetDataSource(); 
    // throws an exception because myrepeater is null 

    base.DataBind(); 
} 

Comment puis-je accéder aux contrôles enfants du contrôle utilisateur? J'ai essayé d'ajouter un appel à EnsureChildControls() à mon override DataBind() mais cela ne semble pas faire de différence.

Répondre

5

Vous devez utiliser LoadControl pour le charger, et pas seulement instancier la classe. LoadControl fait "magie" dans les coulisses pour tout relier et instancier le front-end.

+0

droit vous - merci! – kristian

0

EDIT: Je missunderstood votre question,

essayer d'ajouter votre UserControl à votre page:

UserControl uc = new UserControl(); 
uc.LoadControl(Server.MapPath("MyUserControl.ascx"); 
this.Controls.Add(uc); 
+0

Utilisez simplement LoadControl sur la page. – James

Questions connexes