我有一个以下列格式创建的元组列表
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>
答案 0 :(得分:2)
所以第一个问题是让您的数据结构与您想要显示它的方式相匹配。您希望将数据分组在第一个值上,因此您需要在绑定数据之前执行此操作:
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
肯定在这里工作,但通过使用具有有意义属性名称的类,代码的可读性将得到显着提高。
答案 1 :(得分:0)
您可以使用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
}
}