在转发器中显示数据
本文关键字:数据 显示 转发器 | 更新日期: 2023-09-27 18:36:20
我有一个数据表,其中列出了机构,联系人和组,最终结果将通过列表绑定到中继器控件。到目前为止,我能够提取我需要的信息,但在获取机构和联系人的不同值时遇到问题。有重复的机构以及具有一个或多个组的联系人。
它应该类似于这个结构:
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>
有人可以指出我正确的方向吗?谢谢。
使用 linq group by,带有嵌套的转发器/列表视图控件。可以使用 linq IGrouping
Key
属性显示组标头,这些项可以是任何类型。下面是如何将此应用于方案的示例。希望这有所帮助。
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>
分组查询应如下所示:
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
连接成一个逗号分隔的字符串。
我假设您将创建AgencyDto
和ContactDto
类型。