我有两个中继器,一个嵌套在另一个中。内部中继器包含并基本上显示一个文本框网格,以允许用户输入信息集。
如果嵌套子项有0项,则没有问题。否则,总会有4对文本框的增量。如果有4对,我们想在1行显示所有4对,它有8对,我们需要在前4对和后4对之间换行,依此类推12 ...
我尝试使用纯CSS,根据区域的大小和盒子的大小强制它将它放在一个新的行上,但是有一个更简洁的方法用转发器做这个吗?我注意到在某些浏览器和操作系统上我遇到了笨拙的问题。
<ItemTemplate>
<tr>
<td> </td>
<td>
<asp:Label runat="server" ID="lbDayOfWeek" Text='<%# DataBinder.Eval(Container.DataItem, "DayOfWeek") %>'/>
</td>
<td>
<asp:Label runat="server" ID="lbDate" Text='<%# Format(DataBinder.Eval(Container.DataItem, "DateOfDay"), "MM/dd/yyyy") %>'/>
</td>
<td class="punches">
<asp:Repeater runat="server" ID="Punches" DataSource='<%# DataBinder.Eval(Container.DataItem, "PunchPairs") %>'>
<HeaderTemplate>
</HeaderTemplate>
<ItemTemplate>
<asp:TextBox runat='server' ID='Tb1' Text='<%# if(eval("InDefault")= false,DataBinder.Eval(Container.DataItem, "InTime"),"") %>' />
<asp:TextBox runat='server' ID='Tb2' Text='<%# if(eval("OutDefault")= false,DataBinder.Eval(Container.DataItem, "OutTime"),"") %>' />
</ItemTemplate>
<FooterTemplate>
</FooterTemplate>
</asp:Repeater>
</td>
<td class="Totals">
<asp:TextBox ID="txtHours" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "TotalHrs") %>' ReadOnly='true'/>
</td>
<td> </td>
</tr>
答案 0 :(得分:1)
是的,您可以借助子转发器的ItemDataBound事件来使用CSS做到这一点
关于itemDatabound事件
Private Sub Punches_DataBound(sender As Object, e As RepeaterItemEventArgs) Handles Punches.ItemDataBound
If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then
Dim XDiv As HtmlGenericControl = CType(e.Item.FindControl("XDiv"), HtmlGenericControl)
XDiv.Attributes("Class") += " Item" & (e.Item.ItemIndex Mod 4)
end if
end sub
和Punches的项目模板
<ItemTemplate>
<div runat="server" id="XDiv" class="Item">
<asp:TextBox runat='server' ID='Tb1' Text='<%# if(eval("InDefault")= false,DataBinder.Eval(Container.DataItem, "InTime"),"") %>' />
<asp:TextBox runat='server' ID='Tb2' Text='<%# if(eval("OutDefault")= false,DataBinder.Eval(Container.DataItem, "OutTime"),"") %>' />
</div>
</ItemTemplate>
用CSS漂浮它们
.Item{
float:left;
}
.Item0{
clear:both;
}