2010-09-02 95 views
1

我不知道爲什麼我不能訪問是小組裏我的標籤控制面板裏面DataList控件ASP.NET訪問Web控制

 
<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> 

但是當我試圖使用「LBL」 Page_Load,它似乎無法找到控件?你能幫我麼?

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

該代碼返回未將對象引用設置爲對象的實例。

在此先感謝

更新:

 
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 

這到底是什麼回事呢?!

+0

panelPostDetails是否存在? ItemTemplate中的面板元素? – loviji 2010-09-02 11:27:08

+2

發佈標記 - 可能是你錯過了明顯的東西。 – RPM1984 2010-09-02 11:28:26

+0

@loviji - yes panelPostDetails存在,它在ItemTemplate中。 – jaysonragasa 2010-09-02 12:01:33

回答

1

通常,您可以在運行時通過處理DataList的ItemCreated或ItemDataBound事件來訪問像這樣的控件。下面是一個示例事件處理程序:

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; 
    } 
} 

線你的事件處理程序是這樣的:

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

該標籤位於面板內部,面板位於DataList'ItemTemplate內部。 – jaysonragasa 2010-09-02 12:02:44

+0

我已更新代碼以匹配您發佈的示例。 – Peter 2010-09-02 12:11:17

+0

對不起,彼得,但仍然無法正常工作。我已經更新了代碼。 – jaysonragasa 2010-09-02 12:15:33

0

@彼得的代碼必須工作。

你也可以試試這個:

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

} 

,並把斷點wath到st。在我的情況下,我收到了lblMorePictures的文本。