Для всего, что вы здесь описали, лучше всего использовать элемент управления DataList. Вы можете указать, сколько столбцов должно быть в ширину, используя свойство RepeatColumns, и вы даже можете устранить любое чувство «табличности», установив для свойства RepeatLayout значение «Поток».
Это также позволит вам не беспокоиться о подсчете столбцов и даже связать коллекцию изображений для привязки.
РЕДАКТИРОВАТЬ: так как вы запросили пример, это будет так просто, как это. Сначала создайте свою сетку и убедитесь, что у вас есть заполнитель для изображения:
<asp:DataList ID="dlImages" runat="server"
RepeatColumns="5"
RepeatDirection="Horizontal"
RepeatLayout="Flow">
<ItemTemplate>
<asp:Image ID="imgPrettyPic" runat="server" />
</ItemTemplate>
</asp:DataList>
Тогда в вашем коде все, что вам нужно сделать, это простая привязка данных. Я не уверен, как хранятся ваши изображения, но в качестве аргумента, скажем, у вас был запрос к базе данных, который дал вам URL-адреса для каждого изображения, которое вы хотите отобразить. Загрузка вашей страницы будет выглядеть примерно так:
if (!Page.IsPostBack())
{
dtImageURLs = GetImageUrlsFromDB();
dlImages.DataSource = dtImageURLs;
dlImages.DataBind();
}
Теперь здесь люди будут отличаться друг от друга. Я предпочитаю использовать все мои методы типа RowBinding в коде, а не в строке, поэтому я использую событие RowDataBound моего DataList и просто соответствующим образом связываю свойство URL.
protected void dlImages_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
{
Image TargetImage = default(Image);
DataRow DataSourceRow = default(DataRow);
DataSourceRow = ((System.Data.DataRowView)e.Item.DataItem).Row;
TargetImage = (Image)e.Item.FindControl("imgPrettyPicture");
TargetImage.ImageUrl = DataSourceRow.Item("ImageURL").ToString;
}
... и это должно заставить вас работать. Обратите внимание, что вам нужно изменить объект DataSourceRow на любой тип элемента, с которым вы связываете данные. Я использовал DataRow, так как это наиболее распространенный сценарий, с которым я обычно сталкиваюсь.