【发布时间】:2018-02-10 22:22:32
【问题描述】:
背景:我的数据模型是List<PersonDetail>,其中PersonDetail包含FirstName、LastName等属性,List可以是任意大小。
我想创建一个可以并排比较这些PersonDetails 的表。这意味着对于每一列,我需要将数据放在一个 PersonDetail 中,并将其分布在我的 8 行中。然后对下一个PersonDetail 执行相同操作。
我有一个约束,我只能使用 Asp.Net 控件(ListView、GridView、Repeater 等)以及 control.DataSource 和 control.DataBind() 来创建我的表。
我想做的模板是这样的:
<LayoutTemplate>
<table>
<tr>
<asp:PlaceHolder runat="server" ID="itemPlaceHolder1"></asp:PlaceHolder>
</tr>
<tr>
<asp:PlaceHolder runat="server" ID="itemPlaceHolder2"></asp:PlaceHolder>
</tr>
<!-- and so on -->
</table>
</LayoutTemplate>
<ItemTemplate1>
<td>
<asp:Label ID="LabelFirstName" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "FirstName")%>'></asp:Label>
</td>
</ItemTemplate1>
<ItemTemplate2>
<td>
<asp:Label ID="LabelLastName" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "LastName")%>'></asp:Label>
</td>
</ItemTemplate2>
<!-- and so on -->
上面的ItemTemplates 将是表中唯一重复的部分。
我已经尝试了所有三个控制选项,但如果不使代码隐藏复杂化,它似乎不受支持。
我可以使用更好的数据模型来与另一个控件交互吗?我见过像DataTable 这样的解决方案,但不确定这是否能解决我的问题..
有什么想法吗?
【问题讨论】:
-
为什么不用
<table>包裹Repeater 并在每个ItemTemplate中创建<tr> -
这个问题,如果我没记错的话,Repeater 会为每个 PersonDetail 创建一组新的 8 行,我最终会得到 1 列 8 x Details.count 数行数。
-
您可以在ItemTemplate中创建任意数量的表格行和列,无需将自己限制为一个
<td> -
Asp.Net 不支持我上面的示例(多个 ItemTemplates)。如果我重复一个
我最终会将该行附加到表格的底部,而不是添加一列 我发布了一个简单的例子。您不需要为类中的每个属性创建一个模板。
标签: c# asp.net html-table datamodel