【问题标题】:Nested ASP.NET Datalist with Entity framework?使用实体框架嵌套 ASP.NET Datalist?
【发布时间】:2013-09-05 06:07:11
【问题描述】:

我想使用 Entity Framework 显示 2 个嵌套在父子一对多关系中的数据列表。这就是我目前所拥有的

ASP.NET

<asp:DataList ID="dlRange" runat="server" RepeatDirection="Vertical" 
        RepeatLayout="Flow" onitemdatabound="dlRange_ItemDataBound">
<ItemTemplate>
    <hr><h2>
    <%# Eval("COMMITEENAME")%>
    </h2>
    <asp:DataList ID="dlComp" runat="server" RepeatDirection="Vertical" RepeatLayout="Flow" DataSource='<%# Eval("comp") %>'>
    <ItemTemplate>
        <label for='<%#Eval("CID")%>' ><%# Eval("NAME")%></label>
        <input id='<%#Eval("CID")%>' type="range" pattern="[0-9]*" name='<%#Eval("CID")%>' min="0" max="10" data-highlight="true" value="" data-show-value="true" data-popup-enabled="true" />
    </ItemTemplate>
    </asp:DataList>
</ItemTemplate>
</asp:DataList>

CS

using (BOTEntities context = new BOTEntities())
    {
        var data = (from com in context.COMMITEETYPEs
                   join comComp in context.COMMITTEECOMPs on com.COMMITEETYPEID equals comComp.COMMITTEEID
                   where com.ACTIVE == 1
                   select new { com.COMMITEENAME, comComp.COMMITTEEID }).Distinct().OrderBy(a => a.COMMITEENAME).ToList();


        for (int i = 0; i <= data.Count; i++)
        {
            decimal comid = (decimal)data[i].COMMITTEEID;
            var comps = (from comp in context.COMPETENCies
                         join comComp in context.COMMITTEECOMPs on comp.CID equals comComp.CID
                         where comComp.COMMITTEEID == comid
                         orderby comp.NAME
                         select new { comp.CID, comp.NAME }).ToList();
        }

        dlRange.DataSource = data;
        dlRange.DataBind();


    }

我可以正确显示父数据列表,但我不太确定如何将数据源提供给子数据列表。

---编辑

我可以在父 Datalist ItemDataBound 事件上获取子 Datalist 的数据源:

protected void dlRange_ItemDataBound(object sender, DataListItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        DataList childDL = e.Item.FindControl("dlComp") as DataList;

        using (BOTEntities context = new BOTEntities())
        {
            var comps = (from comp in context.COMPETENCies
                         join comComp in context.COMMITTEECOMPs on comp.CID equals comComp.CID
                         where comComp.COMMITTEEID == 1 //hardcoded to test
                         orderby comp.NAME
                         select new { comp.CID, comp.NAME }).ToList();

            childDL.DataSource = comps;
            childDL.DataBind();
        }   
    }
}

如何将 Committeeid 从父 DataListItem 传递给事件?

【问题讨论】:

  • 在父数据列表中添加一个隐藏字段来保存 COMMITTEEID。在 ItemDatabound 中找到隐藏字段,形成 e.item。然后使用它的价值。

标签: c# asp.net linq entity-framework datalist


【解决方案1】:

没关系,我想通了

protected void dlRange_ItemDataBound(object sender, DataListItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        DataList childDL = e.Item.FindControl("dlComp") as DataList;
        var item = e.Item;
        var dataItem = item.DataItem;
        decimal comID = (decimal)DataBinder.Eval(dataItem, "COMMITTEEID");
        using (BOTEntities context = new BOTEntities())
        {
            var comps = (from comp in context.COMPETENCies
                         join comComp in context.COMMITTEECOMPs on comp.CID equals comComp.CID
                         where comComp.COMMITTEEID == comID
                         orderby comp.NAME
                         select new { comp.CID, comp.NAME }).ToList();

            childDL.DataSource = comps;
            childDL.DataBind();
        }   
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    相关资源
    最近更新 更多