One thing to keep in mind is how much data this is going to be displaying. If this is a big dataset, then the user will have a longer load time compared to a datagrid, and I would probably stay away from listviews or templategrids for this. If its a smaller dataset, then your current design should be fine.
I usually use listviews when trying to build nicely styled tables. Two classes that will be very helpful in this situation will be "table-spaceless" and "table-header". For the header table, add both of these classes, and for the table inside the template grid, use table-spaceless. You will find that the template grid will look more similar to a datagrid with these two classes.
One potential issue with your implementation is that you lose the native datagrid functionality such as search & paging support. If this is not something that you care about, then you are good to go IOP.
Otherwise, I would suggest the following: If you only want to change the look of the header maybe you can use some css hacks to hide the standard datagrid header and instead show your own custom header, while keeping the rest of the table as it is.
Hope this helps,