簡體   English   中英

在asp.net轉發器中找不到控件?

[英]Can't find control within asp.net repeater?

我在下面有以下轉發器,我試圖在后面的代碼中找到lblA並且它失敗了。 標記下方是我的嘗試:

<asp:Repeater ID="rptDetails" runat="server">
    <HeaderTemplate>
        <table>
    </HeaderTemplate>
    <ItemTemplate>
        <tr>
            <td><strong>A:</strong></td>
            <td><asp:Label ID="lblA" runat="server"></asp:Label>
            </td>
        </tr>
    </ItemTemplate>
</asp:Repeater>
</table>

首先我試過,

Label lblA = (Label)rptDetails.FindControl("lblA");

但是lblA是空的

然后我試過,

Label lblA = (Label)rptDetails.Items[0].FindControl("lblA");

但是物品是0,即使m轉發器包含1個itemtemplate

你需要設置屬性OnItemDataBound="myFunction"

然后在您的代碼中執行以下操作

void myFunction(object sender, RepeaterItemEventArgs e)
{
   Label lblA = (Label)e.Item.FindControl("lblA");
}

順便提一下,您可以對嵌套轉發器使用這種完全相同的方法。 IE:

<asp:Repeater ID="outerRepeater" runat="server" OnItemDataBound="outerFunction">
<ItemTemplate>
   <asp:Repeater ID="innerRepeater" runat="server" OnItemDataBound="innerFunction">
   <ItemTemplate><asp:Label ID="myLabel" runat="server" /></ItemTemplate>
   </asp:Repeater>
</ItemTemplate>
</asp:Repeater>

然后在你的代碼中:

void outerFunction(object sender, RepeaterItemEventArgs e)
{
   Repeater innerRepeater = (Repeater)e.Item.FindControl("innerRepeater");
   innerRepeater.DataSource = ... // Some data source
   innerRepeater.DataBind();
}
void innerFunction(object sender, RepeaterItemEventArgs e)
{
   Label myLabel = (Label)e.Item.FindControl("myLabel");
}

我經常看到人們在內部轉發器上手動綁定物品,但他們並沒有意識到他們為自己制造物品有多困難。

我剛遇到同樣的問題。

我們在循環項目時缺少項目類型 轉發器中的第一個項目是標題 ,標題沒有我們正在尋找的asp元素。

嘗試這個:

if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {Label lblA = (Label)rptDetails.Items[0].FindControl("lblA");}

VB.net的代碼

    Protected Sub rptDetails_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles rptDetails.ItemDataBound    
      If e.Item.ItemType = ListItemType.AlternatingItem Or e.Item.ItemType = ListItemType.Item Then
        Dim lblA As Label = CType(e.Item.FindControl("lblA"), Label)
        lblA.Text = "Found it!"
      End If
    End Sub

你應該先綁定。
例如)

rptDetails.DataSource = dataSet.Tables["Order"];

rptDetails.DataBind();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM