You could use a GridView, but you could also get away with using a ListView, which allows for a little more control over your markup. You could, for example, do something like this:
<asp:ListView>
<LayoutTemplate>
<table border="0" cellpadding="1">
<asp:ContentPlaceHolder ID="itemPlaceHolder" runat="server" />
</table>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td>
<asp:Label runat="server" class="lbl_tag"><%#Eval("Tag") %></asp:Label>
</td>
<td>
<asp:Label runat="server" class="lbl_tag"><%#Eval("Tag") %></asp:Label>
</td>
<td>
<asp:Label runat="server" class="lbl_tag"><%#Eval("Tag") %></asp:Label>
</td>
</tr>
</ItemTemplate>
</asp:ListView>
This would give you three columns of "tags". ListView also has some nice properties like the AlternatingItemTemplate. And if you don't want your ListView to render as a table, you can simply modify your template with your own markup. Of course, as I said, you could just as easily use a GridView for this type of thing.