dnn7嵌套中继器与LINQ
本文关键字:LINQ 中继器 嵌套 dnn7 | 更新日期: 2023-09-27 18:18:26
我在下面的链接中使用了这个答案作为示例。但是我无法使Imports语句在ASCX文件中工作。有没有办法在内部中继器中显示数据这样我就不用导入命名空间了?ascx文件中的命名空间错误-"错误CS0246:类型或命名空间名称'Data'无法找到(您是否缺少using指令或程序集引用?)--> System.Web.HttpCompileException: "
使用Linq与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();
}
}
您正在导入System.Data
,但在代码中使用Data.xxx
。编译器无法找到Data
命名空间。要么从导入中删除.Data
,要么从代码中删除Data.
。我建议后者。
<%@ Import Namespace="System.Data" %>
或:
<%# ((DataRow)Container.DataItem)[1] %>, <%# ((DataRow)Container.DataItem)[0] %>