datagrid有个创建项时触发的事件ItemCreated,可以在这个事件中添加自定义代码来完成对datagrid自带的数字分页的功能补充,添加前页后页第一页最后一页以及跳转等相应功能,代码如下:
private void Dg_ResultList_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Pager)
{
TableCell pager = (TableCell) e.Item.Controls[0];
pager.HorizontalAlign = HorizontalAlign.Center;
// 首页链接
LinkButton LB_FirstPage = new LinkButton();
LB_FirstPage.Text = "首页 " ;
LB_FirstPage.CommandName = "Page";
LB_FirstPage.CommandArgument = "1";
pager.Controls.AddAt(0,LB_FirstPage);
Label L_split = new Label();
L_split.Text = " ";
pager.Controls.AddAt(1,L_split);
for (int i = 0; i < pager.Controls.Count; i += 2)
{
Object o = pager.Controls[i];
if (o is LinkButton)
{
// 非当前页码
LinkButton linkButton = (LinkButton) o;
linkButton.Text = linkButton.Text ; //"[" + + "]"
}
else if( o is Label)
{
// 当前页码
Label label = (Label) o;
label.Text = "[<b>" + label.Text + "</b>]"; //<b> </b>
}
}
// pager.Controls.Add(L_split);
// 末页链接
LinkButton LB_LastPage = new LinkButton();
LB_LastPage.Text = " 末页 " ;
LB_LastPage.CommandName = "Page";
LB_LastPage.CommandArgument = ((DataGrid)sender).PageCount.ToString();
pager.Controls.Add(LB_LastPage);
// 添加页码信息
Label lb = new Label();// LinkButton();
lb.Text = "第"+(Dg_ResultList.CurrentPageIndex+1).ToString()+"/"+
Dg_ResultList.PageCount.ToString()+"页 " ;
pager.Controls.Add(lb);
// 结果数功能难以实现,似乎此事件发生时还不能取到结果总数?
// lb = new Label();// LinkButton();
// lb.Text = "共查到篇 " ;
// lb.ID = "lbl_RecCount";
// pager.Controls.Add(lb);
// 添加跳转信息
lb = new Label();
lb.Text = "到";
pager.Controls.Add(lb);
// 目的页
TextBox tb = new TextBox();
tb.ID = "txt_JunmToPageIndex";
tb.Width = 30;
pager.Controls.Add(tb);
lb = new Label();
lb.Text = "页" ;
pager.Controls.Add(lb);
Button Btn_Go = new Button();
Btn_Go.Text = "GO";
Btn_Go.Click +=new EventHandler(Btn_Go_Click);
pager.Controls.Add(Btn_Go);
}
}
private void Btn_Go_Click(object sender, EventArgs e)
{
int index;
// ASP.Net找不到ItemCreate是创建的txt_JunmToPageIndex文本框,需要用下面方式实现
try
{
index = Convert.ToInt32( Request.Form["Dg_ResultList:_ctl1:txt_JunmToPageIndex"] );
}
catch
{
return;
}
if( index<=0 || index > Dg_ResultList.PageCount)
return;
// index = ( index > Dg_ResultList.PageCount)?Dg_ResultList.PageCount:index;
Dg_ResultList.CurrentPageIndex = index -1 ;
Bind();
}