2009-12-12 5 views
0

DB에 3 개의 테이블이 있습니다.
"AccountAccessRight"테이블을 접합 테이블로 사용하여 N-N 관계를 구현했습니다.
그래서 "Account"테이블은 "AccountAccessRight"와 1-N 관계를 가지며 "AccountAccessRight"는 "NextOfKin"테이블과 N-1 관계를가집니다.
"Repeater1"에서 각 계정의 모든 계정의 NextOfKins마다 모든 계정 및 목록을 나열 할 수 있습니다. repeater2에서3 중첩 리피터 LINQtoSQL을 사용하여 N-N 관계 구현

<asp:Repeater ID="Repeater1" runat="server" DataSourceID="ObjectDataSource1"> 
     <HeaderTemplate> 
     </HeaderTemplate> 
     <ItemTemplate> 
      <div style="clear: both;"> 
       <img style="float: right;" alt="" src="./img/account.png" /> 
       <a href='<%# Eval("AccountUrl")%>'> 
        <%# Eval("AccountTitle")%> 
       </a> 
       <br /> 
       <span>نام کاربري:</span><%# Eval("AccountUsername")%><br /> 
       <asp:Repeater ID="Repeater2" DataSource="<%# ((aspnet_AccountTable)(Container.DataItem)).aspnet_AccountAccessRights %>" 
        runat="server"> 
        <ItemTemplate> 
         <asp:Repeater ID="Repeater3" DataSource="<%# ((aspnet_AccountAccessRight)(Container.DataItem)).aspnet_NextOfKinTable %>" 
          runat="server"> 
          <HeaderTemplate> 
           <hr /> 
          </HeaderTemplate> 
          <ItemTemplate> 
           <span>وارث يا وارثان:</span> 
           <div> 
            <a href='<%# Eval("NoKId","./FullInfo.aspx?Mode=view&nok={0}")%>'> 
             <%# Eval("Firstname")%> 
             <%# Eval("Lastname")%> 
            </a>, 
           </div> 
          </ItemTemplate> 
          <FooterTemplate> 
           <hr /> 
          </FooterTemplate> 
         </asp:Repeater> 
        </ItemTemplate> 
       </asp:Repeater> 
       <%--<span>وارث(ان) حساب:</span><%# Eval("Relationship")%><br />--%> 
       <%--<span>نام وارث:</span><%# Eval("FirstName") %>&nbsp;<%# Eval("LastName") %>--%> 
      </div> 
     </ItemTemplate> 
    </asp:Repeater> 

봐 3 데이터 소스 : alt text http://sites.google.com/site/mahdiahmadirad/download-1/2009-12-12_032800.png?attredirects=0

그래서 나는이 코드를 썼다 :
다음은 DB 다이어그램입니다!
Comiling Repeater3 예외가 있습니다.

... 
from acc in db.aspnet_AccountTable 
select acc; 
... 

당신은 나를 도울 수 : "objectdatasource1는"단지 모든 aspnet_accountTable 프로젝트 그건
주의 사항?

ADDED : 데이터에 의해 LINQ GROUP를 사용하여 내 중첩 된 리피터 바인딩 동안

System.ArgumentException was unhandled by user code 
    Message="An invalid data source is being used for Repeater3. A valid data source must implement either IListSource or IEnumerable." 
    Source="System.Web" 
    StackTrace: 
     at System.Web.UI.WebControls.Repeater.set_DataSource(Object value) 
     at ASP.user_accounts_default_aspx.__DataBinding__control9(Object sender, EventArgs e) in g:\MyProjects\ASP.net Projects\After Dyeing\WebSite\User\Accounts\Default.aspx:line 30 
     at System.Web.UI.Control.OnDataBinding(EventArgs e) 
     at System.Web.UI.WebControls.Repeater.OnDataBinding(EventArgs e) 
     at System.Web.UI.WebControls.Repeater.DataBind() 
     at System.Web.UI.Control.DataBindChildren() 
    InnerException: 
+0

별로 그룹화 이러한 그룹을 표시 할 번역하세요)? –

+0

나는 예외 사항을 내 질문에 붙여 넣었습니다. – mahdiahmadirad

답변

1


내가 같은 예외를 가지고 : 다음은 전체 예외 Detial입니다. 익명 형식의 속성을 설정하여이 문제를 해결했으며 중첩 된 중계기를 바인딩하는 동안 해당 데이터 소스를 가져 오는 중입니다.

2 줄의 코드가 도움이 될 것 같습니다.

은 참고 lstGroups 그룹 2 곳 [SITEURL, 그룹 이름] 을 가지고 = 목록 나는 SITEURL 당신이 친절하게도을 것 경우 영어로 예외를 (무엇

//data source for Parent Repeater 
var Result = lstGroups.OrderBy(o => o.GroupName).GroupBy(d => d.SiteUrl).Select(s => new { SiteUrl = s.Key, Groups= s }); 

//On Item Data Bound of Parent Repeater, Bind child repeater 

var obj = DataBinder.Eval(e.Item.DataItem, "Groups"); 

rptChild.DataSource = obj; 

rptChild.DataBind();