Das DataList-Control rendert (getestet in ASP.NET 2.0) das Separator-Template falsch. Und zwar falsch in dem Sinne, dass es schlicht "Umbrüche" ignoriert, wenn man als Layout table verwendet.
Beispiel:
Man möchte in einer Tabelle vier Spalten haben, getrennt durch eine Platzhalter-Spalte, die man via SeparatorTemplate definiert. Dazu sollte es genügen die nötigen Templates anzulegen und RepeatColumns auf 4 zu setzen. Im Ergebnis müssten jetzt also 7 Spalten gerendert werden - 4 Content-Spalten und 3 Platzhalter-Spalten:
Content | Content | Content | Content
Das DataList-Control rendert allerdings 8 Spalten - weil es den Umbruch nach dem 4. Item ignoriert.
Content | Content | Content | Content |
Beim Float-Layout wäre das in Ordnung, nicht aber beim Table-Layout. Behelfen kann man sich durch eine Methode, die das überflüssige Item einfach wieder entfernt:
<asp:DataList ID="RProducts" OnItemDataBound="RProducts_OnItemDataBound" ...
protected void RProducts_OnItemDataBound(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Separator)
{
if(((e.Item.ItemIndex +1) % 4) == 0)
e.Item.Controls.Clear();
}
}
Das Leeren der Controls-Collection ist übrigens mehr oder weniger ein Workaround, da Visible=false in dem Fall nicht funktioniert.