Search code examples
c#asp.nethtml-tablerepeater

Hide Repeater columns based on user privileges


Can somebody explain to me how to hide a repeater column based on the user privileges.

Say I have:

<asp:Repeater ID="repeater" runat="server>
  <HeaderTemplate>
    <table id="table_id">
      <tr>
        <th>Name</th>
        <th>Secret Info</th>
      <tr>
  </HeaderTemplate>
  <ItemTemplate>
      <tr>
        <td><asp:Label ID="Label1" runat="server" Text='<%# Eval("Name") %>' /></td>
        <td><asp:Label ID="Label1" runat="server" Text='<%# Eval("SecretInfo") %>' /></td>
      <tr>
  <ItemTemplate>
  <AlternatingItemTemplate>
      <tr>
        <td><asp:Label ID="Label1" runat="server" Text='<%# Eval("Name") %>' /></td>
        <td><asp:Label ID="Label1" runat="server" Text='<%# Eval("SecretInfo") %>' /></td>
      <tr>
  <AlternatingItemTemplate>
  <FooterTemplate>
    </table>
  </FooterTemplate>
</asp:Repeater>

How would I only display the 'Secret Info' column to logged on users?


Solution

  • You can render the <td> elements conditionally. This simplified example presumes you have a Page-level property that indicates whether or not the user is logged on (you'll want to do the same thing in the header template):

    <asp:Repeater ID="repeater" runat="server>
        <ItemTemplate>
            <tr>
                <td><asp:Label ID="Label1" runat="server" Text='<%# Eval("Name") %>'  /></td>
                <% if (this.UserIsLoggedOn) { %>
                <td><asp:Label ID="Label2" runat="server" Text='<%# Eval("SecretInfo") %>' /></td>
                <% } %>
            <tr>
        </ItemTemplate>
    </asp:Repeater>