说是分页控件,其实只显示了页码显示和分页导航功能,具体的数据分页还需要另外写代码实现,因为具体应用中数据分页的实现方法比较多,也比较灵活,所以觉得不包含进来的好,后面我会给出我使用的分页存储过程以及该存储过程和这个分页控件结合起来使用的方法。
源代码如下:
using System;
using System.Collections.Specialized;
using System.Drawing;
using System.IO;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
namespace Eadd.Controls.WebControls
{
/// <summary>
/// 分页控件
/// </summary>
[DefaultProperty("Text"),
ToolboxData("<{0}:PageIndex runat=server></{0}:PageIndex>")]
public class PageIndex : System.Web.UI.WebControls.WebControl
{
private int _current_page;
private int _max_page;
private string _url;
private string _page_arg_name;
private string _other_query_string;
private Color _forecolor2;
public PageIndex()
{
this.CurrentPage = 1;
this.MaxPage = 1;
this.PageArgName = "page";
this.ForeColor = Color.White;
this.ForeColor2 = Color.Gray;
this.URL = "";
this.OtherQueryString = "";
this.Init += new EventHandler(PageIndex_Init);
}
private string PagerID
{
get
{
return this.ID + "_pager";
}
}
private void PageIndex_Init(object sender, System.EventArgs e)
{
this.CurrentPage = 1;
HttpRequest request = this.Page.Request;
this.URL = Path.GetFileName(request.Path);
string[] keys = request.QueryString.AllKeys;
foreach(string key in keys)
{
if(key == this.PageArgName)
this.CurrentPage = Convert.ToInt32(request[key]);
else
this.OtherQueryString += "&" + key + "=" + request[key];
}
string script = "";
script += "<script language='JavaScript'>\r\n";
script += "function eaddpageindexgoto()\r\n";
script += "{\r\n";
script += "var p = document.getElementById('" + PagerID + "')\r\n";
script += "if(p.value != '')\r\n";
script += "{\r\n";
script += "self.location.href='" + this.URL + "?" + this.PageArgName + "=' + p.value + '" + this.OtherQueryString + "'\r\n";
script += "}\r\n";
script += "}\r\n";
script += "</script>\r\n";
if(!this.Page.IsClientScriptBlockRegistered("PageIndexScript"))
this.Page.RegisterClientScriptBlock("PageIndexScript", script);
}
private string URL
{
get
{
return _url;
}
set
{
_url = value;
}
}
private string OtherQueryString
{
get
{
return _other_query_string;
}
set
{
_other_query_string = value;
}
}
public int CurrentPage
{
get
{
return _current_page;
}
set
{
_current_page = value;
}
}
public int MaxPage
{
get
{
return _max_page;
}
set
{
_max_page = value;
}
}
public string PageArgName
{
get
{
return _page_arg_name;
}
set
{
_page_arg_name = value;
}
}
public Color ForeColor2
{
get
{
return _forecolor2;
}
set
{
_forecolor2 = value;
}
}
/// <summary>
/// 将此控件呈现给指定的输出参数。
/// </summary>
/// <param name="output"> 要写出到的 HTML 编写器 </param>
protected override void Render(HtmlTextWriter output)
{
string txt = "";
if(this.MaxPage == 0)
this.MaxPage = 1;
WebColorConverter a = new WebColorConverter();
string fore_color = a.ConvertToString(this.ForeColor);
string fore_color2 = a.ConvertToString(this.ForeColor2);
if(this.OtherQueryString != "" && this.OtherQueryString.Substring(0,1) != "&")
this.OtherQueryString = "&" + this.OtherQueryString;
if(this.CurrentPage == 1)
{
txt += "<FONT face=\"webdings\" color=\"" + fore_color2 + "\">9</FONT> ";
txt += "<FONT face=\"webdings\" color=\"" + fore_color2 + "\">7</FONT> ";
}
else
{
txt += "<A href=\"" + URL + "?" + PageArgName + "=1" + OtherQueryString + "\"><FONT face=\"webdings\" color=\"" + fore_color + "\">9</FONT></A> ";
txt += "<A href=\"" + URL + "?" + PageArgName + "=" + Convert.ToString(CurrentPage - 1) + OtherQueryString + "\"><FONT face=\"webdings\" color=\"" + fore_color + "\">7</FONT></A> ";
}
int i;
int page_start,page;
page_start = CurrentPage / 10;
if((this.CurrentPage % 10) == 0)
page_start = (page_start - 1) * 10;
else
page_start = page_start * 10;
for(i = 1;i<=10;i++)
{
page = page_start + i;
if(page > MaxPage)
break;
if(page == CurrentPage)
{
txt += "<FONT color=\"" + fore_color2 + "\">" + page.ToString() + "</FONT> ";
}
else
{
txt += "<A href=\"" + URL + "?" + PageArgName + "=" + page.ToString() + OtherQueryString + "\"><FONT color=\"" + fore_color + "\">" + page.ToString() + "</FONT></A> ";
}
}
if(CurrentPage == MaxPage)
{
txt += "<FONT face=\"webdings\" color=\"" + fore_color2 + "\">8</FONT> ";
txt += "<FONT face=\"webdings\" color=\"" + fore_color2 + "\">:</FONT> ";
}
else
{
txt += "<A href=\"" + URL + "?" + PageArgName + "=" + Convert.ToString(CurrentPage + 1) + OtherQueryString + "\"><FONT face=\"webdings\" color=\"" + fore_color + "\">8</FONT></A> ";
txt += "<A href=\"" + URL + "?" + PageArgName + "=" + Convert.ToString(MaxPage) + OtherQueryString + "\"><FONT face=\"webdings\" color=\"" + fore_color + "\">:</FONT></A> ";
}
txt += "<input style=\"width:30px\" type=\"text\" id=\"" + PagerID + "\"> ";
txt += "<input type=\"button\" value=\"Go\" onclick=\"eaddpageindexgoto()\">";
output.Write(txt);
}
}
}