2010-09-02 4 views
1

ne sais pas pourquoi je ne peux pas accéder à mon contrôle Label qui était à l'intérieur du panneau et le panneau est à l'intérieur du DataListASP.NET Accès contrôle Web à l'intérieur contrôle DataList

 
<asp:DataList ID="DataList2" runat="server" DataSourceID="SqlDataSource1" Width="100%"> 
<ItemTemplate> 
    <table border="0" cellpadding="0" cellspacing="0" width="100%"> 
     <tr> 
      <!-- post details --> 
      <td style="width: 60%"> 
       <asp:Panel ID="panelPostDetails" runat="server" CssClass="postpage_details"> 
        <table border="0" cellpadding="5" cellspacing="0" width="100%"> 
         <tr> 
          <td colspan="2"><div class="postpage_header"><%# Eval("Heading") %></div></td> 
         </tr> 
         <tr> 
          <td> 
           <img src="picserver/posts/<%# Eval("ImagePath") %>/1.jpg" alt="preview" style="width: 240px;" /> 
           <div id="morepictures"> 
            <asp:Label ID="lblMorePictures" runat="server" /> 
           </div> 
          </td> 
          <td> 
           <div style="padding: 0px 5px 0px 5px;"> 
            <div> 
             more stuff here 
            </div> 
           </div> 
          </td> 
         </tr> 
        </table> 
       </asp:Panel> 

       <asp:RoundedCornersExtender ID="RoundedCornersExtender1" runat="server" 
        Radius="6" 
        Corners="All" 
        TargetControlID="panelPostDetails"></asp:RoundedCornersExtender> 
      </td> 
     </tr> 
    </table>  

</ItemTemplate> 
</asp:DataList> 

mais quand j'essayé d'utiliser « LBL » dans Page_Load, il semble qu'il ne peut pas trouver le contrôle? Pouvez-vous m'aider s'il vous plaît?

 
ItemDataBound and Page_Load event 
--------------------------------- 
Panel p = DataList2.FindControl("panelPostDetails") as Panel; 
Label l = p.FindControl("lblMorePictures") as Label; 
l.Text = code; 

ce code retourne référence d'objet non définie à une instance d'un objet.

Merci à l'avance

mise à jour:

 
ItemDataBound and Page_Load event 
--------------------------------- 
Panel p = DataList2.FindControl("panelPostDetails") as Panel; 
if(p==null) 
{ 
    System.Diagnostic.Debug.WriteLine("panel does not exist"); 
} 
else 
{ 
    System.Diagnostic.Debug.WriteLine("panel does exist"); 
} 

output: 
panel does not exist 

qu'est-ce qui se passe!?!

+0

panelPostDetails existe-t-il? est l'élément de panneau dans ItemTemplate? – loviji

+2

poster le balisage - les chances sont que vous avez manqué quelque chose d'évident. – RPM1984

+0

@loviji - oui le panelPostDetails existe et il est dans ItemTemplate. – jaysonragasa

Répondre

1

Généralement, vous accédez aux contrôles de ce type lors de l'exécution en gérant l'événement ItemCreated ou ItemDataBound de DataList. Voici un gestionnaire d'événements exemple:

protected void DataList2_ItemDataBound(object sender, DataListItemEventArgs e) { 
    if (e.Item.ItemType == ListItemType.Item) { 
     Label lbl = (Label)e.Item.FindControl("panelPostDetails").FindControl("lblMorePictures"); 
     lbl.Text = code; 
    } 
} 

Fil votre gestionnaire d'événements comme celui-ci:

<asp:DataList ID="DataList2" runat="server" OnItemDataBound="DataList2_ItemDataBound" ... 
+0

l'étiquette est à l'intérieur du panneau et le panneau est à l'intérieur du ItemTemplate 'DataList. – jaysonragasa

+0

J'ai mis à jour le code pour correspondre à l'échantillon que vous avez posté. – Peter

+0

désolé Peter, mais ne fonctionne toujours pas. J'ai mis à jour le code à nouveau. – jaysonragasa

0

@ code de Peter doit travailler.

vous pouvez aussi essayer ceci:

protected void DataList2_ItemDataBound(object sender, DataListItemEventArgs e) 
{ 
     string st= (e.Item.FindControl("lblMorePictures") as Label).Text; 

} 

et de mettre à Wath à point d'arrêt st. Dans mon cas, je reçois un texte de lblMorePictures.

Questions connexes