Thursday, February 17, 2011

Sorting / Paging on Asp.Net GridView without a DataSourceControl DataSource

If we set AllowPaging="true" or AllowSorting="true" on a GridView control without using a DataSourceControl DataSource (i.e. SqlDataSource, ObjectDataSource),
we will run into the following errors:

When changing the page on the GridView control:

"The GridView 'GridViewID' fired event PageIndexChanging which wasn't handled."

When clicking a column name to sort the column on the GridView control:

"The GridView 'GridViewID' fired event Sorting which wasn't handled."

As a result of not setting the DataSourceID property of the GridView to a DataSourceControl DataSource, we have to add event handlers for sorting and paging.


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_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
gridView.PageIndex = e.NewPageIndex;
gridView.DataBind();
}

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();
}
}

No comments: