用于分页的控件 Label lblCurrentPage; Label lblPageCount; Label lblRowsCount; LinkButton btnFirst; LinkButton btnPrev; LinkButton btnNext; LinkButton btnLast;
在GridView的OnInit方法中,初始化这些控件 在控件的Oninit方法初始化分页控件 protected override void OnInit(EventArgs e) { this.EnableViewState = true; lblCurrentPage = new Label(); lblCurrentPage.ForeColor = ColorTranslator.FromHtml("#e78a29"); lblCurrentPage.Text = "1"; lblPageCount = new Label(); lblPageCount.Text = "1"; lblRowsCount = new Label(); lblRowsCount.ForeColor = ColorTranslator.FromHtml("#e78a29"); btnFirst = new LinkButton(); btnFirst.Text = "首页"; btnFirst.Command += new CommandEventHandler(NavigateToPage); btnFirst.CommandName = "Pager"; btnFirst.CommandArgument = "First"; btnPrev = new LinkButton(); btnPrev.Text = "上一页"; btnPrev.Command += new CommandEventHandler(NavigateToPage); btnPrev.CommandName = "Pager"; btnPrev.CommandArgument = "Prev"; btnNext = new LinkButton(); btnNext.Text = "下一页"; btnNext.Command += new CommandEventHandler(NavigateToPage); btnNext.CommandName = "Pager"; btnNext.CommandArgument = "Next"; btnLast = new LinkButton(); btnLast.Text = "尾页"; btnLast.Command += new CommandEventHandler(NavigateToPage); btnLast.CommandName = "Pager"; btnLast.CommandArgument = "Last"; base.OnInit(e); }
然后是关键部分的代码,就是将这些控件如何添加到GridView中,通过在创建子控件的方式,如下: 在创建子控件的方法中添加分页控件 protected override int CreateChildControls(System.Collections.IEnumerable dataSource, bool dataBinding) { int res = base.CreateChildControls(dataSource, dataBinding); if (ShowToolBar) { try { GridViewRow row = new GridViewRow(0, 0, DataControlRowType.Pager, DataControlRowState.Normal); TableCell c = new TableCell(); c.Width = Unit.Percentage(100); c.ColumnSpan = this.Columns.Count; row.Cells.Add(c); TableCell cell1 = new TableCell(); Table table = new Table(); TableRow r = new TableRow(); table.Rows.Add(r); table.Width = Unit.Percentage(100); c.Controls.Add(table); r.Cells.Add(cell1); Literal l1 = new Literal(); l1.Text = "页次:"; cell1.Controls.Add(l1); cell1.Wrap = false; cell1.Controls.Add(lblCurrentPage); l1 = new Literal(); l1.Text = "页/"; cell1.Controls.Add(l1); cell1.Controls.Add(lblPageCount); l1 = new Literal(); l1.Text = "页,共"; cell1.Controls.Add(l1); cell1.Controls.Add(lblRowsCount); l1 = new Literal(); l1.Text = "条记录"; cell1.HorizontalAlign = HorizontalAlign.Left; cell1.Controls.Add(l1); TableCell cell2 = new TableCell(); cell2.HorizontalAlign = HorizontalAlign.Right; cell2.Wrap = false; l1 = new Literal(); l1.Text = " ["; cell2.Controls.Add(l1); cell2.Controls.Add(btnFirst); l1 = new Literal(); l1.Text = "] "; cell2.Controls.Add(l1); l1 = new Literal(); l1.Text = " ["; cell2.Controls.Add(l1); cell2.Controls.Add(btnPrev); l1 = new Literal(); l1.Text = "] "; cell2.Controls.Add(l1); l1 = new Literal(); l1.Text = " ["; cell2.Controls.Add(l1); cell2.Controls.Add(btnNext); l1 = new Literal(); l1.Text = "] "; cell2.Controls.Add(l1); l1 = new Literal(); l1.Text = " ["; cell2.Controls.Add(l1); cell2.Controls.Add(btnLast); l1 = new Literal(); l1.Text = "] "; cell2.Controls.Add(l1); r.Cells.Add(cell2); this.Controls[0].Controls.AddAt(0, row); } catch { } } return res; }
下面就是处理分页的事件,类似于RowCommand public void NavigateToPage( object sender, CommandEventArgs e) { btnFirst.Enabled = true; btnPrev.Enabled = true; btnNext.Enabled = true; btnLast.Enabled = true; switch (e.CommandArgument.ToString()) { case "Prev": if (this.PageIndex > 0) { this.PageIndex -= 1; } break; case "Next": if (this.PageIndex < (this.PageCount - 1)) { this.PageIndex += 1; } break; case "First": this.PageIndex = 0; break; case "Last": this.PageIndex = this.PageCount - 1; break; } if (this.PageIndex == 0) { btnFirst.Enabled = false; btnPrev.Enabled = false; if (this.PageCount == 1) { btnLast.Enabled = false; btnNext.Enabled = false; } } else if (this.PageIndex == this.PageCount - 1) { btnLast.Enabled = false; btnNext.Enabled = false; } OnBind(); }
这样就轻而易举的实现了一个个性的分页,欢迎各位大虾拍砖。 上篇文章地址: