2011-12-02 4 views
4

J'ai un problème avec mon contrôle utilisateur. A l'intérieur, j'ai un contrôle case à cocher. Je veux créer ce contrôle utilisateur à la volée et l'insérer dans le contrôle asp: table.ASP.NET UserControl - référence null?

 MyControl pp = new MyControl(); 

     pp.pageNameCb.Text = "lorem"; 

     TableCell tc = new TableCell(); 
     tc.Controls.Add(pp); 
     table.Rows[0].Cells.Add(tc); 

Mais, la pageNameCb est nulle, même si je crée son exemple à la main, rien ne s'affiche dans ma table. Pourquoi ?

Voici mon code:

<asp:View ID="new_role_view" runat="server"> 
     <asp:Table ID="table1" runat="server"> 
      <asp:TableRow ID="TableRow1" runat="server"> 
       <asp:TableCell ID="TableCell1" runat="server"> 

       </asp:TableCell> 
      </asp:TableRow> 
     </asp:Table> 
    </asp:View> 

Ensuite, si je change ce point de vue est actif, je crée mon contrôle:

 MyControl pp = new MyControl(); 
     table.Rows[0].Cells[0].Controls.Add(pp); 

le Page_Init de MyControl:

protected void Page_Init(object sender, EventArgs e) 
    { 
     if (pageNameCb == null) 
      pageNameCb = new CheckBox(); 
     pageNameCb.Text = "works"; 
    } 

et encore , rien ne montre

+0

procédé dans lequel de la page vous exécutez ce code? essayez également de définir un ID pour pp après l'avoir créé. –

+0

Obtenez-vous une exception? – atoMerz

+0

Vérifier le code HTML généré et voir si la case à cocher a vraiment été ajoutée dans le tableau ou non – Rahul

Répondre

0

Lorsque vous créez votre contrôle utilisateur instanciez-vous la case à cocher en même temps? Il sera nul à moins que la case à cocher ne soit créée à un moment donné. S'il s'agissait d'un contrôle personnalisé, vous le créeriez dans Control.CreateChildControls - car il s'agit peut-être d'un contrôle utilisateur dans le constructeur ou d'une méthode personnalisée - Init() ou quelque chose comme ça.

Aussi je voudrais créer le contrôle de l'utilisateur sur Page_Init puis ajouter à l'arbre de contrôle, sinon il ne participera pas à l'ViewState de la page.

0

Ceci est le code qui devrait fonctionner correctement si votre contrôle utilisateur est bien créé selon ASP.net Page Cycle.

Initialisez la case à cocher de l'événement Page_Init() du contrôle utilisateur si vous ajoutez cette case de manière dynamique. et fournir quelques ID à votre contrôle.

private Table CreateHtmlTable() 
     { 
      Table table = new Table(); 
      table.Rows.Add(new TableRow());   

      TableCell tc = new TableCell(); 
      MyControl pp = new MyControl(); 
      pp.ID = "SomeID"; 
      pp.pageNameCb.Text = "lorem"; 
      tc.Controls.Add(pp); 
      table.Rows[0].Cells.Add(tc); 

      return table; 
     } 

Ce qui est le code fonctionne bien pour moi ...

ASPxLabel lbl = new ASPxLabel(); 
lbl.ID = "lblTopicName"; 
lbl.Text = "TopicName"; 
table.Rows[0].Cells[0].Controls.Add(lbl); 
+0

J'ai modifié ma question, veuillez la vérifier – Tony