2013-12-19 152 views
0

您好我有一個DataList頁面:Asp.net訪問DataList控件

<asp:DataList ID="DataList1" runat="server" BackColor="White" Width="98%" HorizontalAlign="Center" CellPadding="7" > 
    <ItemTemplate> 
     <uc1:ShopLine id="ShopLine1" runat="server" DataItem='<%# Container.DataItem %>' 
             ShopListLineId='<%# DataBinder.Eval(Container.DataItem, "ShopListLineID") %>' 
             OnDataUpdated="ShopLine1_DataUpdated"> 
     </uc1:ShopLine> 
    </ItemTemplate> 
    <SeparatorStyle Width="1px" /> 
    <ItemStyle CssClass="listItem1" /> 
</asp:DataList> 

Shopline是一個ASCX文件。

我嘗試使用下面的代碼DataList控件來訪問每個項目:

foreach (DataListItem dli in DataList1.Items) 
      { 
       string productId = DataBinder.Eval(dli.DataItem, "ProductID").ToString(); 
       TextBox tb = (TextBox)dli.FindControl("QtyTextBox"); 
      } 

和dli.Dataitem是零和文本框爲空爲好,但在DataList acturally顯示項目和shopline.ascs確實有一個TeXtBox ID是「QtyTextBox」。

任何人都可以給我一個主意嗎?謝謝。

+1

凡你有這樣的代碼? – Adil

+0

你甚至可以放置這些代碼?在檢查dli.DataItem之前,通過使用快速手錶來檢查DataList1.Items中存在的項目和數量 –

回答

0

您需要確保您正在查看的項目是實際的數據項。使用此代碼,您在for循環來檢查你正在看一個實際的項目(而不是一個頁腳/頭/等):

if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
{ 

} 

另外,我覺得你需要先得到你的用戶控件。然後你可以在裏面找到東西。

你的最終產品將是這樣的:

foreach (DataListItem dli in DataList1.Items) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     string productId = DataBinder.Eval(dli.DataItem, "ProductID").ToString(); 

     // Find the UserControl that's in this DataListItem 
     ShopLine myShopLine = (ShopLine)dli.Findcontrol("ShopLine1"); 
     //Then extract the information you need from it 
     TextBox tb = (TextBox)myShopLine.FindControl("QtyTextBox"); 
    } 
} 
+0

是的,我發現它需要首先獲取UserControl,謝謝 – simoncat

+0

@simoncat優秀!我很高興能夠提供幫助。僅供參考 - 如果此答案解決了您的問題,則可以使用複選框將其「接受」。詳情請參閱[如何接受答案?](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235)。 – jadarnel27