using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class Default3 : System.Web.UI.Page
{
int totalPages;
public int CurrentPage
{
get
{
// look for current page in ViewState
object o = this.ViewState["_CurrentPage"];
if (o == null)
return 0; // default page index of 0
else
return (int)o;
}
set
{
this.ViewState["_CurrentPage"] = value;
}
}
private int RowCount
{
get
{
return (int)ViewState["RowCount"];
}
set
{
ViewState["RowCount"] = value;
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
FetchData(2, 0);
}
else
{
PlaceHolder2.Controls.Clear();
CreatePagingControl(totalPages,CurrentPage);
}
}
private void FetchData(int take, int pageSize)
{
using (DataClassesDataContext dc = new DataClassesDataContext())
{
var count = dc.Firmis.Count();
var query = from p in dc.Firmis
.OrderBy(o => o.Firma)
.Take(take)
.Skip(pageSize)
select new
{
Firma = p.Firma,
Website = "http://" + p.Website,
Email = p.Email,
Logo_Path = p.Logo_Path,
Count = dc.Firmis.Count()
};
PagedDataSource page = new PagedDataSource();
page.AllowCustomPaging = true;
page.AllowPaging = true;
page.DataSource = query;
page.PageSize = 2;
totalPages = count/2;
page.CurrentPageIndex = CurrentPage;
DataList1.DataSource = page;
DataList1.DataBind();
if (!IsPostBack)
{
RowCount = query.First().Count;
CreatePagingControl(totalPages,CurrentPage);
}
}
}
private void CreatePagingControl(int totalPages,int currentPage)
{
Label spacer = new Label();
spacer.Text = " ";
LinkButton lnk = new LinkButton();
Label dots = new Label();
spacer.Text = "...";
if (totalPages == 1)
return;
LinkButton lnkFirst = new LinkButton();
lnkFirst.Click += new EventHandler(lnkFirst_Click);
lnkFirst.ID = "lnkPageFirst";
lnkFirst.Text = "First";
PlaceHolder2.Controls.Add(lnkFirst);
PlaceHolder2.Controls.Add(spacer);
if (currentPage > 1)
{
LinkButton lnkPrevious = new LinkButton();
lnkPrevious.Click += new EventHandler(lnkPrevious_Click);
lnkPrevious.ID = "lnkPagePrevious";
lnkPrevious.Text = "Previous";
lnkPrevious.Enabled = true;
PlaceHolder2.Controls.Add(lnkPrevious);
PlaceHolder2.Controls.Add(spacer);
}
else
{
LinkButton lnkPrevious = new LinkButton();
lnkPrevious.Click += new EventHandler(lbl_Click);
lnkPrevious.ID = "lnkPagePrevious";
lnkPrevious.Text = "Previous";
lnkPrevious.Enabled = false;
PlaceHolder2.Controls.Add(lnkPrevious);
PlaceHolder2.Controls.Add(spacer);
}
if (currentPage > 2)
{
PlaceHolder2.Controls.Add(dots);
PlaceHolder2.Controls.Add(spacer);
if ( currentPage == totalPages && totalPages > 3 )
{
lnk.Click += new EventHandler(lbl_Click);
lnk.ID = "lnkPage" + (currentPage-2).ToString();
lnk.Text = (currentPage-2).ToString();
PlaceHolder2.Controls.Add(lnk);
PlaceHolder2.Controls.Add(spacer);
lnk.Click += new EventHandler(lbl_Click);
lnk.ID = "lnkPage" + currentPage.ToString();
lnk.Text = currentPage.ToString();
PlaceHolder2.Controls.Add(lnk);
PlaceHolder2.Controls.Add(spacer);
}
}
if (currentPage != 1 && currentPage != totalPages)
{
lnk.Click += new EventHandler(lbl_Click);
lnk.ID = "lnkPage" + currentPage.ToString();
lnk.Text = currentPage.ToString();
PlaceHolder2.Controls.Add(lnk);
PlaceHolder2.Controls.Add(spacer);
}
if (currentPage < (totalPages - 1))
{
lnk.Click += new EventHandler(lbl_Click);
lnk.ID = "lnkPage" + (currentPage+1).ToString();
lnk.Text = (currentPage + 1).ToString();
PlaceHolder2.Controls.Add(lnk);
PlaceHolder2.Controls.Add(spacer);
if (currentPage == 1 && totalPages > 3)
{
lnk.Click += new EventHandler(lbl_Click);
lnk.ID = "lnkPage" + (currentPage+2).ToString();
lnk.Text = (currentPage + 2).ToString();
PlaceHolder2.Controls.Add(lnk);
PlaceHolder2.Controls.Add(spacer);
}
PlaceHolder2.Controls.Add(dots);
PlaceHolder2.Controls.Add(spacer);
}
if (currentPage < totalPages)
{
LinkButton lnkNext = new LinkButton();
lnkNext.Click += new EventHandler(lnkNext_Click);
lnkNext.ID = "lnkPageNext";
lnkNext.Text = "Next";
lnkNext.Enabled = true;
PlaceHolder2.Controls.Add(lnkNext);
PlaceHolder2.Controls.Add(spacer);
}
else
{
LinkButton lnkNext = new LinkButton();
lnkNext.Click += new EventHandler(lnkNext_Click);
lnkNext.ID = "lnkPageNext";
lnkNext.Text = "Next";
lnkNext.Enabled = false;
PlaceHolder2.Controls.Add(lnkNext);
PlaceHolder2.Controls.Add(spacer);
}
LinkButton lnkLast = new LinkButton();
lnkLast.Click += new EventHandler(lnkLast_Click);
lnkLast.ID = "lnkPage" + totalPages.ToString();
lnkLast.Text = "Last";
PlaceHolder2.Controls.Add(lnkLast);
PlaceHolder2.Controls.Add(spacer);
//for (int i = 0; i < (RowCount / 10) + 1; i++)
//{
// LinkButton lnk = new LinkButton();
// lnk.Click += new EventHandler(lbl_Click);
// lnk.ID = "lnkPage" + (i + 1).ToString();
// lnk.Text = (i + 1).ToString();
// PlaceHolder2.Controls.Add(lnk);
// Label spacer = new Label();
// spacer.Text = " ";
// PlaceHolder2.Controls.Add(spacer);
//}
}
void lbl_Click(object sender, EventArgs e)
{
LinkButton lnk = sender as LinkButton;
int currentPage = int.Parse(lnk.Text);
int take = currentPage * 2;
int skip = currentPage == 1 ? 0 : take - 2;
FetchData(take, skip);
}
void lnkPrevious_Click(object sender, EventArgs e)
{
LinkButton lnkPrevious = sender as LinkButton;
int take = (CurrentPage-1) * 2;
int skip = CurrentPage-1;
FetchData(take, skip);
}
void lnkFirst_Click(object sender, EventArgs e)
{
LinkButton lnkFirst = sender as LinkButton;
int take = 2;
int skip = 0;
FetchData(take,skip);
}
void lnkLast_Click(object sender, EventArgs e)
{
LinkButton lnkLast = sender as LinkButton;
int take = (totalPages-1)*2;
int skip = totalPages-1;
FetchData(take, skip);
}
void lnkNext_Click(object sender, EventArgs e)
{
LinkButton lnkNext = sender as LinkButton;
int take = (CurrentPage+1) * 2;
int skip = CurrentPage+1;
FetchData(take, skip);
}
}