Asp.net 如何获取对中继器内创建的控件的引用?

Asp.net 如何获取对中继器内创建的控件的引用?,asp.net,vb.net,repeater,Asp.net,Vb.net,Repeater,我在中继器中有一个名为thumbviewer的控件。我想在中设置它的imageurl 代码。目前,它是在aspx中完成的 <asp:Repeater ID="Repeater1" runat="server" > <ItemTemplate> <span style="padding:2px 10px 2px 10px">

我在中继器中有一个名为thumbviewer的控件。我想在中设置它的imageurl 代码。目前,它是在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?

您需要找到中继器,然后查看控件:

我在这里做了类似的事情,将一个控件加载到中继器内的占位符中

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

您需要找到中继器,然后查看控件:

我在这里做了类似的事情,将一个控件加载到中继器内的占位符中

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

中继器有一个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;
    }
}
protectedvoid Repeater1\u ItemDataBound(对象发送方,RepeaterItemEventArgs e)
{
//确保我们只在项模板中查找控件
如果(e.Item.ItemType==ListItemType.Item)
{
ThumbViewer tv=(ThumbViewer)e.Item.FindControl(“Th1”);
tv.ImageUrl=“images/”+(()e.Item.DataItem).Name;
}
}
这是访问绑定到中继器的数据的最传统的方法。伊姆霍


HTH

您的中继器有一个OnItemData绑定事件

<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;
    }
}
protectedvoid Repeater1\u ItemDataBound(对象发送方,RepeaterItemEventArgs e)
{
//确保我们只在项模板中查找控件
如果(e.Item.ItemType==ListItemType.Item)
{
ThumbViewer tv=(ThumbViewer)e.Item.FindControl(“Th1”);
tv.ImageUrl=“images/”+(()e.Item.DataItem).Name;
}
}
这是访问绑定到中继器的数据的最传统的方法。伊姆霍

在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(或类似的东西)会得到它的

干杯

T

在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(或类似的东西)会得到它的

干杯


T

伙计,你需要检查FindControl()方法FindControl()不是递归的吗?有点贵。最好在下面建议的onitemdatabound事件解决方案中使用它。不,这不是递归的不幸…我认为你错了,@Gordon。。。FindControl()是递归的。如果你不相信我,请看Jeff帖子(Codinghoror)的评论。伙计,你需要检查FindControl()方法FindControl()不是递归的吗?有点贵。最好在下面建议的onitemdatabound事件解决方案中使用它。不,这不是递归的不幸…我认为你错了,@Gordon。。。FindControl()是递归的。如果你不相信我,请看杰夫的帖子(Codinghoror)上的评论!公平竞争,为null添加检查。这是一个很有用的练习,即使你是100%的控制者也会在那里!它将有效地检查控件是否存在,如果控件通过该id存在,即类型为“ThumbViewControl”或其他类型,那么这是一种一次两次检查。我真的很喜欢“as”:)snap!公平竞争,为null添加检查。这是一个很有用的练习,即使你是100%的控制者也会在那里!它将有效地检查控件是否存在,如果控件通过该id存在,即类型为“ThumbViewControl”或其他类型,那么这是一种一次两次检查。我确实喜欢“as”:)根据代码,我更新了我必须编写的内容,以代替您绑定的对象类型。请帮助我澄清一下,绑定到中继器的对象具有Name属性。当你投e的时候。对于所需类型的Item.DataItem对象,它应该如下所示:MyType mycoltype=(MyType)e.Item.DataItem;这是最基本的方法。但要缩短此代码,可以编写tv.ImageUrl=((MyType)e.Item.DataItem).Name;根据代码,我更新了我必须编写的内容,以代替您绑定的对象类型。请帮助我澄清一下,绑定到中继器的对象具有Name属性。当你投e的时候。对于所需类型的Item.DataItem对象,它应该如下所示:MyType mycoltype=(MyType)e.Item.DataItem;这是最基本的方法。但要缩短此代码,可以编写tv.ImageUrl=((MyType)e.Item.DataItem).Name;