This example shall demonstrate how to design tables so screen readers will do their work as expected. The information about the swiss cantons is read from a SharePoint list by a ContentQueryWebPart that is place in a UserControl.
Here is the sample code:
<table>
<tr>
<th scope="col">cantons</th>
<th scope="col">joining</th>
<th scope="col">habitants</th>
<th scope="col">communes</th>
</tr>
<tr>
<th scope="row">Uri</th>
<td>1291</td>
<td>34000</td>
<td>20</td>
</tr>
<tr>
<th scope="row">Schwyz</th>
<td>1291</td>
<td>110800</td>
<td>30</td>
</tr>
</table>
See below how it looks like.