假设转发器在下面创建了10个模板实例。然后,用户在第三个实例中单击了btnRemove
控件。
我如何才能访问转发器中专门设置的项目?
<asp:Repeater ID="rptItems" runat="server" >
<ItemTemplate>
<div class="lightShadowBox gradientGray">
<label class="labelSmallInline">Description: </label>
<%# DataBinder.Eval(Container.DataItem, "Description") %>
<label>Path:</label>
<%# DataBinder.Eval(Container.DataItem, "Path") %>
<asp:Button runat="server" ID="btnRemove" OnClick="click" Text="Remove" CssClass="standardButton"/>
</div>
</ItemTemplate>
</asp:Repeater>
答案 0 :(得分:4)
您应该使用btton的NamingContainer
属性来获取RepeaterItem
,然后您可以使用item.FindControl
来获取对其他控件的引用。
protected void click(object sender, EventArgs e)
{
Button btnRemove = (Button) sender;
RepeaterItem item = (RepeaterItem) btnRemove.NamingContainer;
// for example:
Label labelSmallInline = (Label) item.FindControl("labelSmallInline");
}
答案 1 :(得分:0)
将Repeater
想象成一个循环,它将迭代所有数据并显示它。这使得在从数据源中提取数据时自定义构建网页非常容易。
您的主要问题,如何识别哪个项目来自转发器?答案是id
唯一标识符。当Repeater
迭代时,它还会公开唯一标识符或id
。
所以你想要做这样的事情:
<a href="Page.aspx?id=<%# Eval("Id") %></a>
现在您可以在页面加载时调用Page.Request.QueryString[@"Id"]
,它会提供一个值以确保您删除正确的项目。
您的其他方法称为实例化:
protected void btnRemove(object sender, EventArgs e)
{
var item = (((LinkButton)sender).CommandArgument;
}
现在可以公开那些公开id的Eval
。
答案 2 :(得分:0)
您可以使用Button控件的Command事件来捕获已发布行的数据。
仅供参考:您可以使用Eval("")
代替DataBinder.Eval(Container.DataItem, "")
<asp:Repeater ID="rptItems" runat="server" >
<ItemTemplate>
<div class="lightShadowBox gradientGray">
<label class="labelSmallInline">Description: </label>
<%# Eval("Description") %>
<label>Path:</label>
<%# Eval("Path") %>
<asp:Button runat="server" ID="btnRemove"
OnCommand="btnRemove_Command"
CommandArgument='<%# Eval("Path") %>'
Text="Remove" CssClass="standardButton"/>
</div>
</ItemTemplate>
</asp:Repeater>
protected void btnRemove_Command(object sender, CommandEventArgs e)
{
string path = e.CommandArgument.ToString();
}
答案 3 :(得分:-1)
在btnRemove按钮的事件处理程序中,您可以从处理程序中获取发件人对象,并尝试获取此发件人属于10的哪个项目。
protected void btnRemove_Click(object sender, EventArgs e){
var btnRemove = sender as Button;
//Now you can search the repeater for the control or if I can recall correctly you can get the
//Parent property of the button and traverse from there
}