【问题标题】:How can I create a table with dynamic columns using asp.net controls?如何使用 asp.net 控件创建具有动态列的表?
【发布时间】:2018-02-10 22:22:32
【问题描述】:

背景:我的数据模型是List<PersonDetail>,其中PersonDetail包含FirstNameLastName等属性,List可以是任意大小。

我想创建一个可以并排比较这些PersonDetails 的表。这意味着对于每一列,我需要将数据放在一个 PersonDetail 中,并将其分布在我的 8 行中。然后对下一个PersonDetail 执行相同操作。

我有一个约束,我只能使用 Asp.Net 控件(ListViewGridViewRepeater 等)以及 control.DataSourcecontrol.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 这样的解决方案,但不确定这是否能解决我的问题..

有什么想法吗?

【问题讨论】:

  • 为什么不用&lt;table&gt; 包裹Repeater 并在每个ItemTemplate 中创建&lt;tr&gt;
  • 这个问题,如果我没记错的话,Repeater 会为每个 PersonDetail 创建一组新的 8 行,我最终会得到 1 列 8 x Details.count 数行数。
  • 您可以在ItemTemplate中创建任意数量的表格行和列,无需将自己限制为一个&lt;td&gt;
  • Asp.Net 不支持我上面的示例(多个 ItemTemplates)。如果我重复一个 我最终会将该行附加到表格的底部,而不是添加一列
  • 我发布了一个简单的例子。您不需要为类中的每个属性创建一个模板。

标签: c# asp.net html-table datamodel


【解决方案1】:
<table border="1">
    <asp:Repeater ID="Repeater1" runat="server">
        <ItemTemplate>
            <tr>
                <td><%# DataBinder.Eval(Container.DataItem, "FirstName") %></td>
                <td><%# DataBinder.Eval(Container.DataItem, "LastName") %></td>
            </tr>
            <tr>
                <td><%# DataBinder.Eval(Container.DataItem, "Street") %></td>
                <td><%# DataBinder.Eval(Container.DataItem, "City") %></td>
            </tr>
        </ItemTemplate>
    </asp:Repeater>
</table>

【讨论】:

  • 好的,谢谢,我会尝试这种方法,但我担心我只会得到一列。我们拭目以待。
  • 我已经切换到使用带有自动生成列的 DataTable 和 GridView。不过谢谢!
猜你喜欢
相关资源
最近更新 更多
热门标签