使用元组创建表结构
本文关键字:结构 创建 元组 | 更新日期: 2023-09-27 18:33:47
我有一个以以下格式创建的元组列表
List<Tuple<String, String, String>> ExtendedSpecsList = new List<Tuple<String, String, String>>();
这些元组的输入将是
{Audio, Type, Speakers - stereo - internal }
{Audio, Output Power / Channel, 2 Watt }
{General, Display Type, LCD monitor / TFT active matrix }
{General, Diagonal Size, 23.6" }
基于此,我正在尝试为元组的每个顶级类别/Item1创建以下HTML结构。豪我能做到吗?或者我应该使用元组以外的其他进程来执行此操作......
<div class="ccs-ds-extendedSpec-group">
<div class="ccs-ds-extendedSpec-header">Audio</div>
<div class="ccs-ds-extendedSpec-body">
<table>
<tbody>
<tr>
<td class="ccs-ds-extendedSpec-item">Type</td>
<td class="ccs-ds-extendedSpec-value">Speakers - stereo - internal</td>
</tr>
<tr>
<td class="ccs-ds-extendedSpec-item" >Output Power/Channel</td>
<td class="ccs-ds-extendedSpec-value" >2 Watt</td>
</tr>
</tbody>
</table>
</div>
</div>
因此,第一个问题是使数据的结构与您希望的显示方式相匹配。 您希望数据在第一个值上分组,因此需要在绑定数据之前执行此操作:
var query = yourOriginalData.GroupBy(item => item.Item1)
.Select(group => new { Category = group.Key, Items = group });
只需进行该更改,它就可以绑定到可以呈现它的东西。
要渲染它,Repeater
将是正确的选择。 在这里,由于主集合中有一个子集合,因此需要嵌套转发器:
<asp:Repeater runat="server" ID="repeater">
<ItemTemplate>
<div class="ccs-ds-extendedSpec-group">
<div class="ccs-ds-extendedSpec-header"><%# Eval("Category") %></div>
<div class="ccs-ds-extendedSpec-body">
<table>
<tbody>
<asp:Repeater runat="server" DataSource='<%# Eval("Items") %>'>
<ItemTemplate>
<tr>
<td class="ccs-ds-extendedSpec-item">
<%# Eval("Item2") %>
</td>
<td class="ccs-ds-extendedSpec-value">
<%# Eval("Item3") %>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</tbody>
</table>
</div>
</div>
</ItemTemplate>
</asp:Repeater>
有了这个,你只需要将你的查询绑定到这个中继器,你就是黄金了。
还值得注意的是,虽然Tuple
在这里肯定有效,但通过使用具有有意义的属性名称的类,代码的可读性将得到显着提高。
可以使用
Linq 按第一个组件筛选ExtendedSpecsList
,如下所示。
var Audio = ExtendedSpecList.Where(iItem => iItem.First == "Audio");
var General = ExtendedSpecList.Where(iItem => iItem.First == "General");
之后,可以单独处理不同的类别。如果事先不知道不同的类别,则可以按如下方式对列表进行分组。
foreach(var Group in ExtendedSpecList.GroupBy(iItem => iItem.First))
{
// do some processing of the group
foreach (var iItem in Group)
{
// do something with an individual item
}
}