我在下面的链接中使用了这个答案作为例子。但我无法在ASCX文件中使用Imports语句。有没有办法在内部转发器中显示数据,所以我不必导入该命名空间? ascx文件中的命名空间出错 - "错误CS0246:类型或命名空间名称'数据'找不到(你错过了使用指令或汇编引用吗?)---> System.Web.HttpCompileException:"
Databind repeater using Linq with group by
ASCX
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="View.ascx.cs" Inherits="Christoc.Modules.ProductFilter.View" %>
<%@ Import Namespace="System.Data" %>
<asp:Repeater ID="rptCategories" runat="server" OnItemDataBound="rptCategories_ItemDataBound">
<ItemTemplate>
<div>
Category: <b><%# Container.DataItem%></b>
<asp:Repeater ID="rptOptions" runat="server">
<FooterTemplate>
<%="</ul>" %>
</FooterTemplate>
<HeaderTemplate>
<%= "<ul>"%>
</HeaderTemplate>
<ItemTemplate>
<li>
<%# ((Data.DataRow)Container.DataItem)[1] %>, <%# ((Data.DataRow)Container.DataItem)[0] %>
</li>
</ItemTemplate>
</asp:Repeater>
</div>
</ItemTemplate>
背后的代码
var cc = new CategoryMappingsController();
var listview = cc.ListCategories(ModuleId);
catOptData = listview.ConvertToDataTable(record => new object[] { listview });
rptCategories.DataSource = (from x in catOptData.AsEnumerable() select x["CategoryName"]).Distinct(); ;
rptCategories.DataBind();
绑定功能
protected void rptCategories_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item | e.Item.ItemType == ListItemType.AlternatingItem)
{
Repeater rptr = (Repeater)e.Item.FindControl("rptOptions");
rptr.DataSource = catOptData.AsEnumerable();//.Where(x => x["CategoryName"].Equals(e.Item.DataItem));
rptr.DataBind();
Repeater NestedRepeater = (Repeater)e.Item.FindControl("NestedRepeater");
NestedRepeater.DataSource = e.Item.DataItem;
NestedRepeater.DataBind();
}
}
答案 0 :(得分:1)
您要导入System.Data
,但在代码中使用Data.xxx
。没有帮助,编译器无法找到Data
命名空间。从导入中删除.Data
或从代码中删除Data.
。我会建议后者。
<%@ Import Namespace="System.Data" %>
或者:
<%# ((DataRow)Container.DataItem)[1] %>, <%# ((DataRow)Container.DataItem)[0] %>