在中继器内创建独特的按钮

时间:2017-06-28 18:59:31

标签: c# asp.net repeater

我有一个检索的项目列表,可以有不同的金额。因此,我有一个Repeater来创建动态数量的行来显示每个项目。我需要在每一行中有一个按钮,可以更改该特定行列表中项目的某些属性。我只能为aspx文件中的每一行创建相同的按钮,这意味着我无法确定要更改哪一行,因为所有按钮都是相同的。见下文:

<asp:Repeater runat="server" ID="repeater">
    <ItemTemplate>
        <li class="list-group-item"><%# Container.DataItem %>
            <asp:Button ID="btn" runat="server" />
        </li>
    </ItemTemplate>
</asp:Repeater>

列表项以循环显示,所以我从aspx页面中删除了该按钮,而是尝试在此循环中创建按钮,但它们没有显示。

for (int i = 0; i < listItems.Length; i++)
{
    openList.Add("ID: " + item[i]);
    repeater.DataSource = openList;
    Button btn = new Button();
    btn.ID = i.ToString();
    repeater.Controls.Add(btn);
    repeater.DataBind();
}

1 个答案:

答案 0 :(得分:1)

不要担心。按钮不一样。该框架将确保它们是独一无二的。如果您想知道点击了哪个按钮,可以向CommandArgument方法发送OnCommand

<asp:Repeater runat="server" ID="repeater">
    <ItemTemplate>
        <li class="list-group-item"><%# Container.ItemIndex %>
            <asp:Button ID="btn" runat="server" CommandArgument='<%# Container.ItemIndex %>' OnCommand="btn_Command" />
        </li>
    </ItemTemplate>
</asp:Repeater>

背后的代码

protected void btn_Command(object sender, CommandEventArgs e)
{
    //if you need to access the button itself
    Button btn = sender as Button;

    //get the correct index from the commandargument
    Label1.Text = e.CommandArgument.ToString();
}