ASP.NET Repeater Group by Data

问题描述 投票:0回答:1

我正在使用FormView中继器在表格中显示我的数据。但是,我想将相同的数据组合在一起。我有4个类别。福特,日产,丰田和沃尔沃。每个品牌汽车的数据行都不同。如何分组并使其只显示一次?

<asp:Repeater runat="server" DataSource='<%# Container.DataSource %>'>
        <ItemTemplate>
            <tr>
                <td align="right">Ford</td>
                <td align="left"><%# Eval("Carcode")%></td>
                <td align="left"><%# Eval("PlateNum")%></td>
                <td align="left"><%# Eval("StoreName")%></td>
            </tr>
        </ItemTemplate>
    </asp:Repeater>

我从数据表中得到的结果:

Car_Name   Car_Code Plate_Number Store_Name
  Ford       1234      abc123     storeA
  Ford       1121      abc111     storeB
  Ford       2311      aaa111     storeC
  .....................................

预期成绩:

Car_Name   Car_Code Plate_Number Store_Name
  Ford       1234      abc123     storeA
             1121      abc111     storeB
             2311      aaa111     storeC
  Nissan     1234      abc123     storeA
             1121      abc111     storeB
             2311      aaa111     storeC
html asp.net vb.net html5 asp.net-mvc-4
1个回答
0
投票

更改公司名称周围的标记,如:

<td align="right">
  <asp:Label id="lblName" runat="server" Text='<%# Eval("CompanyName") %>' /> 
</td>

创建一个私有变量

private _lastCompany As String = ""

在事件处理程序中

Public Sub ItemDatabound(e As RepeaterItemEventArgs) ..
   Dim data As ClassType = CType(e.Item.DataItem, ClassType)
   If (data.CompanyName = _lastCompany) Then
      e.Item.FindControl("lblName").Visible = False
   End If

   _lastCompany = data.CompanyName
End Sub

您可以使用ItemDataBound事件获取行的值,并与具有前一项的变量进行比较。在前一行与当前行匹配的任何时候隐藏控件。

© www.soinside.com 2019 - 2024. All rights reserved.