Okay, I gotcha. This just seemed like such a simple question that I think I was just trying to make it more complicated than it was.
Using your example, the column whose header text you want to change is the second column.
Let's also assume you have a radio buttom selector like this:
Code:
<asp:RadioButtonList ID="RadioButtonList1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="RadioButtonList1_SelectedIndexChanged">
<asp:ListItem Selected="True" Text="Race" Value="Race" />
<asp:ListItem Text="Level" Value="Level" />
</asp:RadioButtonList>
In the SelectedIndexChanged event (the same event that kicks off the query) you can use the Value text of the selected item to set the header text of the second column...
Code:
protected void RadioButtonList1_SelectedIndexChanged(object sender, EventArgs e)
{
// do query and databinding here
GridView1.Columns[1].HeaderText = RadioButtonList1.SelectedValue;
}