Мне кажется, что вам нужно использовать DataList, а не DataGrid.DataList позволяет вам указать RepeatColumns и RepeatDirection.
В этом случае кажется, что вы хотите, чтобы RepeatDirection был вертикальным.Затем вы просто выясните, сколько столбцов вы хотите.
Я не уверен, что вам нужно, чтобы SQL был другим.Кажется, это проблема формата, а не вопроса.
Хорошо, я думаю, что смотрел на это неправильно.Извини за это.Теперь я вижу, что вы хотите получить роль для всех трех курсов слева, а затем для всех курсов для этой роли справа.
Возможно, есть несколько способов справиться с этим.Одним из способов было бы использовать два повторителя.Это создаст таблицу (вам нужно добавить строку заголовка в).Если у вас не одинаковое количество курсов для каждой роли, вам придется позаботиться о столбцах с помощью columnpan.
<asp:Repeater ID="repRoles" runat="server">
<HeaderTemplate>
<table>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><%# Eval("Role") %></td>
<asp:Repeater id="repCourses" runat="server">
<ItemTemplate>
<td>
<%# Eval("Subject") %>
</td>
<td>
<%# Eval("Marks") %>
</td>
<td>
<%# Eval("LetterGrade") %>
</td>
</ItemTemplate>
</asp:Repeater>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
Вы можете использовать событие ItemDataBound первого повторителя, чтобы затем связать соответствующийкурсы ко второму повторителю.