繁体   English   中英

如何在Repeater控件中更改Button控件的文本并捕获其click事件

[英]How to change Button control's text inside Repeater control and catch its click event

我正在尝试使用asp:repeater创建按钮

这就是我所拥有的:

<asp:Repeater ID="rptQuery" runat="server">
    <ItemTemplate>
        <asp:Button runat="server" Text='<%this.GetDataItem().ToString() %>' 
            OnClick="Unnamed_Click" />
    </ItemTemplate>
</asp:Repeater>

我不知道如何更改按钮文本以反映从rptQUery的源(字符串列表)获得的值以及onclick事件以引用此特定按钮。

有什么建议吗?

我建议添加一个ItemDataBinding事件并以如下代码处理:

<asp:Repeater ID="rptQuery" runat="server" OnItemDataBound="rptQuery_ItemDataBound">
    <ItemTemplate>
        <asp:Button id="btnUnnamed" runat="server" OnClick="Unnamed_Click" />
    </ItemTemplate>
</asp:Repeater>

然后您的方法将如下所示。

protected void rptQuery_ItemDataBound(Object Sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        var data = e.Item.DataItem as string;

        var btnUnnamed = e.Item.FindControl("btnUnnamed") as Button;
        if (btnUnnamed != null)
        {
            btnUnnamed.Text = data;
        }
    }
}

您可以使用ItemDataBound事件来控制Button控件的绑定和外观。

然后使用Button控件的Command事件捕获发布的数据。

ASPX

<asp:Repeater ID="rptQuery" runat="server"
    OnItemDataBound="rptQuery_ItemDataBound">
    <ItemTemplate>
        <asp:Button runat="server" ID="Button1" OnCommand="Button1_Command" />
    </ItemTemplate>
</asp:Repeater>

背后的代码

public class Customer
{
    public int Id { get; set; }
    public string Name { get; set; }
}

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        var customers = new List<Customer>
        {
            new Customer {Id = 1, Name = "Jon"},
            new Customer {Id = 2, Name = "Eric"}
        };

        rptQuery.DataSource = customers;
        rptQuery.DataBind();
    }
}

protected void rptQuery_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item ||
        e.Item.ItemType == ListItemType.AlternatingItem)
    {
        var customer = e.Item.DataItem as Customer;
        var button = e.Item.FindControl("Button1") as Button;

        button.CommandName = customer.Id.ToString();
        button.Text = customer.Name;
    }
}

protected void Button1_Command(object sender, CommandEventArgs e)
{
    int id = Convert.ToInt32(e.CommandName);
    // Do something with id
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM