Thomas Bandt

Über mich | Kontakt | Archiv

ASP.NET - DataList rendert SeparatorTermplate falsch

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.



« Zurück  |  Weiter »