ASP.NET转发器按数据分组

时间:2019-03-01 13:48:12

标签: html asp.net vb.net html5 asp.net-mvc-4

我正在使用FormView Repeater在表中显示我的数据。但是,我想将相同的数据分组在一起。我共有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

1 个答案:

答案 0 :(得分: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事件获取行的值,并将其与具有前一项的变量进行比较。只要上一行与当前行匹配,就隐藏控件。