如何获取对转发器内创建的控件的引用?

时间:2009-07-15 10:20:07

标签: asp.net vb.net repeater

我在转发器中有一个名为thumbviewer的控件。我想设置它的图像 码。目前它已经在aspx中完成了

<asp:Repeater ID="Repeater1" runat="server" >
                    <ItemTemplate>
                        <span style="padding:2px 10px 2px 10px">

                            <bri:ThumbViewer Id="Th1"  runat="server" ImageUrl='<%# Eval("Name", "images/{0}") %>' Height="100px" Width="100px"/>
                        </span>
                    </ItemTemplate>
                </asp:Repeater>

如何在代码中设置ImageUrl?

3 个答案:

答案 0 :(得分:6)

protected void rpter_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        ThumbViewControl control = e.Item.FindControl("Th1") as ThumbViewControl;
        if (control != null)
        {
           control.ImageUrl = "";
        }
    }
}

和aspx

<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="rpter_ItemDataBound" >
                    <ItemTemplate>
                        <span style="padding:2px 10px 2px 10px">

                            <bri:ThumbViewer Id="Th1"  runat="server" Height="100px" Width="100px"/>
                        </span>
                    </ItemTemplate>
</asp:Repeater>

我个人会这样做。

如果你想获取它的数据,那么我相信e.Item.DataItem(或类似的东西)得到它。

干杯,

Ť

答案 1 :(得分:2)

你的转发器有一个onitemdatabound事件。

<asp:Repeater ID="Repeater1" runat="server" onitemdatabound="Repeater1_ItemDataBound"></asp:Repeater>

在您的代码中,您可以拥有一个名为

的事件处理程序
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    // ensure that we only look in the item template for our control
    if(  e.Item.ItemType == ListItemType.Item)
    {
         ThumbViewer tv = (ThumbViewer)e.Item.FindControl("Th1");
         tv.ImageUrl = "images/"+((<The object type you are binding>)e.Item.DataItem).Name;
    }
}

这是访问绑定到转发器的数据的最正统方式。 IMHO

HTH

答案 2 :(得分:0)

您需要找到转发器,然后查看控件:

我在这里做了类似的事情并将控件加载到转发器内的占位符中..

        if (ResultRepeater != null && ResultRepeater.HasControls())
        {
            foreach (Control oControl in ResultRepeater.Controls)
            {
                if (oControl != null && oControl is RepeaterItem)
                {
                    PlaceHolder oSuggestMorePlaceholder = (PlaceHolder) oControl.FindControl("SuggestMorePlaceholder");

                    if (oSuggestMorePlaceholder != null)
                    {
                        SuggestMoreTabbedControl oTabbedControl = (SuggestMoreTabbedControl) Page.LoadControl("controls/SuggestMoreControl.ascx");
                        if (oTabbedControl != null)
                        {
                            oSuggestMorePlaceholder.Controls.Add(oTabbedControl);
                        }
                    }
                }
            }
        }