带有LINQ的DNN 7嵌套中继器

时间:2014-08-18 16:21:02

标签: c# linq dotnetnuke

我在下面的链接中使用了这个答案作为例子。但我无法在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();
        }
    }

1 个答案:

答案 0 :(得分:1)

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

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

或者:

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