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



i有一个被检索的项目列表,并且可能具有不同的数量。因此,我有一个中继器来创建一个动态数量的行以显示每个项目。我需要每个行中的按钮可以更改该特定行列表中项目的某些属性。我只能为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();
}

不用担心。按钮不一样。该框架将确保它们是独一无二的。如果您想知道单击哪个按钮,则可以将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();
}

最新更新