Вот идея.Это предполагает, что количество элементов, отображаемых по вертикали перед переносом, является фиксированным числом или, по крайней мере, числом, которое может определить сервер (см. Константу VerticalWrapLimit).Т.е. это не связано с высотой браузера пользователя.
<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 должна быть переменной уровня класса, поскольку содержимое ItemTemplate репитера имеет область действия, отличную от остальной части страницы.