DataList renders a table with a single TD for each item. The way you design your templates, you trick the DataList to show multiple columns. This results in valid HTML, but is not as the DataList is intended to be used. The control does not analyze the templates and check for further TDs that the styles should be applied to.
I'd suggest to use another control that is designed to show multiple controls:
- DataGrid or GridView. A good comparison of the controls is available here.
- If you need more control over the HTML that is rendered, use a Repeater.
All of the controls support different styles for alternating items (Repeater through a separate template for the alternating items which might result in some duplicated markup).