gpt4 book ai didi

c# - 通过中继器迭代

转载 作者:行者123 更新时间:2023-12-03 03:10:47 25 4
gpt4 key购买 nike

有这个中继器...

 <asp:Repeater ID="myRepeater" OnItemCommand="rpt1_ItemCommand" runat="server" OnItemDataBound="rpt1_OnItemDataBound">
<HeaderTemplate>
<table width="99%" border="0" cellpadding="0" cellspacing="0">
<tr class="lgrey">
<td>Default</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<table>
<tr>
<td>
<asp:LinkButton ID="lnk1" Text="Make Default" CommandName="SetDefault" runat="server" Visible="True" CommandArgument='<%#Eval("UserID") %>' CausesValidation="false"></asp:LinkButton>
<asp:Label ID="label1" Text="Yes" runat="server" Visible="False"></asp:Label>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>

我想要的是,当用户单击中继器呈现的 lsit 中的任何“lnk1”链接按钮时,该链接应替换为标签“label1”。即,当用户单击“设为默认”链接时,应替换该链接带有"is"标签

现在,当我单击 2 个链接按钮时,两个按钮都会显示其标签"is",因为我只希望一个链接按钮显示"is"即已被点击的项目和其余项目应仅显示“设为默认”链接按钮。

即只有一个项目应该显示"is"标签...现在我如何迭代中继器项目以仅设置一个项目作为默认值而不是多个? ??

最佳答案

您可以迭代中继器项目集合,

protected void myRepeater_ItemCommand(object sender, RepeaterCommandEventArgs e)
{

int selectedIndex = e.Item.ItemIndex;
foreach(RepeaterItem item in myRepeater.Items)
{
((LinkButton)item.FindControl("lnk1")).Visible = (item.ItemIndex != selectedIndex);
((Label)item.FindControl("label1")).Visible = (item.ItemIndex == selectedIndex);
}
}

此选项的优点是: 1. 无需对数据库进行第二次点击。

或者我会将逻辑放在 ItemDataBound 事件中,将单击的链接按钮索引存储在成员变量中,并在命令事件处理程序中调用 DataBind。

private int selectedIndex = -1;
//...
protected void myRepeater_ItemCommand(object sender, RepeaterCommandEventArgs e)
{
selectedIndex = e.Item.ItemIndex;

myRepeater.DataSource = MyGetDataMethod();
myRepeater.DataBind();

}

在 ItemDataBound 处理程序中,将当前索引与存储的索引进行比较,如果匹配则显示标签。

protected void myRepeater_ItemDataBound(Object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
if(e.Item.ItemIndex == selectedIndex)
{
((LinkButton)e.Item.FindControl("lnk1")).Visible = false;
((Label)e.Item.FindControl("label1")).Visible = true;
}

}
}

第二个选项的缺点是: 1. 对数据库的第二次攻击。 2. 如果用户单击第二行,并且其他用户插入了新的地址记录,那么当您重新绑定(bind)时,第二行现在可能会有所不同。此外,如果您不使用 order by ,数据库调用之间可能会发生变化,并且您存储的 selectedIndex 也可能会因此而失效。

所以总而言之,我会选择选项一,现在我已经彻底考虑过了。

关于c# - 通过中继器迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4213594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com