【问题标题】:ASP.NET Repeater Group by DataASP.NET 中继器按数据分组
【发布时间】:2019-07-23 13:35:06
【问题描述】:

我正在使用 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

【问题讨论】:

  • 您是要在 UI 上还是在源头处理分组?后者可以让您更轻松地构建您的 UI。请包含您检索数据的代码。
  • Car_Name 列的数据是硬编码的。有什么办法可以分组吗?

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


【解决方案1】:

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

<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 事件来获取行的值,并与具有前一项的变量进行比较。只要上一行与当前行匹配,就隐藏控件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    相关资源
    最近更新 更多