Как использовать привязку ретранслятора в сети ASP для начальной загрузки карусельных слайдов
Я получаю предметы с sharepoint 2013 и звоню через ретранслятор.
<asp:Repeater ID="repeater_slideshow" runat="server">
<ItemTemplate>
<div class="<%# Container.ItemIndex == 0 ? "item active" : "item" %> row hidden-xs col-sm-12 slideshowItem">
<div class="wrapGallery col-sm-4">
<img class="img-responsive slideimage" src="<%# DataBinder.Eval(Container.DataItem, "Image") %>">
<div class="imgGalleryDescription">
<%# DataBinder.Eval(Container.DataItem, "HTMLField") %>
</div>
</div>
</div>
</ItemTemplate>
</asp:Repeater>
Исходя из кода, я просто получаю список и использую метод datasource и databind для повторителя:
Collection<HighLights> l = ContentHelper.ExecuteQuery<HighLights>(Portal.Lists.Highlight, ServerRelativeURL);
this.repeater_slideshow.DataSource = l;
this.repeater_slideshow.DataBind();
Имея 3 ПУНКТА в моем списке, в выводе слайд-шоу показывает только 1 элемент на слайд вместо всех 3 элементов... после некоторого поиска в Google я обнаружил, что должен использовать привязку данных элемента ретранслятора внутри ретранслятора из кода выше что я показал вам (повторитель внутри повторителя)... проблема в том, что я понятия не имею, как работать с привязкой элемента данных повторителя... и что нужно сделать, чтобы 3 элемента из списка появлялись на каждом слайде вместо показывает только 1 пункт!!! Любая помощь приветствуется
PS: извините, если это репост.
РЕДАКТИРОВАТЬ: нашел решение:-)
<asp:Repeater ID="repeater"runat="server"OnItemDataBound="repeater_ItemDataBound">
<ItemTemplate>
<div class="<%# Container.ItemIndex == 0 ? "item active" : "item" %> row col-sm-12 slideshowItem">
<asp:Repeater ID="repeater_slideshow" runat="server">
<ItemTemplate>
<div class="col-sm-4">
<div class="wrapGallery">
<img class="img-responsive slideimage" src="<%# DataBinder.Eval(Container.DataItem, "Image") %>">
<div class="imgGalleryDescription">
<%# DataBinder.Eval(Container.DataItem, "HTMLField") %>
</div>
</div>
</div>
</ItemTemplate>
</asp:Repeater>
</div>
</ItemTemplate>
</asp:Repeater>
отделенный код:
if (! this.IsPostBack) {
Collection<HighLights> d = ContentHelper.ExecuteQuery<HighLights>(Portal.Lists.Highlight, ServerRelativeURL);
if (d != null && d.Count > 0)
{
this.Visible = true;
int num1 = d.Count;
int num2 = 3;
decimal result = Convert.ToDecimal(num1) / Convert.ToDecimal(num2);
int quociente = (int)Math.Ceiling(result);
List<int> list = new List<int>(); ;
for (int i = 1; i <= quociente; i++)
{
list.Add(i);
}
this.repeater.DataSource = list;
this.repeater.DataBind();
}
приведенный выше код находится внутри page_load;
после загрузки страницы:
protected void repeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Collection<HighLights> l = ContentHelper.ExecuteQuery<HighLights>(Portal.Lists.Highlight, ServerRelativeURL);
Repeater rpt = e.Item.FindControl("repeater_slideshow") as Repeater;
int aux = (int)e.Item.DataItem * 3;
if (aux <= 3)
{
rpt.DataSource = l.Take(3);
}
else
{
rpt.DataSource = l.Skip(aux - 3).Take(3);
}
rpt.DataBind();
}
}
1 ответ
Однажды я сделал то же самое в SharePoint 2010, я фактически использовал bxslider, и это слайдер, который позволяет вам определять количество элементов на слайде (поэтому нет необходимости в повторителе внутри повторителя).
Вот мой код повторителя:
<div id="slider" class="slider1">
<asp:Repeater ID="repeater_slideshow" runat="server">
<ItemTemplate>
<div class="slide">
// 1 item here
</div>
</ItemTemplate>
</asp:Repeater>
</div>
Надеюсь, это поможет вам!