namespace JYK.Controls
{
/**//// <summary>
/// 分頁控件
/// PageGetData.cs 負責提取資料
/// PageSQL.cs 負責生成SQl語句
/// PageUI.cs 負責分頁控件的頁面内容
/// </summary>
[DefaultProperty("Text")]
[ToolboxData("<{0}:JYKPage runat=server></{0}:JYKPage>")]
public class JYKPage : WebControl, INamingContainer, IPostBackEventHandler
/**//// <summary>
/// 通路資料庫用的執行個體
/// </summary>
private DataAccessHelp dal = null;
/// 生成SQL語句的部分
private PageManage.PageSQL MgrPageSQL = null;
/// 提取資料的部分
private PageManage.PageGetData MgrGetData = null;
private PageManage.PageUI MgrPageUI = null;
/// 設定顯示資料的控件
public System.Web.UI.WebControls.WebControl ControlGrid;
成員#region 成員
頁面顯示#region 頁面顯示
/// 上一頁 的文字
private string pPrevText = "上一頁"; //上一頁
/// 下一頁 的文字
private string pNextText = "下一頁"; //下一頁
/// 首頁 的文字
private string pFirstText = "首頁"; //首頁
/// 末頁 的文字
private string pLastText = "末頁"; //末頁
/// 去指定頁号 的文字
private string pGOText = "GO"; //GO
#endregion
屬性#region 屬性
存放分頁算法模版的屬性#region 存放分頁算法模版的屬性
//記錄數
記錄相關#region 記錄相關
一頁的記錄數#region 一頁的記錄數
/// 一頁的記錄數
[Bindable(true)]
[Category("記錄集")]
[DefaultValue("")]
[Localizable(true)]
public Int32 PageSize
set
{ ViewState["PageSize"] = value; }
get
//沒有設定的話,使用預設值:一頁20條記錄
if (ViewState["PageSize"] == null)
{ return 20; }
else
{ return (Int32)ViewState["PageSize"]; }
}
}
符合條件的記錄數#region 符合條件的記錄數
/// 符合條件的記錄數
public Int32 PageRecordCount
{ ViewState["PageRecordCount"] = value; }
//沒有設定的話,傳回 0
if (ViewState["PageRecordCount"] == null)
{ return 0; }
{ return (Int32)ViewState["PageRecordCount"]; }
頁數#region 頁數
/// 頁數
public Int32 PageCount
{ ViewState["PageCount"] = value; }
if (ViewState["PageCount"] == null)
{ return (Int32)ViewState["PageCount"]; }
想要檢視哪一頁的資料#region 想要檢視哪一頁的資料
/// 想要檢視那一頁的資料
public Int32 PageIndex
{ ViewState["PageIndex"] = value; }
if (ViewState["PageIndex"] == null)
{ return 1; }
{ return (Int32)ViewState["PageIndex"]; }
//SQL語句的基礎
分頁算法需要的屬性#region 分頁算法需要的屬性
表名、視圖名#region 表名、視圖名
/// 表名、視圖名
[Category("SQL語句")]
public string TableName
{ ViewState["TableName"] = value; }
if (ViewState["TableName"] == null)
if ((base.Site != null) && base.Site.DesignMode)
return "TableName";
}
else
CommandClass.MsgBox("沒有設定TableName屬性!", true);
return null;
}
{ return ViewState["TableName"].ToString(); }
表的主鍵#region 表的主鍵
/// 表的主鍵
public string TableIDColumns
{ ViewState["TableIDColumns"] = value; }
if (ViewState["TableIDColumns"] == null)
return "TableIDColumns";
CommandClass.MsgBox("沒有設定TableIDColumns屬性!", true);
{ return ViewState["TableIDColumns"].ToString(); }
顯示的字段#region 顯示的字段
/// 顯示的字段
public string TableShowColumns
{ ViewState["TableShowColumns"] = value; }
if (ViewState["TableShowColumns"] == null)
{ return "*"; }
{ return ViewState["TableShowColumns"].ToString(); }
排序字段#region 排序字段
/// 排序字段
public string TableOrderColumns
{ ViewState["TableOrderColumns"] = value; }
if (ViewState["TableOrderColumns"] == null)
return "TableOrderColumns";
CommandClass.MsgBox("沒有設定TableOrderColumns屬性!", true);
{ return ViewState["TableOrderColumns"].ToString(); }
查詢條件#region 查詢條件
/// 查詢條件
public string TableQuery
{ ViewState["TableQuery"] = value; }
if (ViewState["TableQuery"] == null)
return "";
else
return ViewState["TableQuery"].ToString();
//SQL模版
分頁算法模版#region 分頁算法模版
/// 第一頁的分頁算法模版
[Category("SQL語句模版")]
public string SQLGetFirstPage
{ ViewState["FirstPageSQL"] = value; }
return ViewState["FirstPageSQL"] == null ? null : ViewState["FirstPageSQL"].ToString();
指定頁号的分頁算法模版#region 指定頁号的分頁算法模版
/// 指定頁号的分頁算法模版
public string SQLGetNextPage
set
ViewState["NextPageSQL"] = value;
return ViewState["NextPageSQL"]==null?null:ViewState["NextPageSQL"].ToString();
/// 最後一頁的分頁算法模版
public string SQLGetLastPage
ViewState["LastPageSQL"] = value;
return ViewState["LastPageSQL"] == null ? null : ViewState["LastPageSQL"].ToString();
//UI
頁面顯示 上一頁、下一頁#region 頁面顯示 上一頁、下一頁
上一頁#region 上一頁
/// 上一頁
[Category("頁面顯示")]
public string PageUIPrev
get
{ return pPrevText; }
{ pPrevText = value; }
下一頁#region 下一頁
/// 下一頁
public string PageUINext
{ return pNextText; }
{ pNextText = value; }
首頁#region 首頁
/// 首頁
public string PageUIFirst
{ return pFirstText; }
{ pFirstText = value; }
末頁#region 末頁
/// 末頁
public string PageUILast
{ return pLastText; }
{ pLastText = value; }
GO#region GO
/// GO
public string PageUIGO
{ return pGOText; }
{ pGOText = value; }
頁面導航的數量#region 頁面導航的數量
///
public Int32 NaviCount
{ ViewState["NaviCount"] = value; }
if (ViewState["NaviCount"] == null)
return 10;
return (Int32)ViewState["NaviCount"];
頁面顯示 記錄數、頁數#region 頁面顯示 記錄數、頁數
共{0}條記錄數#region 共{0}條記錄數
/// 共{0}條記錄數
[Category("記錄資訊")]
public string PageUIAllCount
{ ViewState["PageUIAllCount"] = value; }
if (ViewState["PageUIAllCount"] == null)
return "共<font style=\"color:Red;\">{0}</font>條記錄數";
return ViewState["PageUIAllCount"].ToString();
第{0}/{1}頁#region 第{0}/{1}頁
/// 第{0}/{1}頁
public string PageUIAllPage
{ ViewState["PageUIAllPage"] = value; }
if (ViewState["PageUIAllPage"] == null)
return "第<font style=\"color:Red;\">{0}</font>/<font style=\"color:Red;\">{1}</font>頁";
return ViewState["PageUIAllPage"].ToString();
每頁{0}條記錄#region 每頁{0}條記錄
public string PageUIAllPageCount
{ ViewState["PageUIAllPageCount"] = value; }
if (ViewState["PageUIAllPageCount"] == null)
return "每頁<font style=\"color:Red;\">{0}</font>條記錄";
return ViewState["PageUIAllPageCount"].ToString();
顯示資料的控件的ID#region 顯示資料的控件的ID
[Category("顯示資料的控件ID")]
public string ControlGridID
{ ViewState["ControlGridID"] = value; }
if (ViewState["ControlGridID"] == null)
return null;
return ViewState["ControlGridID"].ToString();
資料通路執行個體的設定#region 資料通路執行個體的設定
/// 設定資料通路層的執行個體
public DataAccessHelp DAL
{ dal = value; }
if (dal == null)
dal = new DataAccessHelp();
return dal;
管理部分#region 管理部分
/// 提取資料的執行個體
public PageManage.PageGetData ManagerGetData
{ MgrGetData = value; }
PageManage.PageGetData tmp = MgrGetData;
if (tmp == null)
tmp = new JYK.Controls.PageManage.PageGetData();
MgrGetData = tmp;
if (tmp.myPage == null)
tmp.myPage = this;
return tmp;
public PageManage.PageSQL ManagerPageSQL
{ MgrPageSQL = value; }
PageManage.PageSQL tmp = MgrPageSQL;
tmp = new JYK.Controls.PageManage.PageSQL();
MgrPageSQL = tmp;
public PageManage.PageUI ManagerPageUI
{ MgrPageUI = value; }
PageManage.PageUI tmp = MgrPageUI;
tmp = new JYK.Controls.PageManage.PageUI();
MgrPageUI = tmp;
函數#region 函數
/// 顯示第一頁的資料
public void BindFirstPage()
//生成SQL語句和擷取記錄總數
this.ManagerPageSQL.CreateSQL();
//綁定第一頁的資料
myDataBind(1);
繪制UI CreateChildControls()#region 繪制UI CreateChildControls()
/// 繪制UI
protected override void CreateChildControls()
base.CreateChildControls();
LinkButton btn = new LinkButton();
btn.ID = "Page_Button";
btn.Text = "";//所有的回發事件
//btn.Click += new EventHandler(btn_Click); //添加事件
this.Controls.Add(btn);
ManagerPageUI.AddPageUI(); //添加頁面顯示
Page_Click(); //調用分頁事件
響應分頁事件#region 響應分頁事件
/// 響應分頁事件
private void Page_Click()
//string a = base.Page.Request.Form["__EVENTTARGET"];
string PageIndex = base.Page.Request.Form["__EVENTARGUMENT"];
if (!Functions.IsInt(PageIndex))
return;
else
myDataBind(Int32.Parse(PageIndex));
/// 綁定控件
private void myDataBind(Int32 PageIndex)
if (ControlGrid == null)
string CID = this.ControlGridID;
if (CID == null)
return;
ControlGrid = (WebControl)base.Page.FindControl(CID);
Int32 NoCount = this.NaviCount; //一組頁号的數量
bool isNavi = false;
Int32 tmpPageIndex = this.PageIndex;
switch (PageIndex)
case 1: //首頁
isNavi = true;
break;
case -3:
//上一頁
PageIndex = this.PageIndex - 1;
case -2:
//下一頁
PageIndex = this.PageIndex + 1;
if (PageIndex % NoCount == 1)
isNavi = true;
case -99: //前導
if (tmpPageIndex % NoCount == 0)
PageIndex = tmpPageIndex - NoCount;
PageIndex = tmpPageIndex / NoCount * NoCount;
case -88: //後導
PageIndex = tmpPageIndex + NoCount;
else
PageIndex = (this.PageIndex / NoCount + 1) * NoCount + 1;
default:
isNavi = false ;
if (PageIndex == this.PageCount)
isNavi = true; //末頁
this.PageIndex = PageIndex;
//擷取記錄集
DataTable dt = this.ManagerGetData.GetDataTable(PageIndex);
//通過(好像是反射)來設定 DataSource屬性。
Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateSet(ControlGrid, null, "datasource", new object[]
{ dt }, null, null);
ControlGrid.DataBind();
//重新顯示目前頁号
this.ManagerPageUI.UpdatePageIndex();
//重新顯示頁号當航
if (isNavi)
this.ManagerPageUI.ReloadPageNavi();
else
this.ManagerPageUI.UpdatePageNavi();
//base.Page.Response.Write(a + "+" + PageIndex);
/// 接收分頁控件的回發事件
/// <param name="sender"></param>
/// <param name="e"></param>
void btn_Click(object sender, EventArgs e)
//throw new NotImplementedException();
//base.Page.Response.Write("ss");
/// 分頁的回發事件,沒有成功
/// <param name="PageIndex"></param>
public void RaisePostBackEvent(string PageIndex)
//base.Page.Response.Write("www");
//Page_Click();
設計時支援#region 設計時支援
/// 設計時支援
/// <param name="output"></param>
protected override void Render(HtmlTextWriter output)
if ((base.Site != null) && base.Site.DesignMode)
output.Write("<div style='TEXT-ALIGN: center;width:100%'>第1/100頁 &nbsp;&nbsp; 首頁&nbsp;&nbsp;上一頁&nbsp;&nbsp;[1][2][3] &nbsp;&nbsp; 下一頁 &nbsp;&nbsp; 末頁 &nbsp;&nbsp; 共1000條記錄</div>");
//Page_Click();
output.Write("<div id='" + this.ClientID + "Page' style='TEXT-ALIGN: center;width:90%'>");
base.Render(output);
output.Write("</div>");
}
}