使用Repeater控制ASP.NET 3.5的可变列数

时间:2011-11-14 07:19:24

标签: asp.net data-binding repeater dynamic

其中一个页面包含Repeater控件。之前,我将静态数量的列绑定到转发器。例如,我的存储过程将返回员工的姓名,年龄,薪水,电话,DOB。所以我可以使用如下

<ItemTemplate>
 <tr>
   <td>
     <asp:Label ID="lblSalary" runat="server" Text='<%#Eval("Salary")%>' ToolTip="Salary"></asp:Label>
   </td>
 </tr>
</ItemTemplate>

现在我想改变设计。我有一个设置页面,我会说这里应列出哪些列。有些时候我只需要列出姓名和年龄等。所以我不能硬编码Repeater的设计。处理这种情况的最佳方法是什么?向项目模板动态添加标签是否合适?

2 个答案:

答案 0 :(得分:1)

您可以将GridView与TemplateFields一起使用。根据您显示的设置或隐藏列。在这里您可以找到documentation of the TemplateField

编辑:另一个比Repeater更灵活的控件是ListView

如果要使用Repeater Control,可以使用占位符打开和关闭单列。只需将每列放入PlaceHolder并打开和关闭可见性。您也可以使用UserControl而不是PlaceHolder。

编辑2:使用PlaceHolder的解决方案可能如下所示:

<ItemTemplate>
 <tr> 
  <asp:PlaceHolder Visible="<%# IsSalaryVisible %>" runat="server"> 
     <td> 
       <asp:Label ID="lblSalary" runat="server" Text='<%#Eval("Salary")%>' ToolTip="Salary"></asp:Label> 
     </td> 
   </asp:PlaceHolder>
  <asp:PlaceHolder Visible="<%# IsNameVisible %>" runat="server"> 
     <td> 
       <asp:Label ID="lblSalary" runat="server" Text='<%#Eval("Name")%>' ToolTip="Salary"></asp:Label> 
     </td> 
   </asp:PlaceHolder>
  </tr> 
</ItemTemplate> 

答案 1 :(得分:1)

一种方法是为可能显示的每个字段设置用户控件。同一用户是否控制可配置的所有字段或每个字段的单独控件。然后,当您绑定转发器时,您可以相应地设置控件的Visible属性。

这是你想要的方向吗?