allow sorting by column gridview
Solution 1
The GridView does not sort itself. You need to add some code for a GridView sorting event and wire it up.
First, you add the name of the OnSorting
event to the GridView
on the .aspx
page:
<asp:GridView ID="gridView" OnSorting="gridView_Sorting" runat="server" />
Then, you add that event in the code-behind. This example also handles changing the sort direction -- once the user has sorted, they may want to reverse the sort direction, and you have to keep track of that.
private string ConvertSortDirectionToSql(SortDirection sortDirection)
{
string newSortDirection = String.Empty;
switch (sortDirection)
{
case SortDirection.Ascending:
newSortDirection = "ASC";
break;
case SortDirection.Descending:
newSortDirection = "DESC";
break;
}
return newSortDirection;
}
protected void gridView_Sorting(object sender, GridViewSortEventArgs e)
{
DataTable dataTable = gridView.DataSource as DataTable;
if (dataTable != null)
{
DataView dataView = new DataView(dataTable);
dataView.Sort = e.SortExpression + " " + ConvertSortDirectionToSql(e.SortDirection);
gridView.DataSource = dataView;
gridView.DataBind();
}
}
Solution 2
You need to define a sort melhod, and implement it:
<asp:GridView ID="GridView1" **OnSorting="gridViewSorting"** runat="server" />
protected void gridViewSorting(object sender, GridViewSortEventArgs e)
{
DataTable dataTable = gridView.DataSource as DataTable;
if (dataTable != null)
{
DataView dataView = new DataView(dataTable);
dataView.Sort = your sort expression
gridView.DataSource = dataView;
gridView.DataBind();
}
}
Comments
-
Nurlan about 4 years
I am writing project which gets data from Data Acess Layer and show it in GridView. The problem is to allow sorting by column. When I click on head of columnt following occurs following error:
Exception Details: System.Web.HttpException: GridView 'GridView1' Trigger Events Sorting, which has not been processed.
Here the .cs code:
public partial class Default: System.Web.UI.Page { EmployeesTableAdapter eta = new EmployeesTableAdapter(); protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { GridView1.DataSource = eta.GetData(); GridView1.DataBind(); } } }
Here the .aspx code(only gridview):
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True" CellPadding="4" ForeColor="#333333" GridLines="None" AutoGenerateColumns="False"> <AlternatingRowStyle BackColor="White" /> <Columns> <asp:TemplateField HeaderText="Select"> <ItemTemplate> <asp:CheckBox ID="CheckBox1" runat="server"> </asp:CheckBox> </ItemTemplate> </asp:TemplateField> <asp:BoundField DataField="FirstName" HeaderText="FirstName" SortExpression="FirstName" /> <asp:BoundField DataField="LastName" HeaderText="LastName" SortExpression="LastName" /> <asp:BoundField DataField="Country" HeaderText="Country" SortExpression="Country" /> <asp:TemplateField HeaderText="View"> <ItemTemplate> <asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="images/view.png"/> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Edit"> <ItemTemplate> <asp:ImageButton ID="ImageButton2" runat="server" ImageUrl="images/edit.png"/> </ItemTemplate> </asp:TemplateField> </Columns> <EditRowStyle BackColor="#2461BF" /> <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" /> <RowStyle BackColor="#EFF3FB" /> <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" /> <SortedAscendingCellStyle BackColor="#F5F7FB" /> <SortedAscendingHeaderStyle BackColor="#6D95E1" /> <SortedDescendingCellStyle BackColor="#E9EBEF" /> <SortedDescendingHeaderStyle BackColor="#4870BE" /> </asp:GridView>
Does someony know how to allow sorting by columns?