StrongCoders.com Community

Where the extreme coders hang out.
Welcome to StrongCoders.com Community Sign in | Join | Help

C# GridView Sorting/Paging w/o a DataSourceControl DataSource

If you set AllowPaging="true" or AllowSorting="true" on a GridView control without using a DataSourceControl DataSource (i.e. SqlDataSource, ObjectDataSource), you 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, you have to add event handlers for sorting and paging.

Click here to test script below live

<% @ Page Language ="C#" %>

 

<% @ Import Namespace ="System.Data" %>

<% @ Import Namespace ="System.Data.OleDb" %>

 

< script runat ="server">    

    private void PopulatePublishersGridView()

    {

        string connectionString = AccessConnectionString();

        OleDbConnection accessConnection = new OleDbConnection (connectionString);

 

        string sqlQuery = "SELECT [PubID], [Name], [Company Name], [Address], [City], [State], [Zip], [Telephone], [Fax], [Comments] FROM Publishers ORDER BY [Name] ASC;" ;

 

        OleDbCommand accessCommand = new OleDbCommand (sqlQuery, accessConnection);

 

        OleDbDataAdapter publishersDataAdapter = new OleDbDataAdapter (accessCommand);

        DataTable publishersDataTable = new DataTable ( "Publishers" );

        publishersDataAdapter.Fill(publishersDataTable);

 

        int dataTableRowCount = publishersDataTable.Rows.Count;

 

        if (dataTableRowCount > 0)

        {

            gridViewPublishers.DataSource = publishersDataTable;

            gridViewPublishers.DataBind();

        }

    }

 

    private string AccessConnectionString()

    {

        string accessDatabasePath = Server.MapPath( "~/App_Data/biblio.mdb" );

        return String .Format( "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};" , accessDatabasePath);

    }

 

    private string GridViewSortDirection

    {

        get { return ViewState[ "SortDirection" ] as string ?? "DESC" ; }

        set { ViewState[ "SortDirection" ] = value ; }

    }

 

    private string GridViewSortExpression

    {

        get { return ViewState[ "SortExpression" ] as string ?? string .Empty; }

        set { ViewState[ "SortExpression" ] = value ; }

    }

 

    private string GetSortDirection()

    {

        switch (GridViewSortDirection)

        {

            case "ASC" :

                GridViewSortDirection = "DESC" ;

                break ;

 

            case "DESC" :

                GridViewSortDirection = "ASC" ;

                break ;

        }

 

        return GridViewSortDirection;

    }

 

    protected void gridViewPublishers_PageIndexChanging( object sender, GridViewPageEventArgs e)

    {

        gridViewPublishers.DataSource = SortDataTable(gridViewPublishers.DataSource as DataTable , true );

        gridViewPublishers.PageIndex = e.NewPageIndex;

        gridViewPublishers.DataBind();

    }

 

    protected DataView SortDataTable( DataTable dataTable, bool isPageIndexChanging)

    {

        if (dataTable != null )

        {

            DataView dataView = new DataView (dataTable);

            if (GridViewSortExpression != string .Empty)

            {

                if (isPageIndexChanging)

                {

                    dataView.Sort = string .Format( "{0} {1}" , GridViewSortExpression, GridViewSortDirection);

                }

                else

                {

                    dataView.Sort = string .Format( "{0} {1}" , GridViewSortExpression, GetSortDirection());

                }

            }

            return dataView;

        }

        else

        {

            return new DataView ();

        }

    }

 

    protected void gridViewPublishers_Sorting( object sender, GridViewSortEventArgs e)

    {

        GridViewSortExpression = e.SortExpression;

        int pageIndex = gridViewPublishers.PageIndex;

        gridViewPublishers.DataSource = SortDataTable(gridViewPublishers.DataSource as DataTable , false );

        gridViewPublishers.DataBind();

        gridViewPublishers.PageIndex = pageIndex;

    }

 

    protected void Page_Init( object sender, EventArgs e)

    {

        PopulatePublishersGridView();

    }

 

script >

 

DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

< html xmlns ="http://www.w3.org/1999/xhtml">

< head runat ="server">

    < title > GridView Sorting/Paging without a DataSourceControl DataSource title >

head >

< body >

    < form id ="form" runat ="server">

        < div >

            < asp : GridView ID ="gridViewPublishers" AllowPaging ="true" AllowSorting ="true" AutoGenerateColumns ="false"

                EmptyDataText ="No records found" PagerSettings-Mode ="NumericFirstLast" PageSize ="25"

                OnPageIndexChanging ="gridViewPublishers_PageIndexChanging" OnSorting ="gridViewPublishers_Sorting"

                runat ="server">

                < AlternatingRowStyle BackColor ="LightGray" />

                < HeaderStyle BackColor ="Gray" Font-Bold ="true" Font-Names ="Verdana" Font-Size ="Small" />

                < PagerStyle BackColor ="DarkGray" Font-Names ="Verdana" Font-Size ="Small" />

                < RowStyle Font-Names ="Verdana" Font-Size ="Small" />

                < Columns >

                    < asp : BoundField DataField ="PubID" HeaderText ="Publisher ID" SortExpression ="PubID" />

                    < asp : BoundField DataField ="Name" HeaderText ="Name" SortExpression ="Name" />

                    < asp : BoundField DataField ="Company Name" HeaderText ="Company Name" SortExpression ="Company Name" />

                    < asp : BoundField DataField ="Address" HeaderText ="Address" SortExpression ="Address" />

                    < asp : BoundField DataField ="City" HeaderText ="City" SortExpression ="City" />

                    < asp : BoundField DataField ="State" HeaderText ="State" SortExpression ="State" />

                    < asp : BoundField DataField ="Zip" HeaderText ="Zip" SortExpression ="Zip" />

                    < asp : BoundField DataField ="Telephone" HeaderText ="Telephone" SortExpression ="Telephone" />

                    < asp : BoundField DataField ="Fax" HeaderText ="Fax" SortExpression ="Fax" />

                    < asp : BoundField DataField ="Comments" HeaderText ="Comments" SortExpression ="Comments" />

                Columns >

            asp : GridView >

        div >

    form >

body >

html >

Powered by Community Server, by Telligent Systems