0

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

如果嵌套子项有 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>

4

1 回答 1

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;
}
于 2013-09-30T23:20:44.813 回答