2009-09-23 5 views
1

J'ai un contrôle Web (ascx). Ce contrôle a certaines connexions de base de données qui effectuent des sélections basées sur une variable membre (par exemple, montre des détails basés sur un certain ID de base de données). Ce qui fonctionne: Je peux ajouter le contrôle Web à une page dans le concepteur, définissez la variable membre représentant l'ID dans la variable Page_Load. Ce qui ne fonctionne pas: J'essaie d'ajouter le contrôle Web (plusieurs, en fait) à un panneau pendant le Load Load. Lorsque je fais cela, les contrôles SqlDataSource sur le web sont null.L'ajout dynamique de contrôle Web laisse SqlDataSource être nul

Voici comment j'essaie d'ajouter les contrôles Web.

foreach (DataRow dr in dv.Table.Rows) 
{ 
    Label header = new Label(); 
    header.Text = "Blah blah blah"; 
    Panel1.Controls.Add(header); 
    DetailsControl widgetDetails = new DetailsControl(); 
    widgetDetails.WidgetID = (Int64)dr[1]; 
    Panel1.Controls.Add(widgetDetails); 
} 

C'est l'erreur que je reçois, ce qui vient de la DetailsControl.

Object reference not set to an instance of an object. 

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object. 

Source Error: 


Line 19:   protected void Page_Load(object sender, EventArgs e) 
Line 20:   { 
Line 21:    DataView dv = (DataView)SqlDataSourceFilter.Select(DataSourceSelectArguments.Empty); 

EDIT: En fait, il semble que tous les contrôles au sein de l'DetailsControl sont nuls, mais seulement hwen ajouté dynamiquement. Je dois devoir appeler une fonction pour déclencher leur initialisation.

Répondre

1

Un tir, puisque je n'ai pas accès à votre code source ...

Mais peut-être vous n'avez pas correctement construit vos objets? Où l'objet SqlDataSourceFilter est-il construit? Méthode d'initialisation? Constructeur de classe?

+0

J'ai traîné la source de données dans le concepteur. Je ne peux pas réellement trouver où dans le code la source de données est construite (ASP.NET le fait probablement quand il analyse la page aspx?) – Nick

1

Où faites-vous: foreach (DataRow dr dans dv.Table.Rows)? Essayez de déplacer cela vers le Page_Init, cela devrait aider.

+0

Essayé ceci, en vain. – Nick