ERROR: the name 'lvSubCategories' does not exist in the current context

ERROR: the name 'lvSubCategories' does not exist in the current context

我试图根据类别显示子类别我将 Listview 放在另一个 listview 中,但内部 Listview 在 cs 文件中抛出错误,名称 'lvSubCategories' 在当前上下文中不存在。

listView 内部不能包含另一个 listview 吗?

这是我的 Test.aspx 标记:

 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Test.aspx.cs" Inherits="ShoppingHeart.Test" %>
    <!DOCTYPE html>

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        <link href="css/font-awesome.css" rel="stylesheet" />
        <link href="Scripts/bootstrap.css" rel="stylesheet" />
        <script src="Scripts/jquery-3.1.1.js"></script>
        <script src="Scripts/bootstrap.js"></script>
        <link href="Styling/TablesStyle.css" rel="stylesheet" />
        <link href="Styling/paneLStyle.css" rel="stylesheet" />
        <link href="Styling/NavBarStyle.css" rel="stylesheet" />
    </head>
    <body>
        <form id="form1" runat="server">
            <div>
                <nav class="navbar navbar-default" style="background-color: rgba(154, 153, 153, 0.93)">
                    <div class="container">
                        <div class="navbar-header">
                            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#myNavbar">
                                <span class="icon-bar"></span>
                                <span class="icon-bar"></span>
                                <span class="icon-bar"></span>
                            </button>
                            <asp:Image ID="Image1" Height="60px" Width="85px" ImageUrl="~/Images/FinalLogo.png"
                                runat="server" />
                        </div>
                        <div class="collapse navbar-collapse" id="myNavbar">

                            <ul class="nav navbar-nav">

                                <asp:ListView ID="lvCategories" runat="server">
                                    <ItemTemplate>
                                        <li class="dropdown">
                                            <a href="#" class="dropdown-toggle" data-toggle="dropdown">
                                                <%# Eval("CategoryName") %> <span class="caret"></span>
                                            </a>
                                            <asp:ListView ID="lvSubCategories" runat="server">
                                                <ItemTemplate>
                                                    <ul class="dropdown-menu">
                                                        <li><a href="#"><%# Eval("SubCategoryName") %></a></li>
                                                    </ul>
                                                </ItemTemplate>
                                            </asp:ListView>
                                        </li>

                                    </ItemTemplate>
                                </asp:ListView>
                            </ul>
                        </div>
                    </div>
                </nav>

                <asp:Button ID="btnLoadCategories" runat="server" Text="Load Categories"
                    OnClick="btnLoadCategories_Click" />
            </div>
        </form>
    </body>
    </html>

这是我的 Test.aspx.cs 代码:

    using System;
    using System.Collections.Generic;
    using System.Configuration;
    using System.Data;
    using System.Data.SqlClient;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;

    namespace ShoppingHeart
    {
        public partial class Test : System.Web.UI.Page
        {
            protected void btnLoadCategories_Click(object sender, EventArgs e)
            {
                var ds = new DataSet();
                var ds1 = new DataSet();

                string Categoryquery = "Select * from Category";
                string SubCategoryquery = "Select SubCategoryName from SubCategory where CategoryId = 1003";

                string ConString = ConfigurationManager.ConnectionStrings["MyCon"].ConnectionString.ToString();

                using (var conn = new SqlConnection(ConString))
                {
                    var adpt = new SqlDataAdapter(Categoryquery, conn);
                    adpt.Fill(ds);

                    lvCategories.DataSource = ds;
                    lvCategories.DataBind();
                }

                using (var conn = new SqlConnection(ConString))
                {
                    var adpt = new SqlDataAdapter(SubCategoryquery, conn);
                    adpt.Fill(ds1);

                    lvSubCategories.DataSource = ds1;
                    lvSubCategories.DataBind();
                }
            }
        }
    }

因为它是嵌套的 ListView,所以您没有直接访问权限。您需要使用 FindControl。可以用在ListView

OnItemDataBound事件中
<asp:ListView ID="lvCategories" runat="server" OnItemDataBound="lvCategories_ItemDataBound">

protected void lvCategories_ItemDataBound(object sender, ListViewItemEventArgs e)
{
    ListView lvSubCategories = e.Item.FindControl("lvSubCategories") as ListView;

    lvSubCategories.DataSource = source;
    lvSubCategories.DataBind();
}

或者通过索引访问项目。

ListView lvSubCategories = lvCategories.Items[i].FindControl("lvSubCategories") as ListView;

lvSubCategories.DataSource = source;
lvSubCategories.DataBind();