Asp.net 如何获取对中继器内创建的控件的引用?
我在中继器中有一个名为thumbviewer的控件。我想在中设置它的imageurl 代码。目前,它是在aspx中完成的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">
<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;