这是一个想法。这假定在换行之前要垂直显示的项目数是一个固定数字,或者至少是一个可由服务器确定的数字(请参阅 VerticalWrapLimit 常量)。 IE。与用户浏览器的高度无关。
<script runat="server">
void Page_Load(object sender, EventArgs e)
{
rptVerticalWrap.DataSource = new[] {
new { ID = 1, Name = "ABC" },
new { ID = 2, Name = "BCD" },
new { ID = 3, Name = "CDE" },
new { ID = 4, Name = "DEF" },
new { ID = 5, Name = "EFG" },
new { ID = 6, Name = "FGH" },
new { ID = 7, Name = "GHI" },
new { ID = 8, Name = "HIJ" },
};
rptVerticalWrap.DataBind();
}
int count;
const int VerticalWrapLimit = 5;
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<% count = 0; %>
<div style="float:left;">
<asp:Repeater ID="rptVerticalWrap" runat="server">
<ItemTemplate>
<%
if (count % VerticalWrapLimit == 0 && count > 0)
{
%></div><div style="float:left;"><%
}
count++;
%>
<div>
<asp:Label runat="server" Text="ID: " /><asp:TextBox runat="server" Text='<%# Eval("ID") %>' />
<asp:Label runat="server" Text="Name: " /><asp:TextBox runat="server" Text='<%# Eval("Name") %>' />
</div>
</ItemTemplate>
</asp:Repeater>
</div>
</div>
</form>
</body>
</html>
对于这类问题,我认为您需要做的是首先确定您想要生成的 HTML 的样子,然后编写 ASP 代码来生成它。
在这种情况下,我将每个垂直列的数据包装在 style="float:left;" 中。我使用了一个类范围的“count”变量来确定何时需要关闭当前的 div 并开始一个新的。 count 变量必须是类级别的变量,因为 Repeater 的 ItemTemplate 的内容与页面的其余部分具有不同的范围。