之前是一个用户控件改写的,最近自己要用,就做了一个,效果还可以,以下代码参考:
using System; using System.Data; using System.Drawing; using System.Text; using System.Web; using System.Web.UI;using System.ComponentModel;using System.Web.UI.WebControls; using System.Web.UI.HtmlControls;
namespace WebControls{
[DefaultProperty("Paging"), DefaultEvent("PageIndexChanged"), ControlBuilderAttribute(typeof(DataGridPageBuilder)), ParseChildren(false), PersistChildren(false), Designer(typeof(DataGridPageDesigner)), ToolboxData("<{0}:DataGridPage runat=server></{0}:DataGridPage>")] public class DataGridPage : WebControl, IPostBackEventHandler { private string tmpID; private Unit tmpFirstImagebuttonCellWidth; private Unit tmpPreviousImagebuttonCellWidth; private Unit tmpNextImagebuttonCellWidth; private Unit tmpLastImagebuttonCellWidth; private Unit tmpPageTextLabelCellWidth; private Unit tmpCurrentPageTextCellWidth; private Unit tmpShowPageRolbtnCellWidth; private string tmpDataGridId; private ImageButtonEnable conFirstImagebutton; private ImageButtonEnable conPreviousImagebutton; private ImageButtonEnable conNextImagebutton; private ImageButtonEnable conLastImagebutton; private Label conPageTextLabel; private TextBox conCurPageTextBox; private ImageButtonEnable conShowPageImageButtonEnable; private DataGrid conDataGrid; public event EventHandler PageIndexChanged; public event EventHandler TextBoxEnterReturn; public event EventHandler ButtonClicked;
#region "property" [Category("Data"), DefaultValue(""), NotifyParentProperty(true), Description("datagrid")] public string TargetDataGrid { get { return tmpDataGridId; } set { tmpDataGridId = value; } }
[NotifyParentProperty(true), PersistenceMode(PersistenceMode.InnerProperty), Category("ChildControl"), Description("最前页")] public ImageButtonEnable SubFirstImageButton { get { this.EnsureChildControls(); return conFirstImagebutton; } }
[NotifyParentProperty(true), PersistenceMode(PersistenceMode.InnerProperty), Category("ChildControl"), Description("前一页")] public ImageButtonEnable SubPreviousImageButton { get { this.EnsureChildControls(); return conPreviousImagebutton; } }
[NotifyParentProperty(true), PersistenceMode(PersistenceMode.InnerProperty), Category("ChildControl"), Description("下一页")] public TextBox SubCurPageTextBox { get { this.EnsureChildControls(); return conCurPageTextBox; } }
[NotifyParentProperty(true), PersistenceMode(PersistenceMode.InnerProperty), Category("ChildControl"), Description("页数")] public Label SubPageTextLabel { get { this.EnsureChildControls(); return conPageTextLabel; } }
[NotifyParentProperty(true), PersistenceMode(PersistenceMode.InnerProperty), Category("ChildControl"), Description("下一页")] public ImageButtonEnable SubNextImageButton { get { this.EnsureChildControls(); return conNextImagebutton; } }
[NotifyParentProperty(true), PersistenceMode(PersistenceMode.InnerProperty), Category("ChildControl"), Description("最后页")] public ImageButtonEnable SubLastImageButton { get { this.EnsureChildControls(); return conLastImagebutton; } }
[NotifyParentProperty(true), PersistenceMode(PersistenceMode.InnerProperty), Category("ChildControl"), Description("表示页")] public ImageButtonEnable SubShowPageImageButtonEnable { get { this.EnsureChildControls(); return conShowPageImageButtonEnable; } }
[Category("Appearance"), DefaultValue(typeof(Unit), "19px"), NotifyParentProperty(true), Description("最前页的宽度")] public Unit FirstImagebuttonCellWidth { get { return tmpFirstImagebuttonCellWidth; } set { tmpFirstImagebuttonCellWidth = value; } }
[Category("Appearance"), DefaultValue(typeof(Unit), "12px"), NotifyParentProperty(true), Description("前一页的宽度")] public Unit PreviousImagebuttonCellWidth { get { return tmpPreviousImagebuttonCellWidth; } set { tmpPreviousImagebuttonCellWidth = value; } }
[Category("Appearance"), DefaultValue(typeof(Unit), "31px"), NotifyParentProperty(true), Description("当前页")] public Unit CurPageTextBoxCellWidth { get { return tmpCurrentPageTextCellWidth; } set { tmpCurrentPageTextCellWidth = value; } }
[Category("Appearance"), DefaultValue(typeof(Unit), "24px"), NotifyParentProperty(true), Description("页")] public Unit PageTextLabelCellWidth { get { return tmpPageTextLabelCellWidth; } set { tmpPageTextLabelCellWidth = value; } }
[Category("Appearance"), DefaultValue(typeof(Unit), "12px"), NotifyParentProperty(true), Description("下一页的宽度")] public Unit NextImagebuttonCellWidth { get { return tmpNextImagebuttonCellWidth; } set { tmpNextImagebuttonCellWidth = value; } }
[Category("Appearance"), DefaultValue(typeof(Unit), "19px"), NotifyParentProperty(true), Description("最后页的宽度")] public Unit LastImagebuttonCellWidth { get { return tmpLastImagebuttonCellWidth; } set { tmpLastImagebuttonCellWidth = value; } }
[Category("Appearance"), DefaultValue(typeof(Unit), "0px"), NotifyParentProperty(true), Description("表示页的宽度")] public Unit ShowPageRolbtnCellWidth { get { return tmpShowPageRolbtnCellWidth; } set { tmpShowPageRolbtnCellWidth = value; } }
[Category("Appearance"), DefaultValue(typeof(Unit), "0px"), NotifyParentProperty(true), Description("数据源")] public DataTable DataBindDataSource { get { return (DataTable)ViewState["DataBindDataSource"]; } set { ViewState["DataBindDataSource"] = value; } }
#region "PProperty" [NotifyParentProperty(true)] public override string ID { get { tmpID = (string)((ViewState["id"] == null) ? base.ID: ViewState["id"]); conFirstImagebutton.ID = tmpID + "_FirstImageButton"; conPreviousImagebutton.ID = tmpID + "_PreviousImageButton"; conPageTextLabel.ID = tmpID + "_PageTextLabel"; conNextImagebutton.ID = tmpID + "_NextImageButton"; conLastImagebutton.ID = tmpID + "_LastImageButton"; conCurPageTextBox.ID = tmpID + "_CurPageTextBox"; this.conShowPageImageButtonEnable.ID = tmpID + "_ShowPageImageButtonEnable"; return tmpID; } set { ViewState["id"] = value; } }
[NotifyParentProperty(true)] public override System.Drawing.Color BackColor { get { return base.BackColor; } set { base.BackColor = value; if (!(conFirstImagebutton == null)) { conFirstImagebutton.BackColor = value; } if (!(conPreviousImagebutton == null)) { conPreviousImagebutton.BackColor = value; } if (!(conPageTextLabel == null)) { conPageTextLabel.BackColor = value; } if (!(conNextImagebutton == null)) { conNextImagebutton.BackColor = value; } if (!(conLastImagebutton == null)) { conLastImagebutton.BackColor = value; } if (!(conCurPageTextBox == null)) { conCurPageTextBox.BackColor = value; } if (!(conShowPageImageButtonEnable == null)) { conShowPageImageButtonEnable.BackColor = value; } } }
[NotifyParentProperty(true)] public override System.Drawing.Color BorderColor { get { return base.BorderColor; } set { base.BorderColor = value; } }
[NotifyParentProperty(true)] public override BorderStyle BorderStyle { get { return base.BorderStyle; } set { base.BorderStyle = value; } }
[NotifyParentProperty(true)] public override Unit BorderWidth { get { return base.BorderWidth; } set { base.BorderWidth = value; } }
[NotifyParentProperty(true)] public override System.Drawing.Color ForeColor { get { return base.ForeColor; } set { base.ForeColor = value; if (!(conFirstImagebutton == null)) { conFirstImagebutton.ForeColor = value; } if (!(conPreviousImagebutton == null)) { conPreviousImagebutton.ForeColor = value; } if (!(conPageTextLabel == null)) { conPageTextLabel.ForeColor = value; } if (!(conNextImagebutton == null)) { conNextImagebutton.ForeColor = value; } if (!(conLastImagebutton == null)) { conLastImagebutton.ForeColor = value; } if (!(conCurPageTextBox == null)) { conCurPageTextBox.ForeColor = value; } if (!(conShowPageImageButtonEnable == null)) { conShowPageImageButtonEnable.ForeColor = value; } } }
[NotifyParentProperty(true)] public override Unit Width { get { return base.Width; } set { base.Width = value; } }
[NotifyParentProperty(true)] public override Unit Height { get { return base.Height; } set { base.Height = value; } }
[NotifyParentProperty(true)] public override bool Enabled { get { return base.Enabled; } set { base.Enabled = value; } }
[NotifyParentProperty(true)] public override bool Visible { get { return base.Visible; } set { base.Visible = value; } }
[NotifyParentProperty(true)] public override string CssClass { get { return base.CssClass; } set { base.CssClass = value; if (!(conFirstImagebutton == null)) { conFirstImagebutton.CssClass = value; } if (!(conPreviousImagebutton == null)) { conPreviousImagebutton.CssClass = value; } if (!(conPageTextLabel == null)) { conPageTextLabel.CssClass = value; } if (!(conNextImagebutton == null)) { conNextImagebutton.CssClass = value; } if (!(conLastImagebutton == null)) { conLastImagebutton.CssClass = value; } if (!(conCurPageTextBox == null)) { conCurPageTextBox.CssClass = value; } if (!(conShowPageImageButtonEnable == null)) { conShowPageImageButtonEnable.CssClass = value; } } }#endregion#endregion
public DataGridPage() { this.FirstImagebuttonCellWidth = Unit.Pixel(19); this.PreviousImagebuttonCellWidth = Unit.Pixel(12); this.PageTextLabelCellWidth = Unit.Pixel(24); this.NextImagebuttonCellWidth = Unit.Pixel(12); this.LastImagebuttonCellWidth = Unit.Pixel(19); this.CurPageTextBoxCellWidth = Unit.Pixel(31); this.ShowPageRolbtnCellWidth = Unit.Pixel(0); }
private bool IsDesignMode() { if ((HttpContext.Current == null)) { return true; } else { return false; } }
protected override void CreateChildControls() { if (conFirstImagebutton == null) { conFirstImagebutton = new ImageButtonEnable(); } if (conPreviousImagebutton == null) { conPreviousImagebutton = new ImageButtonEnable(); } if (conCurPageTextBox == null) { conCurPageTextBox = new TextBox(); conCurPageTextBox.Width = Unit.Pixel(28); conCurPageTextBox.Text = "1"; } if (conPageTextLabel == null) { conPageTextLabel = new Label(); conPageTextLabel.Text = " / 1"; } if (conNextImagebutton == null) { conNextImagebutton = new ImageButtonEnable(); } if (conLastImagebutton == null) { conLastImagebutton = new ImageButtonEnable(); } if (conShowPageImageButtonEnable == null) { conShowPageImageButtonEnable = new ImageButtonEnable(); }
this.SubFirstImageButton.Click += new System.Web.UI.ImageClickEventHandler(this.conFirstImagebutton_Click); this.SubNextImageButton.Click += new System.Web.UI.ImageClickEventHandler(this.conNextImagebutton_Click); this.SubPreviousImageButton.Click += new System.Web.UI.ImageClickEventHandler(this.conPreviousImagebutton_Click); this.SubLastImageButton.Click += new System.Web.UI.ImageClickEventHandler(this.conLastImagebutton_Click); this.SubShowPageImageButtonEnable.Click += new System.Web.UI.ImageClickEventHandler(this.conShowPageRolloverImageButton_Click);
SetChildLayout(); } private void SetChildLayout() { Table htmlTable; TableRow htmlTableRow; TableRow nullTableRow; htmlTable = new Table(); htmlTableRow = new TableRow(); htmlTable.Rows.Add(htmlTableRow); htmlTable.BorderWidth = Unit.Pixel(0); htmlTable.CellPadding = 0; htmlTable.CellSpacing = 0; htmlTableRow.Cells.Add(new TableCell()); htmlTableRow.Cells[0].Width = tmpFirstImagebuttonCellWidth; htmlTableRow.Cells[0].HorizontalAlign = HorizontalAlign.Left; htmlTableRow.Cells[0].VerticalAlign = VerticalAlign.Bottom; htmlTableRow.Cells[0].Controls.Add(conFirstImagebutton); htmlTableRow.Cells.Add(new TableCell()); htmlTableRow.Cells[1].Width = this.tmpPreviousImagebuttonCellWidth; htmlTableRow.Cells[1].HorizontalAlign = HorizontalAlign.Left; htmlTableRow.Cells[1].VerticalAlign = VerticalAlign.Bottom; htmlTableRow.Cells[1].Controls.Add(conPreviousImagebutton); htmlTableRow.Cells.Add(new TableCell()); htmlTableRow.Cells[2].RowSpan = 2; htmlTableRow.Cells[2].Width = this.tmpCurrentPageTextCellWidth; htmlTableRow.Cells[2].HorizontalAlign = HorizontalAlign.Left; htmlTableRow.Cells[2].VerticalAlign = VerticalAlign.Bottom; htmlTableRow.Cells[2].Controls.Add(this.conCurPageTextBox); htmlTableRow.Cells.Add(new TableCell()); htmlTableRow.Cells[3].Width = this.tmpPageTextLabelCellWidth; htmlTableRow.Cells[3].HorizontalAlign = HorizontalAlign.Left; htmlTableRow.Cells[3].VerticalAlign = VerticalAlign.Bottom; htmlTableRow.Cells[3].Controls.Add(conPageTextLabel); htmlTableRow.Cells.Add(new TableCell()); htmlTableRow.Cells[4].Width = this.tmpNextImagebuttonCellWidth; htmlTableRow.Cells[4].HorizontalAlign = HorizontalAlign.Left; htmlTableRow.Cells[4].VerticalAlign = VerticalAlign.Bottom; htmlTableRow.Cells[4].Controls.Add(conNextImagebutton); htmlTableRow.Cells.Add(new TableCell()); htmlTableRow.Cells[5].Width = this.tmpLastImagebuttonCellWidth; htmlTableRow.Cells[5].HorizontalAlign = HorizontalAlign.Left; htmlTableRow.Cells[5].VerticalAlign = VerticalAlign.Bottom; htmlTableRow.Cells[5].Controls.Add(conLastImagebutton); htmlTableRow.Cells.Add(new TableCell()); htmlTableRow.Cells[6].Width = this.tmpLastImagebuttonCellWidth; htmlTableRow.Cells[6].HorizontalAlign = HorizontalAlign.Left; htmlTableRow.Cells[6].VerticalAlign = VerticalAlign.Bottom; htmlTableRow.Cells[6].Controls.Add(this.conShowPageImageButtonEnable); nullTableRow = new TableRow(); htmlTable.Rows.Add(nullTableRow); nullTableRow.Cells.Add(new TableCell()); nullTableRow.Cells[0].Height = Unit.Pixel(2); nullTableRow.Cells.Add(new TableCell()); nullTableRow.Cells[1].Height = Unit.Pixel(2); nullTableRow.Cells.Add(new TableCell()); nullTableRow.Cells[2].Height = Unit.Pixel(2); nullTableRow.Cells.Add(new TableCell()); nullTableRow.Cells[3].Height = Unit.Pixel(2); nullTableRow.Cells.Add(new TableCell()); nullTableRow.Cells[4].Height = Unit.Pixel(2); nullTableRow.Cells.Add(new TableCell()); nullTableRow.Cells[5].Height = Unit.Pixel(2); nullTableRow.Cells.Add(new TableCell()); nullTableRow.Cells[6].Height = Unit.Pixel(2); base.Controls.Add(htmlTable); } protected override void OnLoad(EventArgs e) { Paging_Load(this,e); base.OnLoad (e); }
protected override void Render(HtmlTextWriter writer) { this.EnsureChildControls();
if (IsDesignMode()) { base.Controls.Clear(); SetChildLayout(); } base.Render(writer); }
protected override void AddParsedSubObject(object obj) { string[] idName; string tmp;
if ((obj) is ImageButtonEnable) { idName = ((ImageButtonEnable)obj).ID.Split(((string)("_")).ToCharArray()); tmp=idName[idName.Length -1].ToString(); if (tmp.Equals("FirstImageButton")) { this.conFirstImagebutton = (ImageButtonEnable)obj; } if (tmp.Equals("PreviousImageButton")) { this.conPreviousImagebutton = (ImageButtonEnable)obj; } if (tmp.Equals("NextImageButton")) { this.conNextImagebutton = (ImageButtonEnable)obj; } if (tmp.Equals("LastImageButton")) { this.conLastImagebutton = (ImageButtonEnable)obj; } } if ((obj) is Label) { this.conPageTextLabel = (Label)obj; } if ((obj) is TextBox) { this.conCurPageTextBox = (TextBox)obj; } if ((obj) is ImageButtonEnable) { this.conShowPageImageButtonEnable = (ImageButtonEnable)obj; }
}
private void conShowPageRolloverImageButton_Click(object sender, System.Web.UI.ImageClickEventArgs e) { int pageNum; bool errFlag; errFlag = false;
if (!(conCurPageTextBox.Text.Equals("")) && isNumber(conCurPageTextBox.Text)) { pageNum = int.Parse(this.conCurPageTextBox.Text);
if (pageNum < 1 | conDataGrid.PageCount < pageNum) { errFlag = true; } } else { pageNum=1; errFlag = true; }
if (errFlag) { conCurPageTextBox.Text=System.Convert.ToString(conDataGrid.PageCount); conDataGrid.CurrentPageIndex = conDataGrid.PageCount - 1; ReDataBind(sender, e); } else { conDataGrid.CurrentPageIndex = pageNum - 1; ReDataBind(sender, e); }
if (((Control)(sender)) is ImageButtonEnable) { if (ButtonClicked != null) { ButtonClicked(sender, e); } } else if (((Control)(sender)) is TextBox) { if (TextBoxEnterReturn != null) { TextBoxEnterReturn(sender, e); } } }
bool isNumber(string strValue) { int intLoop; int intAsc;
for (intLoop = 0; intLoop < strValue.Length; intLoop++) { intAsc = (int)strValue[intLoop];
if (intAsc < 48 | 57 < intAsc) { return false; } } return true; }
public void RaisePostBackEvent(string eventArgument) { System.Web.UI.ImageClickEventArgs e1 = new ImageClickEventArgs(0, 0);
if (eventArgument.Equals(this.ID + "_EnterReturn")) { conShowPageRolloverImageButton_Click(conCurPageTextBox, e1); } } private void conFirstImagebutton_Click(object sender, System.Web.UI.ImageClickEventArgs e) { base.EnsureChildControls(); conDataGrid.CurrentPageIndex = 0; ReDataBind(sender, e); }
private void conPreviousImagebutton_Click(object sender, System.Web.UI.ImageClickEventArgs e) { base.EnsureChildControls(); conDataGrid.CurrentPageIndex = Math.Max(conDataGrid.CurrentPageIndex - 1, 0); ReDataBind(sender, e); }
private void conLastImagebutton_Click(object sender, System.Web.UI.ImageClickEventArgs e) { base.EnsureChildControls(); conDataGrid.CurrentPageIndex = conDataGrid.PageCount - 1; ReDataBind(sender, e); }
private void conNextImagebutton_Click(object sender, System.Web.UI.ImageClickEventArgs e) { base.EnsureChildControls(); conDataGrid.CurrentPageIndex = Math.Min(conDataGrid.CurrentPageIndex + 1, conDataGrid.PageCount - 1); ReDataBind(sender, e); }
private void ReDataBind(object sender, System.EventArgs e) { conDataGrid.DataSource =this.DataBindDataSource; conDataGrid.DataBind(); ShowDataGridInfo();
if (PageIndexChanged != null) { PageIndexChanged(sender, e); } }
public void ShowDataGridInfo() { int tmpPageCount; int tmpCurrentPageIndex; SetPaingControl(); tmpPageCount = conDataGrid.PageCount; tmpCurrentPageIndex = conDataGrid.CurrentPageIndex;
this.conCurPageTextBox.Text = System.Convert.ToString(tmpCurrentPageIndex + 1); this.conShowPageImageButtonEnable.Enabled = this.conCurPageTextBox.Enabled; this.conPageTextLabel.Text = " / " + tmpPageCount; this.conFirstImagebutton.Enabled = (conDataGrid.CurrentPageIndex != 0); this.conPreviousImagebutton.Enabled = (conDataGrid.CurrentPageIndex != 0); this.conNextImagebutton.Enabled = (conDataGrid.CurrentPageIndex != conDataGrid.PageCount - 1); this.conLastImagebutton.Enabled = (conDataGrid.CurrentPageIndex != conDataGrid.PageCount - 1); }
private void Paging_Load(object sender, System.EventArgs e) { SetPaingControl(); if (!(Page.IsPostBack)) { ShowDataGridInfo(); } }
private void SetPaingControl() { Control ctl; base.EnsureChildControls(); if (tmpDataGridId == null) { throw new Exception("DataGrid没设置"); return ; } ctl = Page.FindControl(tmpDataGridId); conDataGrid = ((DataGrid)(ctl)); if (conDataGrid == null) { throw new Exception(tmpDataGridId + "不存在"); return ; } }
}
}