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();
        }
    }

dnn7嵌套中继器与LINQ

您正在导入System.Data,但在代码中使用Data.xxx。编译器无法找到Data命名空间。要么从导入中删除.Data,要么从代码中删除Data.。我建议后者。

<%@ Import  Namespace="System.Data" %>

或:

<%# ((DataRow)Container.DataItem)[1] %>, <%#  ((DataRow)Container.DataItem)[0] %>