2013-09-04 6 views
0

Entity Framework를 사용하여 부모 - 자식 1 - 많은 관계로 중첩 된 2 명의 Datalists를 표시하려고합니다. 이것은 내가 무엇을 가지고 지금까지Entity 프레임 워크가있는 중첩 ASP.NET Datalist?

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 이벤트에 아이 데이터 목록의 데이터 소스 가져올 수 있습니다 : 나는 이벤트에 부모 DataListItem에서 Committeeid을 통과하려면 어떻게

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

를?

+0

그것을 알아 냈어. ItemDatabound에서 숨겨진 필드를 찾고 양식 e.item을 찾으십시오. 그런 다음 가치를 사용하십시오. – afzalulh

답변

0

신경 끄시 고, 내가 COMMITTEEID를 개최 숨겨진 필드를 추가 부모하여 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; 
     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(); 
     } 
    } 
}