拖到页面上,点击按钮出来的新页 PageIndex 不完全对,首页、尾页的变灰也不准确,不知道错在哪里。using System;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Design;
using System.Runtime.CompilerServices;
using System.Text.RegularExpressions;
using System.Web.UI;
using System.Web.UI.Design;
using System.Web.UI.WebControls;
using System.Collections;[assembly: TagPrefix("Shove.Web.UI", "ShoveWebUI")]
namespace Shove.Web.UI
{
/// <summary>
/// 委托
/// </summary>
public delegate void PageIndexChangeEvent(object sender, PageChangeEventArgs e); /// <summary>
/// 分页组件,仅触发 OnPageIndexChange 回传事件,请在此事件中使用 BindData 等操作。
/// </summary>
[DefaultProperty("PageSize"), ToolboxData("<{0}:ShovePager runat=server></{0}:ShovePager>"), DefaultEvent("PageIndexChanged")]
public class ShovePager : WebControl, INamingContainer, IPostBackEventHandler
{
private Label labPageTotal;
private LinkButton lbFirst;
private LinkButton lbPrevious;
private LinkButton lbNext;
private LinkButton lbLast;
private DropDownList ddlPages;
private Table tbl; [Description("改变页时激发的事件"), Category("Event"), Browsable(true)]
public event PageIndexChangeEvent PageIndexChange; protected virtual void OnPageIndexChange(PageChangeEventArgs e)
{
if (PageIndexChange != null)
{
PageIndexChange(this, e);
}
} public void RaisePostBackEvent(string eventArgument)
{
if (!String.IsNullOrEmpty(eventArgument))
{
this.PageIndex = Convert.ToInt32(eventArgument);
}
} #region 按钮、下拉选择的事件处理 private void lbFirst_OnClick(object sender, System.EventArgs e)
{
PageIndex = 0; PageChangeEventArgs pe = new PageChangeEventArgs(PageIndex);
OnPageIndexChange(pe);
} private void lbPrevious_OnClick(object sender, System.EventArgs e)
{
PageIndex = PageIndex - 1; PageChangeEventArgs pe = new PageChangeEventArgs(PageIndex);
OnPageIndexChange(pe);
} private void lbNext_OnClick(object sender, System.EventArgs e)
{
PageIndex = PageIndex + 1; PageChangeEventArgs pe = new PageChangeEventArgs(PageIndex);
OnPageIndexChange(pe);
} private void lbLast_OnClick(object sender, System.EventArgs e)
{
PageIndex = PageCount - 1; PageChangeEventArgs pe = new PageChangeEventArgs(PageIndex);
OnPageIndexChange(pe);
} private void DownDropList_OnSelectedChanged(object sender, System.EventArgs e)
{
PageIndex = int.Parse(ddlPages.SelectedItem.Value); PageChangeEventArgs pe = new PageChangeEventArgs(PageIndex);
OnPageIndexChange(pe);
} #endregion #region 基本属性 [Description("总行数"), Category("Appearance"), DefaultValue(0), Browsable(true)]
public int RowCount
{
get
{
object obj = this.ViewState["RowCount"]; if (obj != null)
{
return (int)obj;
} return 0;
}
set
{
if (value < 0)
{
throw new Exception("RowCount must be greater or equal than zero.");
} this.ViewState["RowCount"] = value;
CalcPageCount();
}
} [Description("每页的行数"), Category("Appearance"), DefaultValue(20), Browsable(true)]
public int PageSize
{
get
{
object obj = this.ViewState["PageSize"]; if (obj != null)
{
return (int)obj;
} return 20;
}
set
{
if (value < 1)
{
throw new Exception("PageSize must be greater than zero.");
} this.ViewState["PageSize"] = value;
CalcPageCount();
}
} private void CalcPageCount()
{
this.ViewState["PageCount"] = (RowCount / PageSize) + ((RowCount % PageSize) == 0 ? 0 : 1);
} [Description("总页数"), Browsable(false)]
public int PageCount
{
get
{
object obj = this.ViewState["PageCount"]; if (obj != null)
{
return (int)obj;
} return 0;
}
} [Description("当前页"), Category("Appearance"), DefaultValue(0), Browsable(true)]
public int PageIndex
{
get
{
object obj = this.ViewState["PageIndex"]; if (obj != null)
{
return (int)obj;
} return 0;
}
set
{
this.ViewState["PageIndex"] = value;
}
} [Description("上一页按钮文字"), Category("Appearance"), DefaultValue("上一页"), Browsable(true)]
public string PreviousPageText
{
get
{
object obj = this.ViewState["PreviousPageText"];
if (obj == null)
{
this.PreviousPageText = "上一页"; return "上一页";
} return (string)obj;
}
set
{
this.ViewState["PreviousPageText"] = value;
}
} [Description("下一页按钮文字"), Category("Appearance"), DefaultValue("上一页"), Browsable(true)]
public string NextPageText
{
get
{
object obj = this.ViewState["NextPageText"];
if (obj == null)
{
this.NextPageText = "下一页";
}
if (obj != null)
{
return (string)obj;
}
return "下一页";
}
set
{
this.ViewState["NextPageText"] = value;
}
} [Description("首页按钮文字"), Category("Appearance"), DefaultValue("首 页"), Browsable(true)]
public string FirstPageText
{
get
{
object obj = this.ViewState["FirstPageText"];
if (obj == null)
{
this.FirstPageText = "首 页";
}
if (obj != null)
{
return (string)obj;
}
return "首 页";
}
set
{
this.ViewState["FirstPageText"] = value;
}
} [Description("尾页按钮文字"), Category("Appearance"), DefaultValue("尾 页"), Browsable(true)]
public string LastPageText
{
get
{
object obj = this.ViewState["LastPageText"];
if (obj == null)
{
this.LastPageText = "尾 页";
}
if (obj != null)
{
return (string)obj;
}
return "尾 页";
}
set
{
this.ViewState["LastPageText"] = value;
}
} [Description("第几页代替“第”子的文字"), Category("Appearance"), DefaultValue("第"), Browsable(true)]
public string GoToPageTextBefore
{
get
{
object obj = this.ViewState["GoToPageTextBefore"];
if (obj == null)
{
this.GoToPageTextBefore = "第";
}
if (obj != null)
{
return (string)obj;
}
return "第";
}
set
{
this.ViewState["GoToPageTextBefore"] = value;
}
} [Description("第几页代替“页”子的文字"), Category("Appearance"), DefaultValue("页"), Browsable(true)]
public string GoToPageTextAfter
{
get
{
object obj = this.ViewState["GoToPageTextAfter"];
if (obj == null)
{
this.GoToPageTextAfter = "页";
}
if (obj != null)
{
return (string)obj;
}
return "页";
}
set
{
this.ViewState["GoToPageTextAfter"] = value;
}
} #endregion
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Design;
using System.Runtime.CompilerServices;
using System.Text.RegularExpressions;
using System.Web.UI;
using System.Web.UI.Design;
using System.Web.UI.WebControls;
using System.Collections;[assembly: TagPrefix("Shove.Web.UI", "ShoveWebUI")]
namespace Shove.Web.UI
{
/// <summary>
/// 委托
/// </summary>
public delegate void PageIndexChangeEvent(object sender, PageChangeEventArgs e); /// <summary>
/// 分页组件,仅触发 OnPageIndexChange 回传事件,请在此事件中使用 BindData 等操作。
/// </summary>
[DefaultProperty("PageSize"), ToolboxData("<{0}:ShovePager runat=server></{0}:ShovePager>"), DefaultEvent("PageIndexChanged")]
public class ShovePager : WebControl, INamingContainer, IPostBackEventHandler
{
private Label labPageTotal;
private LinkButton lbFirst;
private LinkButton lbPrevious;
private LinkButton lbNext;
private LinkButton lbLast;
private DropDownList ddlPages;
private Table tbl; [Description("改变页时激发的事件"), Category("Event"), Browsable(true)]
public event PageIndexChangeEvent PageIndexChange; protected virtual void OnPageIndexChange(PageChangeEventArgs e)
{
if (PageIndexChange != null)
{
PageIndexChange(this, e);
}
} public void RaisePostBackEvent(string eventArgument)
{
if (!String.IsNullOrEmpty(eventArgument))
{
this.PageIndex = Convert.ToInt32(eventArgument);
}
} #region 按钮、下拉选择的事件处理 private void lbFirst_OnClick(object sender, System.EventArgs e)
{
PageIndex = 0; PageChangeEventArgs pe = new PageChangeEventArgs(PageIndex);
OnPageIndexChange(pe);
} private void lbPrevious_OnClick(object sender, System.EventArgs e)
{
PageIndex = PageIndex - 1; PageChangeEventArgs pe = new PageChangeEventArgs(PageIndex);
OnPageIndexChange(pe);
} private void lbNext_OnClick(object sender, System.EventArgs e)
{
PageIndex = PageIndex + 1; PageChangeEventArgs pe = new PageChangeEventArgs(PageIndex);
OnPageIndexChange(pe);
} private void lbLast_OnClick(object sender, System.EventArgs e)
{
PageIndex = PageCount - 1; PageChangeEventArgs pe = new PageChangeEventArgs(PageIndex);
OnPageIndexChange(pe);
} private void DownDropList_OnSelectedChanged(object sender, System.EventArgs e)
{
PageIndex = int.Parse(ddlPages.SelectedItem.Value); PageChangeEventArgs pe = new PageChangeEventArgs(PageIndex);
OnPageIndexChange(pe);
} #endregion #region 基本属性 [Description("总行数"), Category("Appearance"), DefaultValue(0), Browsable(true)]
public int RowCount
{
get
{
object obj = this.ViewState["RowCount"]; if (obj != null)
{
return (int)obj;
} return 0;
}
set
{
if (value < 0)
{
throw new Exception("RowCount must be greater or equal than zero.");
} this.ViewState["RowCount"] = value;
CalcPageCount();
}
} [Description("每页的行数"), Category("Appearance"), DefaultValue(20), Browsable(true)]
public int PageSize
{
get
{
object obj = this.ViewState["PageSize"]; if (obj != null)
{
return (int)obj;
} return 20;
}
set
{
if (value < 1)
{
throw new Exception("PageSize must be greater than zero.");
} this.ViewState["PageSize"] = value;
CalcPageCount();
}
} private void CalcPageCount()
{
this.ViewState["PageCount"] = (RowCount / PageSize) + ((RowCount % PageSize) == 0 ? 0 : 1);
} [Description("总页数"), Browsable(false)]
public int PageCount
{
get
{
object obj = this.ViewState["PageCount"]; if (obj != null)
{
return (int)obj;
} return 0;
}
} [Description("当前页"), Category("Appearance"), DefaultValue(0), Browsable(true)]
public int PageIndex
{
get
{
object obj = this.ViewState["PageIndex"]; if (obj != null)
{
return (int)obj;
} return 0;
}
set
{
this.ViewState["PageIndex"] = value;
}
} [Description("上一页按钮文字"), Category("Appearance"), DefaultValue("上一页"), Browsable(true)]
public string PreviousPageText
{
get
{
object obj = this.ViewState["PreviousPageText"];
if (obj == null)
{
this.PreviousPageText = "上一页"; return "上一页";
} return (string)obj;
}
set
{
this.ViewState["PreviousPageText"] = value;
}
} [Description("下一页按钮文字"), Category("Appearance"), DefaultValue("上一页"), Browsable(true)]
public string NextPageText
{
get
{
object obj = this.ViewState["NextPageText"];
if (obj == null)
{
this.NextPageText = "下一页";
}
if (obj != null)
{
return (string)obj;
}
return "下一页";
}
set
{
this.ViewState["NextPageText"] = value;
}
} [Description("首页按钮文字"), Category("Appearance"), DefaultValue("首 页"), Browsable(true)]
public string FirstPageText
{
get
{
object obj = this.ViewState["FirstPageText"];
if (obj == null)
{
this.FirstPageText = "首 页";
}
if (obj != null)
{
return (string)obj;
}
return "首 页";
}
set
{
this.ViewState["FirstPageText"] = value;
}
} [Description("尾页按钮文字"), Category("Appearance"), DefaultValue("尾 页"), Browsable(true)]
public string LastPageText
{
get
{
object obj = this.ViewState["LastPageText"];
if (obj == null)
{
this.LastPageText = "尾 页";
}
if (obj != null)
{
return (string)obj;
}
return "尾 页";
}
set
{
this.ViewState["LastPageText"] = value;
}
} [Description("第几页代替“第”子的文字"), Category("Appearance"), DefaultValue("第"), Browsable(true)]
public string GoToPageTextBefore
{
get
{
object obj = this.ViewState["GoToPageTextBefore"];
if (obj == null)
{
this.GoToPageTextBefore = "第";
}
if (obj != null)
{
return (string)obj;
}
return "第";
}
set
{
this.ViewState["GoToPageTextBefore"] = value;
}
} [Description("第几页代替“页”子的文字"), Category("Appearance"), DefaultValue("页"), Browsable(true)]
public string GoToPageTextAfter
{
get
{
object obj = this.ViewState["GoToPageTextAfter"];
if (obj == null)
{
this.GoToPageTextAfter = "页";
}
if (obj != null)
{
return (string)obj;
}
return "页";
}
set
{
this.ViewState["GoToPageTextAfter"] = value;
}
} #endregion
protected override void CreateChildControls()
{
labPageTotal = new Label();
labPageTotal.ID = "labPageTotal";
labPageTotal.Text = "共 " + PageCount.ToString() + " 页"; lbFirst = new LinkButton();
lbFirst.ID = "lbFirst";
lbFirst.Text = FirstPageText;
lbFirst.Visible = true;
lbFirst.Click += new EventHandler(lbFirst_OnClick);
lbFirst.CssClass = this.CssClass; lbPrevious = new LinkButton();
lbPrevious.ID = "lbPrevious";
lbPrevious.Text = PreviousPageText;
lbPrevious.Visible = true;
lbPrevious.Click += new EventHandler(lbPrevious_OnClick);
lbPrevious.CssClass = this.CssClass; lbNext = new LinkButton();
lbNext.ID = "lbNext";
lbNext.Text = NextPageText;
lbNext.Visible = true;
lbNext.Click += new EventHandler(lbNext_OnClick);
lbNext.CssClass = this.CssClass; lbLast = new LinkButton();
lbLast.ID = "lbLast";
lbLast.Text = LastPageText;
lbLast.Visible = true;
lbLast.Click += new EventHandler(lbLast_OnClick);
lbLast.CssClass = this.CssClass; ddlPages = new DropDownList();
ddlPages.ID = "ddlPages";
ddlPages.AutoPostBack = true;
ddlPages.SelectedIndexChanged += new EventHandler(DownDropList_OnSelectedChanged);
ddlPages.Items.Clear(); for (int i = 0; i < PageCount; i++)
{
ddlPages.Items.Add(new ListItem((i + 1).ToString(), i.ToString()));
} if (this.PageIndex == 0)
{
lbFirst.Enabled = false;
lbPrevious.Enabled = false;
}
if (this.PageIndex == this.PageCount - 1)
{
lbLast.Enabled = false;
lbNext.Enabled = false;
} if (this.RowCount == 0)
{
lbFirst.Enabled = false;
lbPrevious.Enabled = false;
lbLast.Enabled = false;
lbNext.Enabled = false;
ddlPages.Enabled = false;
} if (PageCount > 0)
{
ddlPages.SelectedIndex = PageIndex;
} tbl = new Table();
tbl.CssClass = this.CssClass; tbl.Width = this.Width;
TableRow row = new TableRow();
row.Width = Unit.Parse("100%");
int cellIndex = 0;
cellIndex = row.Cells.Add(new TableCell());
row.Cells[cellIndex].Controls.Add(labPageTotal);
row.Cells[cellIndex].Style[HtmlTextWriterStyle.TextAlign] = "center";
cellIndex = row.Cells.Add(new TableCell());
row.Cells[cellIndex].Controls.Add(lbFirst);
row.Cells[cellIndex].Style[HtmlTextWriterStyle.TextAlign] = "center";
cellIndex = row.Cells.Add(new TableCell());
row.Cells[cellIndex].Controls.Add(lbPrevious);
row.Cells[cellIndex].Style[HtmlTextWriterStyle.TextAlign] = "center";
cellIndex = row.Cells.Add(new TableCell());
row.Cells[cellIndex].Controls.Add(lbNext);
row.Cells[cellIndex].Style[HtmlTextWriterStyle.TextAlign] = "center";
cellIndex = row.Cells.Add(new TableCell());
row.Cells[cellIndex].Controls.Add(lbLast);
row.Cells[cellIndex].Style[HtmlTextWriterStyle.TextAlign] = "center";
cellIndex = row.Cells.Add(new TableCell());
row.Cells[cellIndex].Text = GoToPageTextBefore;
row.Cells[cellIndex].Style[HtmlTextWriterStyle.TextAlign] = "right";
cellIndex = row.Cells.Add(new TableCell());
row.Cells[cellIndex].Controls.Add(ddlPages);
row.Cells[cellIndex].Style[HtmlTextWriterStyle.TextAlign] = "center";
cellIndex = row.Cells.Add(new TableCell());
row.Cells[cellIndex].Text = GoToPageTextAfter;
row.Cells[cellIndex].Style[HtmlTextWriterStyle.TextAlign] = "left";
tbl.Rows.Add(row); this.Controls.Add(tbl); base.CreateChildControls();
} #region Render public override void RenderBeginTag(HtmlTextWriter writer)
{
writer.WriteLine();
writer.WriteLine("<!-- ShovePager Start -->");
} public override void RenderEndTag(HtmlTextWriter writer)
{
writer.WriteLine();
writer.WriteLine("<!-- ShovePager End -->");
} protected override void RenderContents(HtmlTextWriter output)
{
base.RenderContents(output);
} #endregion
}
}