In my opinion there are 2 ways of doing it:
1. Make your datasource such that it resembels what is required in the datagrid. Say, For example, you make a array of array and the base array would have table rows in it. So it would be like Array A has two arrays and each of the array has data from the Table row.
and then you simply do a custom binding of your datagrid by calling the event handler of databinding.
2. Other method is more adhoc, where you generate table dynamically. so you declare asp:Table as runat server and then in code behind you add rows and columns in it.