2013-10-22 29 views
1

我有一個數據表,其中列出了最終結果中將通過列表綁定到中繼器控制的代理,聯繫人和組。到目前爲止,我能夠提取我需要的信息,但在爲代理商和聯繫人獲取不同的值時遇到問題。有重複的代理機構以及具有一個或多個組的聯繫人。在中繼器中顯示數據

應該像這樣的結構:

Agency1 
    Jenny | Basketball, Dance 
    Bill  | Football, Ballet 
Agency2 
    Archie | Soccer, Band 

到目前爲止,我有這樣的:

var groups = dt.AsEnumerable() 
.GroupBy(r => new 
{ 
    Agency = r.Field<string>(("Agency")), 
    //Contact = r.Field<string>("POC") , 
    //Groups = r.Field<string>("POC_Name") 
}); 


List<alist> agencyAdd = new List<alist>(); 
foreach (var agencyContactGroup in groups) 
{ 
    agencyAdd.Add(new alist() 
    { 

     Agency = agencyContactGroup.Key.Agency, 
     Contact = string.Join("<br>", agencyContactGroup.Select(r => r.Field<string>("POC"))) 
       + string.Join(",", agencyContactGroup.Select(g => g.Field<string>("POC_Name"))) 
    }); 
} 

和在.aspx側:

<asp:Repeater runat="server" ID="AgencyRepeater"> 
<HeaderTemplate> <h2>Agency:</h2> </HeaderTemplate> 
<ItemTemplate> 
    <table> 
     <tr> 
      <td><h3><b><%# DataBinder.Eval(Container.DataItem, "Agency") %></b></h3></td> 
     </tr> 
     <tr> 
      <td> 
      <b><%# DataBinder.Eval(Container.DataItem, "Contact") %></b> 
      <b><%# DataBinder.Eval(Container.DataItem, "Groups") %></b> 
      </td> 
     </tr> 
    </table> 
</ItemTemplate> 
</asp:Repeater> 

有人能指出我正確的方向。謝謝。

+0

因此,您在獲取分組數據或在UI上顯示數據時遇到問題? –

+0

最後,在UI上顯示它是最重要的。 – jpavlov

+0

那麼我認爲它應該是針對一些特定問題的兩個不同的問題 –

回答

1

使用linq group by,使用嵌套的repeater/listview控件。您可以使用linq IGroupingKey屬性來顯示組標題,並且項目可以是任何類型。以下是如何將這個應用於您的場景的示例。希望這有助於。

Groupings.DataSource = agencyAdd.GroupBy(a=> a.Agency.Name); 
Groupings.Databind(); 

<asp:ListView ID="Groupings" runat="server" ViewStateMode="Disabled" EnableViewState="false"> 
    <LayoutTemplate> 
     <Table> 
       <tbody> 
      <asp:PlaceHolder runat="server" ID="ItemPlaceHolder" /> 
       </tbody> 
     </Table> 
    </LayoutTemplate> 
    <ItemTemplate> 
     <!-- group header --> 
     <tr><td colspan="3"><%# Eval("Key") %></td></tr> 

     <!-- group items --> 
     <asp:ListView ID="GroupItems" runat="server" DataSource='<%# Container.DataItem %>' ViewStateMode="Disabled" EnableViewState="false"> 
     <LayoutTemplate> 
      <asp:PlaceHolder runat="server" ID="ItemPlaceHolder" /> 
     </LayoutTemplate> 
      <ItemTemplate> 
       <tr> 
       <td> </td> 
       </td><%# DataBinder.Eval(Container.DataItem, "Contact") %></td> 
       </td><%# DataBinder.Eval(Container.DataItem, "Groups") %></td> 
       </tr> 
      </ItemTemplate> 
    </ItemTemplate>  
</asp:ListView> 
0

分組查詢應該是這樣的:

dt.AsEnumerable() 
.GroupBy(r => r.Field<string>("Agency")) 
.Select(g => 
    new AgencyDto { 
      Agency = g.Key, 
      Contacts = g.GroupBy(r1 => r1.Field<string>("POC")) 
      .Select(g1 => 
       new ContactDto { 
        Contact = g1.Key, 
        Groups = string.Join(",", g1.Select(r2 => r2.Field<string>("POC_Name"))) 
        }) 
     }) 

因此,有一個分組通過Agency第一和這些羣體中也有Contacts基團,具有其Groups連接起來作爲一個逗號分隔的字符串。

我假設您將創建AgencyDtoContactDto類型。