Here's a sample using Northwind Database
<asp:RadioButtonList ID="rbColums" runat="server" AutoPostBack="true" OnSelectedIndexChanged="rbColumns_Changed">
<asp:ListItem Text="Contact Name" Value="1" Selected="True"></asp:ListItem>
<asp:ListItem Text="Country" Value="2"></asp:ListItem>
<asp:ListItem Text="City" Value="3"></asp:ListItem>
</asp:RadioButtonList>
<br />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:BoundField DataField="ContactName" HeaderText="Contact Name" />
<asp:BoundField DataField="Country" HeaderText="Country" />
<asp:BoundField DataField="City" HeaderText="City" />
</Columns>
</asp:GridView>
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GetSortedData();
}
}
protected void rbColumns_Changed(object sender, EventArgs e)
{
GetSortedData();
}
private void GetSortedData()
{
string conString = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
string query = "Customers_GetSortedCustomers";
SqlCommand cmd = new SqlCommand(query);
cmd.CommandType = CommandType.StoredProcedure;
using (SqlConnection con = new SqlConnection(conString))
{
using (SqlDataAdapter sda = new SqlDataAdapter())
{
cmd.Connection = con;
cmd.Parameters.AddWithValue("@SortOrder", rbColums.SelectedItem.Value);
sda.SelectCommand = cmd;
using (DataSet ds = new DataSet())
{
sda.Fill(ds);
GridView1.DataSource= ds;
GridView1.DataBind();
}
}
}
}
CREATE PROCEDURE Customers_GetSortedCustomers
@SortOrder INT
AS
BEGIN
SET NOCOUNT ON;
SELECT ContactName, Country, City
FROM Customers
ORDER BY
CASE WHEN @SortOrder = 1 THEN ContactName END ASC,
CASE WHEN @SortOrder = 2 THEN Country END ASC,
CASE WHEN @SortOrder = 3 THEN City END ASC
END
GO