最近项目中有一个需求,实现数字页面分页,还能动态的根据总页数显示页码,顿时SX了,寻思,琢磨了很久现把核心代码发布一下
protected void PagerButton_Command(object sender, System.Web.UI.WebControls.CommandEventArgs e)
{
string commandStr = e.CommandName;
if (!ValidataISDigist(commandStr))
{
switch (commandStr)
{
case "begin":
this.GvShow.PageIndex = 0;
GeneNextNum(GvShow.PageIndex.ToString());
break;
case "before":
if (this.GvShow.PageIndex > 0)
{
this.GvShow.PageIndex -= 1;
GeneNextNum(GvShow.PageIndex.ToString());
}
; break;
case "after":
if (this.GvShow.PageIndex < this.GvShow.PageCount - 1)
{
this.GvShow.PageIndex += 1;
string page= GvShow.PageIndex.ToString();
GeneNextNum(page);
}
; break;
case "end":
this.GvShow.PageIndex = this.GvShow.PageCount - 1;
GeneNextNum(GvShow.PageIndex.ToString());
break;
}
}
else {
GeneNextNum(commandStr);
GvShow.PageIndex = int.Parse(commandStr) - 1;
}
BindView();
InitButtons();
}
//create digit num
private void GeneNextNum(string commandStr)
{
int toPage = int.Parse(commandStr);
int pageCount = GvShow.PageCount;
//5 is stand for that every time show five digit buttons
if (toPage < 5)
{
lb1.Text = 1.ToString();
lb1.CommandName = lb1.Text;
lb2.Text = 2.ToString();
lb2.CommandName = lb2.Text;
lb3.Text = 3.ToString();
lb3.CommandName = lb3.Text;
lb4.Text = 4.ToString();
lb4.CommandName = lb4.Text;
lb5.Text = 5.ToString();
lb5.CommandName = lb5.Text;
}
else if(toPage<=GvShow.PageCount)
{
int div = toPage / 5;
int mod = GvShow.PageCount % 5;
lb1.Text = (div * 5).ToString();
lb1.CommandName = lb1.Text;
lb2.Text = (div * 5 + 1).ToString();
lb2.CommandName = lb2.Text;
lb3.Text = (div * 5 + 2).ToString();
lb3.CommandName = lb3.Text;
lb4.Text = (div * 5 + 3).ToString();
lb4.CommandName = lb4.Text;
lb5.Text = (div * 5 + 4).ToString();
lb5.CommandName = lb5.Text;
ShowOrHideLinkButton(false);
//for (int i = 1; i <= mod;i++ ) {
// LinkButton lb = new LinkButton();
// lb.ID = "lb" + i;
// InitLinkButton(lb);
//}
}
}
private void InitLinkButton(LinkButton lb)
{
switch (lb.ID)
{
case "lb1":
lb1.Visible = true;
lb1.Enabled = true;
break;
case "lb2":
lb2.Visible = true;
lb2.Enabled = true;
break;
case "lb3":
lb3.Visible = true;
lb3.Enabled = true;
break;
case "lb4":
lb4.Visible = true;
lb4.Enabled = true;
break;
case "lb5":
lb5.Visible = true;
lb5.Enabled = true;
break;
}
}
/// <summary>
/// show or hide digit num
/// </summary>
/// <param name="flag"></param>
private void ShowOrHideLinkButton(bool flag)
{
lb1.Visible = flag;
lb1.Enabled = flag;
lb2.Visible = flag;
lb2.Enabled = flag;
lb3.Visible = flag;
lb3.Enabled = flag;
lb4.Visible = flag;
lb4.Enabled = flag;
lb5.Visible = flag;
lb5.Enabled = flag;
}
private bool ValidataISDigist(string strCommand)
{
string rex = @"^[0-9]*{1}quot;;
return Regex.IsMatch(strCommand, rex);
}
private void InitButtons()
{
//int to = gv.PageSize * (gv.PageIndex + 1);
//int from = to - (gv.PageSize - 1);
//return from + "-" + to;
//txtNowPage.Text = (this.GvShow.PageIndex + 1).ToString();
//txtAllPage.Text = this.GvShow.PageCount.ToString();
//txtTotal.Text = (GvShow.PageCount).ToString();
//txtNowRed.Text = this.GvShow.PageSize.ToString();
int to =GvShow.PageSize*(GvShow.PageIndex+1);
int from=to-(GvShow.PageSize-1);
txtNowPage.Text = from.ToString();
txtAllPage.Text = to.ToString();
txtTotal.Text = GvShow.PageCount.ToString();
drpPageNumbers.SelectedValue = GvShow.PageIndex.ToString();
this.cmdbegin.Enabled = false;
this.cmdbefore.Enabled = false;
this.cmdafter.Enabled = false;
this.cmdend.Enabled = false;
if (this.GvShow.PageCount > 1)
{
this.cmdbegin.Enabled = true;
this.cmdbefore.Enabled = true;
this.cmdafter.Enabled = true;
this.cmdend.Enabled = true;
if (this.GvShow.PageIndex == 0)
{
this.cmdbegin.Enabled = false;
this.cmdbefore.Enabled = false;
}
else if (this.GvShow.PageIndex == this.GvShow.PageCount - 1)
{
this.cmdafter.Enabled = false;
this.cmdend.Enabled = false;
}
}
int quotient = GvShow.PageCount / 5;
int mod = GvShow.PageCount % 5;
//gridview page count is less than and equals to 5
if (quotient == 0)
{
for (int i = 1; i <= GvShow.PageCount; i++)
{
LinkButton lb = new LinkButton();
lb.ID = "lb" + i.ToString();
InitLinkButton(lb);
}
}
else
{
ShowOrHideLinkButton(true);
}
}
后续会发布完整版