在ASP转发器中使用bootstrap-4-carousel

时间:2018-09-24 14:52:11

标签: asp.net asprepeater bootstrap-carousel

我尝试使用bootstrap-4-carousel作为链接中的示例 bootstrap-4-carousel在asp:转发器中,因此图像将带到表单数据库。我尝试按照以下常规功能选择图片

     SqlDataAdapter da;

        da = new SqlDataAdapter(@"select * from ImageTable
                                                order by NEWID()", constr);

    DataTable dt = new DataTable();
    da.Fill(dt);
    rptImages.DataSource = dt;
    rptImages.DataBind();

以及分页,如下所示:

  public int CurrentPageEN
{
    get
    {
        if (this.ViewState["CurrentPageEN"] == null)
            return 0;
        else
            return Convert.ToInt16(this.ViewState["CurrentPageEN"].ToString());
    }

    set { this.ViewState["CurrentPageEN"] = value; }
}
private void doPagingEN()
{
    DataTable dt = new DataTable();
    dt.Columns.Add("PageIndexEN");
    dt.Columns.Add("PageTextEN");
    for (int i = 0; i < pdsEN.PageCount; i++)
    {
        DataRow dr = dt.NewRow();
        dr[0] = i;
        dr[1] = i + 1;
        dt.Rows.Add(dr);
    }
    dlPagingEN.DataSource = dt;
    dlPagingEN.DataBind();

}
protected void BindDataEN()
{

    DataSet ds = new DataSet();
    SqlConnection con = new SqlConnection(constr);
    SqlCommand cmd;
    con.Open();

    cmd = new SqlCommand(@"select * from imageTable  order by NEWID()", con);

    SqlDataAdapter adp = new SqlDataAdapter(cmd);
    DataTable dt = new DataTable();
    adp.Fill(dt);

    pdsEN.DataSource = dt.DefaultView;
    pdsEN.AllowPaging = true;
    pdsEN.PageSize = 4;
    pdsEN.CurrentPageIndex = CurrentPageEN;



 //   Repeater1.DataSource = pdsEN;
  //  Repeater1.DataBind();

    doPagingEN();


}
protected void dlPaging_ItemCommandEN(object source, DataListCommandEventArgs e)
{
    if (e.CommandName.Equals("lnkbtENagingEN"))
    {
        CurrentPageEN = Convert.ToInt16(e.CommandArgument.ToString());
        BindDataEN();
    }
}

这是aspx代码

<style>
    .blog .carousel-indicators {
        left: 0;
        top: auto;
        bottom: -40px;
    }

        /* The colour of the indicators */
        .blog .carousel-indicators li {
            background: #a3a3a3;
            border-radius: 50%;
            width: 8px;
            height: 8px;
        }

        .blog .carousel-indicators .active {
            background: #707070;
        }
</style>


<link href="//maxcdn.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css">
<script src="//maxcdn.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<!------ Include the above in your HEAD tag ---------->

<div class="container">
    <div class="row blog">
        <div class="col-md-12">
            <div id="blogCarousel" class="carousel slide" data-ride="carousel">

                <ol class="carousel-indicators">
                    <asp:Repeater ID="dlPagingEN" runat="server">
                        <ItemTemplate>
                            <li data-target="#blogCarousel" data-slide-to='<%#Eval("PageTextEN") %>'>
                                <asp:LinkButton ID="lnkbtENagingEN" runat="server" CommandName="lnkbtENagingEN" CommandArgument='<%#Eval("PageIndexEN")%>'></asp:LinkButton>
                            </li>
                        </ItemTemplate>
                    </asp:Repeater>
                </ol>
                <!-- Carousel items -->
                <div class="carousel-inner">
                    <div class="carousel-item active">
                        <div class="row">
                            <asp:Repeater ID="Repeater1" runat="server">
                                <ItemTemplate>
                                    <div class="col-md-3">
                                        <a href="#">
                                            <img src='<%#Eval("ImagePaths")%>' alt="Image" style="max-width: 100%;">
                                        </a>
                                    </div>
                                </ItemTemplate>
                            </asp:Repeater>
                        </div>
                        <!--.row-->
                    </div>
                </div>
                <!--.carousel-inner-->
            </div>
            <!--.Carousel-->

        </div>
    </div>
</div>

,但是我所做的任何操作都无法使链接中的示例作为滑块。 因此,如果有人有解决方案,请帮助我。

谢谢大家

2 个答案:

答案 0 :(得分:0)

基本上,发生的事情是您为转盘准备了一张“幻灯片”,并将所有图像放入一张幻灯片中。

现在,问题顶部提供的链接在转盘的每个“幻灯片”上都有3张小图像。关于绑定控件,这有点复杂,所以让我们退后一步,每张幻灯片仅获得1张图像即可开始。

要在每张幻灯片上获取1张图片,您需要修改中继器aspx使其工作如下:

<div class="carousel-inner">
    <asp:Repeater ID="Repeater1" runat="server">
         <ItemTemplate>
              <div class="carousel-item">
                   <a href="#">
                       <img src='<%#Eval("ImagePaths")%>' alt="Image" style="max-width: 100%;">
                   </a>
              </div>
          </ItemTemplate>
   </asp:Repeater>
</div>

这里要指出的是,每个幻灯片都是具有“轮播项目”类的div。通过将其包含在转发器的ItemTemplate中,这意味着每张图像将是一张唯一的幻灯片。

现在,对于dlPagingEn转发器,您将希望摆脱嵌入在其中的linkbutton。概念是幻灯片的所有图像都应包含在页面上,并且dlPagingEn控件将允许客户端访问各种幻灯片。您不需要为此行为执行到服务器的往返。

现在是坏消息。像提供的链接中那样,使Repeater吐出每张幻灯片3张图像的代码要困难得多。我在下面的中继器代码中提到过的最简单的方法可能是在ItemTemplate中包含一个函数。该功能需要做的是跟踪数据项记录号,并为每第3张图像关闭行和转盘项div,然后重新打开它们。

<div class="carousel-inner">
    <asp:Repeater ID="Repeater1" runat="server">
         <headerTemplate>
             <div class="carousel-item">
               <div class="row">
         </headerTemplate>
         <ItemTemplate>
             <%# BuildCarouselItemSeperator() %>
              <div class="col-md-3">
                   <a href="#">
                       <img src='<%#Eval("ImagePaths")%>' alt="Image" style="max-width: 100%;">
                   </a>
              </div>
          </ItemTemplate>
          <footerTemplate>
                  </div>
               </div>
          </footerTemplate>
   </asp:Repeater>
</div>

现在,如果您可以修改SQL(查询或表本身),以使您要绑定到中继器的返回数据集的每一行都具有3个不同的图像记录而不是一个,则这确实成为一个容易得多。在这种情况下,您将使用以下样式的中继器声明:

<div class="carousel-inner">
    <asp:Repeater ID="Repeater1" runat="server">
         <ItemTemplate>
              <div class="carousel-item">
               <div class="row">
              <div class="col-md-3">
                   <a href="#">
                       <img src='<%#Eval("ImagePaths_A")%>' alt="Image" style="max-width: 100%;">
                   </a>
              </div>

              <div class="col-md-3">
                   <a href="#">
                       <img src='<%#Eval("ImagePaths_B")%>' alt="Image" style="max-width: 100%;">
                   </a>
              </div>

              <div class="col-md-3">
                   <a href="#">
                       <img src='<%#Eval("ImagePaths_C")%>' alt="Image" style="max-width: 100%;">
                   </a>
              </div>
                  </div>
               </div>
          </ItemTemplate>
   </asp:Repeater>
</div>

实际上,要获得每张幻灯片3张图像,实际上可能比使用Repeater通过StringBuilder在后面的代码中构建HTML,然后将其放入文字控件中更为幸运。

答案 1 :(得分:0)

我找到了一个ASP和Bootstrap解决方案

诀窍是让“ IF”将第一个索引标识为“ ACTIVE”,然后添加其他索引而没有“ ACTIVE”

<div id="carousel" class="carousel slide" data-ride="carousel">
 <div class=" container carousel-inner">
  <asp:Repeater ID="rpt_Propiedades" runat="server">
    <ItemTemplate>
      <div class="carousel-item  <%# (IIf(Container.ItemIndex = 0, "active", ""))%>">
                 <%# Eval("Nombre Columna") %>
    </div>
   </ItemTemplate>
  </asp:Repeater>
 </div>
</div>