在转发器中显示数据

本文关键字:数据 显示 转发器 | 更新日期: 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连接成一个逗号分隔的字符串。

我假设您将创建AgencyDtoContactDto类型。