错误:在当前上下文中不存在名称'lvSubCategories'
问题描述:
我想根据类别显示子类别我将Listview放在另一个ListView中,但内部Listview在名为'lvSubCategories'的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。可在OnItemDataBound
事件ListView控件
<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();
令人惊叹的作品,谢谢。 –