Credo che l'unica soluzione sia un TemplateField.
codice:
<Columns>
<asp:TemplateField>
<ItemTemplate>
<table border=1>
<tr>
<td>
<asp:Label ID="Nome" runat="server" Text='<%# Container.DataItem("nome") %>'></asp:Label>
</td>
<td>
<asp:Label ID="Cognome" runat="server" Text='<%# Container.DataItem("cognome") %>'></asp:Label>
</td>
<td>
<asp:Label ID="Indirizzo" runat="server" Text='<%# Container.DataItem("indirizzo") %>'></asp:Label>
</td>
</tr>
<tr>
<td colspan="3" align="left">
<asp:Label ID="Note" runat="server" Text='<%# Container.DataItem("note") %>'></asp:Label>
</td>
</tr>
</table>
</ItemTemplate>
</asp:TemplateField>
</columns>
Insomma, devi cambiare metodo e non creare piu' le colonne a runtime