バインド後にリピーターの特定のラベルを表示しようとしています。リピーターのすべてのアイテムのすべてのラベルを表示したくありません。ボタンをクリックしたところだけです。更新ボタンをクリックすると、DB 内のトーナメント アイテムの情報が更新されます。変更が成功したことを示すラベルを表示したいのですが、更新したアイテムに対してのみです。
これがコードビハインドです。[...] は、DB で更新を行う場所です
protected void repeatTourney_ItemCommand(object source, RepeaterCommandEventArgs e)
{
if (e.CommandName == "btnUpdate_Click")
{
[...]
Label lblSuccess= (Label)e.Item.FindControl("lblUpdateSuccess");
bindRepeater(ddlEvents.Text);
lblSuccess.Visible = true;
}
}
こちらがaspxです。[...] は、DB アイテムの情報を含むテキストボックスやその他のものです。
<asp:Repeater ID="repeatTourney" runat="server" OnItemDataBound="repeatTourney_ItemDataBound"
OnItemCommand="repeatTourney_ItemCommand">
<ItemTemplate>
<div class="form">
[...]
<asp:Label ID="lblUpdateSuccess" runat="server" Text="Update success" Visible="false" />
<asp:Button ID="btnUpdate" runat="server" Text="Update" CssClass="button" CommandName="btnUpdate_Click" />
[...]
</div>
</ItemTemplate>
</asp:Repeater>
最終的にはこのようになるはずです
Item
Info
BtnUpdate
lblSuccess.Visible = false
Item
Info
BtnUpdate <== Clicked
lblSuccess.Visible = true
ご協力ありがとうございました。
編集:これが私のbindRepeaterコードです
private void bindRepeater(string name)
{
List<Tourney> list = TourneyDAL.GetByNameEvent(name);
[...]
repeatTournois.DataSource = list;
repeatTournois.DataBind();
[...]
}
編集 2: バインディング後にどの ID を表示する必要があるかを示す ID のアイデアをありがとう。
うまくいきました。:)
ここに私の新しいコード
private void bindRepeater(string name, int index)
{
List<Tourney> list = TourneyDAL.GetByNameEvent(name);
[...]
repeatTourney.DataSource = list;
repeatTourney.DataBind();
[...]
if (index != 0)
{
Label lblReussie = (Label)repeatTourney.Items[index].FindControl("lblUpdateSuccess");
lblSuccess.Visible = true;
}
protected void repeatTourney_ItemCommand(object source, RepeaterCommandEventArgs e)
{
if (e.CommandName == "btnUpdate_Click")
{
[...]
Label lblSuccess= (Label)e.Item.FindControl("lblUpdateSuccess");
bindRepeater(ddlEvenements.Text, e.Item.ItemIndex);
lblSuccess.Visible = true;
}
}
}