我有一个检索的项目列表,可以有不同的金额。因此,我有一个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();
}
答案 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();
}