ListView中的ListView,无法在C#中跟踪嵌套lv的ID

时间:2015-08-01 22:18:03

标签: c# asp.net listview

它可能看起来很奇怪,或者我可能没有注意到我的错误,但是在代码后面编写,我看不到第二个ListView的ID。

使用ASP.NET WebForms网站

这是我的.aspx代码

            <div class="slideshow">
                <asp:ListView runat="server" ID="lvCarousel" OnItemDataBound="lvCarousel_ItemDataBound" DataKeyNames="brand_id">
                    <LayoutTemplate>

                        <ul class="popup-slide">
                            <li runat="server" id="itemPlaceholder"></li>
                        </ul>

                    </LayoutTemplate>
                    <ItemTemplate>
                        <li class="popup-slideshow content-scroll ">
                            <figure class="ipad-scroll">
                                <figcaption>
                                    <div class="popup-slider">
                                        <div id="carousel1" class="carousel slide" data-ride="carousel">
                                           <ol class="carousel-indicators">
                                        <li data-target="#carousel2" data-slide-to="0" class="active"></li>
                                        <li data-target="#carousel2" data-slide-to="1"></li>
                                        <li data-target="#carousel2" data-slide-to="2"></li>

                                            <asp:ListView runat="server" ID="lvCarouselPic" OnItemDataBound="lvCarouselPic_ItemDataBound" DataKeyNames="brand_id">
                                                <LayoutTemplate>
                                            <div class="carousel-inner">
                                                <div class="item active">
                                                    <li runat="server" id="itemPlaceholder"></li>
                                                </div>
                                            </div>
                                                    </LayoutTemplate>
                                                <ItemTemplate>
                                                    <asp:Image runat="server" ID="imgSlideShow" ImageUrl="#" />
                                                </ItemTemplate>
                                                </asp:ListView>
                                                </ol>
                                        </div>
                                    </div>
                                </figcaption>
                            </figure>
                        </li>
                    </ItemTemplate>
                </asp:ListView>

                <nav class="popup-navigation"><span class="icon nav-prev"></span><span class="icon nav-next"></span><span class="icon nav-close"></span></nav>
            </div>

这是我的C#代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class index : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            DisplayCarousel();
        }
    }
    protected void DisplayCarousel()
    {
        using (Entities db = new Entities())
        {
            List<Brand> brand = db.Brands.ToList();
            lvCarousel.DataSource = brand.OrderByDescending(b => b.date_created);
            lvCarousel.DataBind();
        }
    }
}

每当我尝试在C#中输入lvCarouselPic时,它都不会出现。 我的问题还在于,一个品牌可以有很多照片,在这个幻灯片放映里面,我想用carousel-indicators显示每个品牌对应的所有照片。如果你曾经做过这样的事情并且可以提供帮助,那将非常感激! 感谢

1 个答案:

答案 0 :(得分:0)

您需要在绑定后遍历每个项目并执行FindControl("id")并转换为ListView对象。然后,您可以绑定数据源。

以下是一些示例代码:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        DisplayCarousel();
    }
}
protected void DisplayCarousel()
{
    using (Entities db = new Entities())
    {
        // get all your data first
        var DataList = db.Brands
            .Select(a => new
            {
                objBrand = a,
                PicList = a.Pics.ToList()
            })
            .OrderByDescending(a => a.objBrand.date_created)
            .ToList();


        // now bind the main listview to the Brand objects in the DataList
        lvCarousel.DataSource = Brands.Select(a => a.objBrand);
        lvCarousel.DataBind();

        foreach (ListViewItem objItem in lvCarousel.Items)
        {
            // get the data object
            var objData = DataList[objItem.DataItemIndex];

            // find the nested list view
            ListView lvCarouselPic = (ListView)objItem.FindControl("lvCarouselPic");

            // bind the data pics data source
            lvCarouselPic.DataSource = objData.PicList;
            lvCarouselPic.DataBind();

            // loop each pic item
            foreach (ListViewItem objNestedItem in lvCarouselPic.Items)
            {
                // get the pic object
                var objBrandPic = objData.PicList[objNestedItem.DataItemIndex];

                // do whatever you need with the pic data, find controls in the nested listview, etc.
            }
        }
    }
}

现在这个代码有一些东西。首先,我会将AnonymousType(var)作为自定义对象。然后我将我的数据库调用移动到外部类并调用该类并返回数据。

我确定你可以在OnItemCreated中进行嵌套数据绑定,但我绝不会这样做。

此外,您可以绑定前端html上的对象的数据(我没有在您的示例代码中看到任何内容)。例如:

<asp:Image runat="server" ID="imgSlideShow" ImageUrl='<%# Eval("FieldFromDatabase") %>' />

希望能让你朝着正确的方向前进。