dinsdag 1 juli 2008

Één ItemTemplate voor Item en AlternatingItem in ASP.NET ListView control

In het ListView control in ASP.NET 3.x is het mogelijk om een ItemTemplate én een AlternatingItemTemplate te definiëren. Veelal wordt dit gebruikt om alleen maar een andere Style of CssClass te gebruiken voor het alternating item, zodat een mooier (subjectief natuurlijk ;-)) grid wordt gecreëerd.

In plaats van twee (bijna) identieke item templates te creëren is er een eenvoudigere oplossing mogelijk:
*** ASPX ***
<ItemTemplate>
   <tr class="<%# GetListItemCssName(Container) %>">
      <td>...</td>
   <tr>
</ItemTemplate>


*** CS ***
.protected string GetListItemCssName(object container)
{
   if (container is ListViewDataItem)
   {
      if (((ListViewDataItem)container).DisplayIndex % 2 == 0)
         return "Item";
      else
         return "AlternatingItem";
   }
   return null;
}

Zoals je ziet maak ik maar één template aan, nl. het ItemTemplate. Daar waar de variatie tussen een item en alternating item toegepast moet worden (in dit geval de class attribuut van de tabel regel) roep ik een methode in mijn code-behind aan.
De methode in de code-behind bepaalt aan de hand van de DisplayIndex of het om een even of oneven regel gaat en geeft de juiste class name terug.

1 opmerking:

Dennis Smit zei

Geen werving en selectiebureaus, enkel werkgevers! Solliciteer dus rechtstreeks bij de werkgever. Check jouw ict vacature!