5,420,997 members and growing! (14,130 online)
Email Password   helpLost your password?
Web Development » ASP.NET Controls » General     Intermediate

Custom paging and clientside sorting

By Wyxlwiis

An article on custom paging and JavaScript sorting in DataGrid.
C#, Javascript, Windows, .NET 1.1, .NET, ASP.NET, Visual Studio, VS.NET2003, Dev

Posted: 21 Jul 2005
Updated: 21 Jul 2005
Views: 23,339
Bookmarked: 15 times
Announcements
Want a new Job?



Search    
Advanced Search
Sitemap
11 votes for this Article.
Popularity: 2.65 Rating: 2.55 out of 5
5 votes, 45.5%
1
0 votes, 0.0%
2
0 votes, 0.0%
3
2 votes, 18.2%
4
4 votes, 36.4%
5

Sample Image - custompageing.jpg

Introduction

I have seen a lot of samples on custom paging and client side sorting but they all seem to complicate the issues, by either trying to make them fit all situations or creating them as custom controls. Well, like DataGrids, custom controls almost never fit the layout or functionality I'm working on, so I'm always ending up writing a template and custom functionality. So why scan the net for a control that will not properly fix your problem anyway when a few lines of code can do the same. Microsoft has put a lot of effort in their controls and by using them wisely they can solve a lot of problems.

The solution will fetch only the data from the database needed for the current page in the DataGrid. The JavaScript will sort the DataGrid on the first click on the column header ASC and on second DESC. This is meant to be used as template code so you will properly have to customize it to fulfill your needs. "But that's why you are a programmer, right?".

The JavaScript part has been tested to work in IE 6, FireFox 1.0.4 and Opera 8.0. If you need further documentation or explanation don't hesitate to drop me a mail and I'll update the article.

C# Code

public class CustomPageing : System.Web.UI.Page
{
  protected System.Web.UI.WebControls.DataGrid DataGrid1;
  // used to set which column number

  // a linkbutton is in. used by javascript

  protected int colNumber = 0;
  // used to set which row to start sorting eg width

  // pager and header it will be nr 2. used by javascript

  protected int rowstart = 2;
  OdbcCommand cmd;
  OdbcDataAdapter ad;
  DataSet data = new DataSet();
  OdbcConnection con = new OdbcConnection("DRIVER={MySQL ODBC" + 
         " 3.51 Driver};SERVER=localhost;DATABASE=minannonce;");

  private void Page_Load(object sender, System.EventArgs e)
  {
    if(!IsPostBack)
    {
      // for simplicity i have kept this in pageload

      // but should be in a search method

      // set virtual count so Pager know how many pages to prepare

      // we keep it in a Session so we only have to do this once pr search

      cmd = new OdbcCommand("Select Count(*) From Advertisment",con);
      cmd.Connection.Open();
      Session["Count"]= Convert.ToInt32(cmd.ExecuteScalar());
      DataGrid1.VirtualItemCount = Convert.ToInt32(Session["Count"]);
      cmd.Connection.Close();
      fillGrid();
    }
}

public void fillGrid()
{
  // fill grid width the number of advertisments from db

  // this is from a MySql db so rewrite if you use different Db 

  cmd = new OdbcCommand("Select advertismentId, HeadLine," + 
        " Price From Advertisment LIMIT " + 
        DataGrid1.PageSize*DataGrid1.CurrentPageIndex + 
        ","+DataGrid1.PageSize*(DataGrid1.CurrentPageIndex+1)+";",con);
  ad = new OdbcDataAdapter();
  ad.SelectCommand = cmd;
  ad.Fill(data);
  DataGrid1.DataSource = data;
  DataGrid1.DataBind();
}

public void Sort(object sender, System.EventArgs e)
{
  // add javascript eventhandler to columnheader

  ((LinkButton)sender).Attributes.Add("onclick", 
              "sort('"+colNumber+"','"+rowstart+ "','" 
              +DataGrid1.ClientID+"'); return false;");
  colNumber++;
}

private void DataGrid1_PageIndexChanged(object source, 
        System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
  // pageindex changer

  DataGrid1.CurrentPageIndex = e.NewPageIndex;
  fillGrid();
}

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Wyxlwiis


Im a software developer and MCAD

I love .NET and the pure object oriented and event driven programming philosophy.
Occupation: Web Developer
Location: Denmark Denmark

Other popular ASP.NET Controls articles:

Article Top
Sign Up to vote for this article
You must Sign In to use this message board.
FAQ FAQ Noise ToleranceSearch Search Messages 
 Layout  Per page   
 Msgs 1 to 2 of 2 (Total in Forum: 2) (Refresh)FirstPrevNext
Subject  Author Date 
QuestionCast ErrormemberMMaannuu1:18 9 Apr '07  
GeneralQuerymemberhemant.kaushal1:28 15 Nov '05  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 21 Jul 2005
Editor: Smitha Vijayan
Copyright 2005 by Wyxlwiis
Everything else Copyright © CodeProject, 1999-2008
Web10 | Advertise on the Code Project