我刚刚影响了哪个中继器项目?

时间:2014-08-21 21:57:14

标签: c# asp.net repeater

假设转发器在下面创建了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>

4 个答案:

答案 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
}