|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Announcements
Chapters
Services
Feature Zones
|
IntroductionThere are several methods on how to create custom paging in Using the CodeTo start with this example, let us create a Website Project and a Class Library Project. Name the Class Library Project, say Add a Web Custom Control and let us name it
Our main objective here is to render the protected override void InitializePager
(GridViewRow row, int columnSpan, PagedDataSource pagedDataSource)
{
if (PagerType == ThisPagerType.Regular)
{
// if PagerType is not DropDownList
// render the regular GridView Pager
base.InitializePager(row, columnSpan, pagedDataSource);
}
else
{
TableCell cell_1;
// if we are going to use dropdownlist
if (PagerType == ThisPagerType.DropDownList)
{
// our Pager with DropDownList control
// create our DropDownList control
DropDownList ddl = new DropDownList();
// populate it with the number of Pages of our GridView
for (int i = 0; i < PageCount; i++)
{
ddl.Items.Add(new ListItem(Convert.ToString(i + 1), i.ToString()));
}
ddl.AutoPostBack = true;
// assign an Event Handler when its Selected Index Changed
ddl.SelectedIndexChanged += new EventHandler(ddl_SelectedIndexChanged);
// synchronize its selected index to GridView's current PageIndex
ddl.SelectedIndex = PageIndex;
// add our first TableCell which will contain the DropDownList
cell_1 = new TableCell();
// we just add a Label with 'Page ' Text
cell_1.Controls.Add(PageOf());
// our DropDownList control here.
cell_1.Controls.Add(ddl);
// and our Total number of Pages
cell_1.Controls.Add(PageTotal());
}
else
{
// if we are going to use the FirstPrevNextLast buttons.
LinkButton first = new LinkButton();
first.Text = "First ";
// first button will always have a value of zero (0)
first.CommandArgument = "0";
first.Enabled = PageIndex > 0;
// add click event handler
first.Click += new EventHandler(navigate_Click);
LinkButton prev = new LinkButton();
prev.Text = "Prev ";
// set Prev button arguments to current PageIndex minus 1
prev.CommandArgument = string.Format("{0}", (PageIndex - 1));
prev.Enabled = (PageIndex > 0);
prev.Click += new EventHandler(navigate_Click);
LinkButton next = new LinkButton();
next.Text = "Next ";
// set Next button arguments to current PageIndex plus 1
next.CommandArgument = string.Format("{0}", (PageIndex + 1));
next.Enabled = (PageIndex < (PageCount - 1));
next.Click += new EventHandler(navigate_Click);
LinkButton last = new LinkButton();
last.Text = "Last";
// Last button will always have a value equal to PageCount minus 1
last.CommandArgument = string.Format("{0}", (PageCount - 1));
last.Enabled = (PageIndex < (PageCount - 1));
last.Click += new EventHandler(navigate_Click);
cell_1 = new TableCell();
// add the First button to cell controls collection
cell_1.Controls.Add(first);
// add the Prev button
cell_1.Controls.Add(prev);
// add the Next button
cell_1.Controls.Add(next);
// add the Last button
cell_1.Controls.Add(last);
}
// create a Table that will replace entirely our GridView's Pager section
Table tbl = new Table();
tbl.BorderWidth = 0;
tbl.Width = Unit.Percentage(100);
// add one TableRow to our Table
tbl.Rows.Add(new TableRow());
// the 2nd TableCell will display the Record number you are currently in.
TableCell cell_2 = new TableCell();
cell_2.Controls.Add(PageInfo(pagedDataSource.DataSourceCount));
// add now the 2 cells to our created row
tbl.Rows[0].Cells.Add(cell_1);
tbl.Rows[0].Cells.Add(cell_2);
tbl.Rows[0].Cells[0].HorizontalAlign = HorizontalAlign.Left;
tbl.Rows[0].Cells[1].HorizontalAlign = HorizontalAlign.Right;
// in Pager's Row of our GridView add a TableCell
row.Controls.AddAt(0, new TableCell());
// sets it span to GridView's number of columns
row.Cells[0].ColumnSpan = Columns.Count;
// finally add our created Table
row.Cells[0].Controls.AddAt(0, tbl);
}
}
protected virtual void navigate_Click(object sender, EventArgs e)
{
OnPageIndexChanging(new GridViewPageEventArgs
(int.Parse(((LinkButton)sender).CommandArgument)));
}
protected virtual void ddl_SelectedIndexChanged(object sender, EventArgs e)
{
// on our DropDownList SelectedIndexChanged event
// call the GridView's OnPageIndexChanging method
// to raise the PageIndexChanging event.
// pass the DropDownList SelectedIndex as its argument.
OnPageIndexChanging(new GridViewPageEventArgs
(((DropDownList)sender).SelectedIndex));
}
private Label PageOf()
{
// it is just a label
Label lbl = new Label();
lbl.Text = "Page ";
return lbl;
}
private Label PageTotal()
{
// a label of GridView's Page Count
Label lbl = new Label();
lbl.Text = string.Format(" of {0}", PageCount);
return lbl;
}
private Label PageInfo(int rowCount)
{
// create a label that will display the current Record you're in
Label label = new Label();
int currentPageFirstRow = ((PageIndex * PageSize) + 1);
int currentPageLastRow = 0;
int lastPageRemainder = rowCount % PageSize;
currentPageLastRow = (PageCount == PageIndex + 1) ?
(currentPageFirstRow + lastPageRemainder - 1) :
(currentPageFirstRow + PageSize - 1);
label.Text = String.Format("Record {0} to {1} of {2}",
currentPageFirstRow, currentPageLastRow, rowCount);
return label;
}
Let us add a [Category("Paging")]
[DefaultValue("1")]
public ThisPagerType PagerType
{
get
{
return (ViewState["PagerType"] != null ?
(ThisPagerType)ViewState["PagerType"] : ThisPagerType.DropDownList);
}
set
{
ViewState["PagerType"] = value;
}
}
public enum ThisPagerType
{
Regular = 0,
DropDownList = 1,
LinkButton = 2
}
Let us modify the if (PagerType != ThisPagerType.DropDownList)
{
// if PagerType is not DropDownList
// render the regular GridView Pager
base.InitializePager(row, columnSpan, pagedDataSource);
}
else
{
if (PagerType == ThisPagerType.DropDownList)
{
// our Pager with DropDownList control
}
else
{
// our Pager with LinkButton controls
}
}
So, that is it! You may compile and distribute the In the Website project we created earlier, add a reference to our Control Library.
Drag three
Add this in the code-behind.. protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindGrid();
}
}
private void BindGrid()
{
// I am using 'Products' table of the 'Northwind' database
SqlConnection cn = new SqlConnection
("server=(local);database=northwind;uid=sa;pwd=;");
string q = "select productname, quantityperunit from products";
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(q, cn);
cn.Open();
da.Fill(ds);
// the 1st GridEuo
GridEuo1.DataSource = ds;
GridEuo1.DataBind();
// the 2nd GridEuo
GridEuo2.DataSource = ds;
GridEuo2.DataBind();
// the 3nd GridEuo
GridEuo3.DataSource = ds;
GridEuo3.DataBind();
cn.Close();
}
protected void GridEuo1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridEuo1.PageIndex = e.NewPageIndex;
BindGrid();
}
protected void GridEuo2_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridEuo2.PageIndex = e.NewPageIndex;
BindGrid();
}
protected void GridEuo3_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridEuo3.PageIndex = e.NewPageIndex;
BindGrid();
}
That's all. Run your project. You should see something like this:
History
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||