【问题标题】:Variable number of columns with Repeater control ASP.NET 3.5具有Repeater控件的可变列数ASP.NET 3.5
【发布时间】:2011-11-14 07:19:24
【问题描述】:

其中一个页面包含Repeater 控件。早些时候,我将静态数量的列绑定到转发器。例如,我的存储过程将返回员工的姓名、年龄、工资、电话、出生日期。所以我可以像下面这样使用

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

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

【问题讨论】:

  • 你可以考虑DataGrid吗?操作可变数量的列会更容易
  • 我不能使用DataGrid。我需要定制设计。
  • 哦基。我怎么能用DataGrid 做到这一点?

标签: asp.net data-binding repeater dynamic


【解决方案1】:

一种方法是为每个可能显示的字段设置一个用户控件。是为所有可配置的字段使用相同的用户控件,还是为每个字段使用单独的控件。然后在绑定中继器时,可以相应地设置控件的Visible 属性。

这是你想去的方向吗?

【讨论】:

  • 如果 rauf 只能使用中继器,这是唯一的方法.. +1
【解决方案2】:

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

编辑:另一个比中继器更灵活的控件是ListView

如果您想使用中继器控件,您可以使用占位符来打开和关闭单列。只需将每一列放入 PlaceHolder 并打开和关闭可见性。除了 PlaceHolder,您当然也可以使用 UserControl。

编辑 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> 

【讨论】:

  • 请。我不能使用除Repeater 以外的任何控件:(。请参阅此stackoverflow.com/questions/7397078/…
  • 您必须使用中继器的原因是什么?我试图给你更多的选择(见我的回答)
  • 哦。我也应该改变我的设计吗?
  • 您不必更改 (HTML) 设计。您只需使用不同的服务器控件来生成 HTML。
  • 好吧。我决定将中继器与 PlaceHolder 一起使用。您能否在 PlaceHolder 的上下文中详细说明您的答案?
猜你喜欢
  • 1970-01-01
  • 2011-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多