Pls see the code: protected System.Web.UI.HtmlControls.HtmlForm Form1; private void Page_Load(object sender, System.EventArgs e) { SetTempData(); DataGrid dgrid = new DataGrid(); //DataGrid is Created dgrid.ID = "dgrid"; dgrid.PageIndexChanged += new DataGridPageChangedEventHandler(this.dgrid_PageIndexChanged); dgrid.AllowPaging = true; dgrid.PagerStyle.Mode = PagerMode.NumericPages; dgrid.PageSize = 2; Form1.Controls.Add(dgrid); dgrid.AutoGenerateColumns = false; BoundColumn name = new BoundColumn(); name.HeaderText = "Name"; name.DataField = "Name"; dgrid.Columns.Add(name); BoundColumn Id = new BoundColumn(); Id.HeaderText = "ID"; Id.DataField = "ID"; dgrid.Columns.Add(Id); dgrid.DataSource = ((DataTable)ViewState["DT"]).DefaultView; dgrid.DataBind(); } private void dgrid_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e) { DataGrid dgrid = (DataGrid)Form1.FindControl("dgrid"); dgrid.CurrentPageIndex = e.NewPageIndex; dgrid.DataSource = ((DataTable)ViewState["DT"]).DefaultView; dgrid.DataBind(); } private void SetTempData() { DataTable dt = new DataTable(); dt.Columns.Add("ID", typeof(String)); dt.Columns.Add("Name", typeof(String)); DataRow dr; for (int i=0; i<100; i++) { dr = dt.NewRow(); dr["ID"] = i.ToString("000"); dr["Name"] = "Name" + i.ToString("000"); dt.Rows.Add(dr); } ViewState["DT"] = dt; } No pains, no gains.