我有转发器我想显示所有项目,如下面的输出,但所有项目都是重复的,每行应该是唯一的。 应该先显示下一行显示两个大栏目的四个小样本 列 这个代码我的问题是什么?我是asp.net web forms的初学者
<asp:Repeater ID="rp1" runat="server" DataSourceID="sdsItemsFilter">
<ItemTemplate>
<%If counter1 Mod 2 = 1 Then %>
<div style="margin-top:10px;margin-bottom:10px">
<%If counter1 Mod 2 = 1 Then %>
<%for i As Int32 = 1 To 2 %>
<div style="display:inline-block;width:300px;height:150px;border:1px solid #808080;padding:20px">
<h1>Item <%#Eval("ItemName")%></h1>
</div>
<%Next %>
<%End If %>
</div>
<%End If %>
<br /> <br />
<%If counter1 Mod 2 = 0 Then %>
<div style="margin-top:10px;margin-bottom:10px">
<%for i As Int32 = 1 To 4 %>
<div style="display:inline-block;width:150px;height:150px;border:1px solid #808080;padding:20px">
<h1>Item <%#Eval("ItemName")%></h1>
</div>
<%next %>
</div>
<%End If %>
<%counter1 += 1 %>
</ItemTemplate>
</asp:Repeater>
答案 0 :(得分:0)
这里有几个问题。
在下面的代码中,第二个If
块中没有任何意义,因为您只是检查上面检查过的相同条件,因此它始终是真的。
<%If counter1 Mod 2 = 1 Then %>
<div style="margin-top:10px;margin-bottom:10px">
<%If counter1 Mod 2 = 1 Then %>
项目不是唯一的,因为您不会在for
循环中增加counter1。你的意思是使用循环变量吗?
<h1>Item <%=i%></h1>
答案 1 :(得分:0)
您可以在转发器中使用ItemDataBound函数,并根据条件设置其中的值。
<asp:Repeater id="Repeater1" OnItemDataBound="R1_ItemDataBound" runat="server">
<HeaderTemplate>
<table border="1">
<tr>
<td><b>Product</b></td>
<td><b>Consumer Rating</b></td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td> <asp:Label Text='<%# DataBinder.Eval(Container.DataItem, "ProductID") %>' Runat="server"/> </td>
<td> <asp:Label id="RatingLabel" Text='<%# DataBinder.Eval(Container.DataItem, "Rating") %>' Runat="server"/> </td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
和
public void R1_ItemDataBound(Object Sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType ==
ListItemType.AlternatingItem) {
if (((Evaluation)e.Item.DataItem).Rating == "Good") {
((Label)e.Item.FindControl("RatingLabel")).Text= "<b>***Good***</b>";
}
}
}
与此示例一样,您可以绑定不同的数据。