嵌套Repeater中的条件逻辑

时间:2013-09-30 20:54:42

标签: asp.net vb.net nested-repeater

我有两个中继器,一个嵌套在另一个中。内部中继器包含并基本上显示一个文本框网格,以允许用户输入信息集。

如果嵌套子项有0项,则没有问题。否则,总会有4对文本框的增量。如果有4对,我们想在1行显示所有4对,它有8对,我们需要在前4对和后4对之间换行,依此类推12 ...

我尝试使用纯CSS,根据区域的大小和盒子的大小强制它将它放在一个新的行上,但是有一个更简洁的方法用转发器做这个吗?我注意到在某些浏览器和操作系统上我遇到了笨拙的问题。

<ItemTemplate>
<tr>
    <td>&nbsp;</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>&nbsp;</td>
</tr>

1 个答案:

答案 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;
}