有这个转发器......
<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>
Run Code Online (Sandbox Code Playgroud)
我想要的是当用户点击转发器呈现的lsit中的任何"lnk1"链接按钮时,该链接应该被替换为标签"label1"..即,当用户点击"Make Default"链接时,它应替换为"是"标签
现在,当我点击2个链接按钮时,两个标签都显示"是",因为我只需要一个链接按钮显示是,即已经克隆的那个,其余项目只显示"默认"链接按钮.
即只有一个项目应该显示"是"标签...现在我如何迭代转发器项目只设置一个项目作为默认值而不是多个?
您可以迭代转发器项集合,
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);
}
}
Run Code Online (Sandbox Code Playgroud)
此选项的优点是:1.数据库没有第二次命中.
或者我将我的逻辑放在ItemDataBound事件中,将单击的链接按钮索引存储在成员变量中,并在命令事件处理程序中调用DataBind.
private int selectedIndex = -1;
//...
protected void myRepeater_ItemCommand(object sender, RepeaterCommandEventArgs e)
{
selectedIndex = e.Item.ItemIndex;
myRepeater.DataSource = MyGetDataMethod();
myRepeater.DataBind();
}
Run Code Online (Sandbox Code Playgroud)
在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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
第二种选择的缺点是:1.数据库的第二次命中.2.如果用户单击说第二行,而其他一些用户插入新地址记录,则重新绑定时第2行现在可能会有所不同.此外,如果您没有使用订单,那么可能会在数据库调用之间进行更改,并且您存储的selectedIndex也可能会失效.
所以总的来说,我现在选择了第一选择,我已经考虑过了.
| 归档时间: |
|
| 查看次数: |
10182 次 |
| 最近记录: |