在 Web 中实现数据分页的自动管理!嘿嘿(二)
作者/天才 时间/2006-1-10 17:32:00 类别/开发技术 查看/
 发表评论 以论坛方式查看
标签:.Net联盟
作者:黄润成


二、用户控件

1、页面:

<%@ Control Language="c#" AutoEventWireup="false" Codebehind="DataPageNav.ascx.cs" Inherits="Favorites.UserControls.DataPageNav" TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
<table id="FooterTab" align="right" border="0" runat="server">
<TR>
<TD align="right"><asp:linkbutton id="FirstPage" CommandName="FirstPage" OnCommand="PageChanged" text="首页" runat="server"></asp:linkbutton> <asp:linkbutton id="PreviousPage" CommandName="PreviousPage" OnCommand="PageChanged" text="上页" runat="server"></asp:linkbutton>  
| <B>页 <FONT color="#ff0000">
<asp:label id="lblCurPageNo" runat="server" Width="12px" Text="1">1</asp:label></FONT>OF
<FONT color="#ff0000">
<asp:label id="lblTotalPages" runat="server" Width="12px"></asp:label></FONT>共<FONT color="#ff0000">
<asp:label id="lblTotalRows" runat="server" Width="12px"></asp:label></FONT>条记录</B>|  
<asp:linkbutton id="NextPage" CommandName="NextPage" OnCommand="PageChanged" text="下页" runat="server"></asp:linkbutton> 
<asp:linkbutton id="LastPage" CommandName="LastPage" OnCommand="PageChanged" text="末页" runat="server"></asp:linkbutton>     
<INPUT id="txtCurPageNo" type="text" size="2" name="pagevalue" runat="server"> 
<asp:button class="box" id="btnSearch" onclick="GotoPage" runat="server" Text="GO"></asp:button></TD>
</TR>
</table>



2、后台代码:

namespace Favorites.UserControls
{
using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using it.com.cn.DbServices;
using it.com.cn.DbServices.SqlDbServices;

/// <summary>
/// 说明: 1、用户控件,用于数据分页显示;
/// 作者: 黄润成
/// 日期: 2005-12-7
/// 修改: 1、
/// </summary>
public class DataPageNav : System.Web.UI.UserControl
{
protected System.Web.UI.WebControls.LinkButton FirstPage;
protected System.Web.UI.WebControls.LinkButton PreviousPage;
protected System.Web.UI.WebControls.LinkButton NextPage;
protected System.Web.UI.WebControls.LinkButton LastPage;
protected System.Web.UI.WebControls.Label lblTotalPages;
protected System.Web.UI.WebControls.Label lblTotalRows;
protected System.Web.UI.WebControls.Label lblCurPageNo;
protected System.Web.UI.HtmlControls.HtmlInputText txtCurPageNo;
protected System.Web.UI.WebControls.Button btnSearch;

protected System.Web.UI.WebControls.Repeater FDataViewer = null;
protected it.com.cn.DbServices.SqlDbServices.InsReaderPage FDataPageMan = null;
protected string FSqlString = string.Empty;
protected string FKeyField = string.Empty;
protected DbParams FParams = null;
protected int FPageSize = int.Parse(System.Configuration.ConfigurationSettings.AppSettings["UserPageSize"]);
protected System.Web.UI.HtmlControls.HtmlTable FooterTab;

protected string FViewStateName = "DataPageNav";

/// <summary>
/// 将绑定数据的对象赋值给该属性,用于绑定数据。    
/// 赋值语句必须放在有关 IsPostBack 判断的外面,因为每次刷新页面时用户控件中的引用会清空。
/// </summary>
public System.Web.UI.WebControls.Repeater DataViewer
{
get
{
return FDataViewer;
}
set
{
//if ((value is Repeater) || (value is BaseDataList))
{
FDataViewer = value;
}
// else
// {
// throw new Exception("向分页对象的数据显示对象赋值时发生错误!\n数据显示对象类型不正确。");
// }
}
}

/// <summary>
/// 获取 或 设置 数据分页对象,如果不对该属性赋值,则根据 SqlString、KeyField、Params、PageSize 属性值自动创建数据分页对象。
/// </summary>
public InsReaderPage DataPageMan
{
get
{
return FDataPageMan;
}
set
{
FDataPageMan = value;
}
}

/// <summary>
/// 获取 或 设置 自动创建的数据分页对象所使用的查询语句。
/// </summary>
public string SqlString
{
get
{
return FSqlString;
}
set
{
FSqlString = value;
if (FDataPageMan != null)
FDataPageMan.SetSqlString(FSqlString, FKeyField);
}
}

/// <summary>
/// 获取 或 设置 自动创建的数据分页对象所使用的查询关键字段。
/// </summary>
public string KeyField
{
get
{
return FKeyField;
}
set
{
FKeyField = value;
if (FDataPageMan != null)
FDataPageMan.SetSqlString(FSqlString, FKeyField);
}
}

/// <summary>
/// 获取 或 设置 自动创建的数据分页对象所使用的查询参数。
/// </summary>
public DbParams Params
{
get
{
return FParams;
}
set
{
FParams = value;
if (FDataPageMan != null)
FDataPageMan.Params = FParams;
}
}

/// <summary>
/// 获取 或 设置 自动创建的数据分页对象所使用的数据分页大小。
/// </summary>
public int PageSize
{
get
{
return FPageSize;
}
set
{
FPageSize = value;
if (FDataPageMan != null)
FDataPageMan.PageSize = FPageSize;
}
}

/// <summary>
/// 设置 保存数据分页对象的 ViewState 视图状态的索引名称。
/// </summary>
public string ViewStateName
{
set
{
FViewStateName = value;
}
}

private void Page_Load(object sender, System.EventArgs e)
{
if (!IsPostBack)
{
if (FDataPageMan == null)
{
FDataPageMan = new InsReaderPage(FSqlString, FKeyField, FParams, FPageSize);
}
//取第一页数据
FDataPageMan.FirstPage(FDataViewer);
SetStates();
}
//设置样式表
FooterTab.Attributes["class"] = this.Attributes["cssclass"];
}

protected void SetStates()
{
//设置导航按钮状态
FDataPageMan.SetButtonsStatus(FirstPage, PreviousPage, NextPage, LastPage);
//显示当前页码
lblCurPageNo.Text = FDataPageMan.CurrentPageNo.ToString();
txtCurPageNo.Value = FDataPageMan.CurrentPageNo.ToString();
//显示总页数
lblTotalPages.Text = FDataPageMan.TotalPagesCount.ToString();
//显示记录总数
lblTotalRows.Text = FDataPageMan.TotalRowsCount.ToString();
//保存数据分页对象
ViewState[FViewStateName] = FDataPageMan;
}

//翻页
protected void PageChanged(object sender,CommandEventArgs e)
{
FDataPageMan = (InsReaderPage) ViewState[FViewStateName];
if (FDataPageMan == null)
{
return;
}
switch(e.CommandName)
{
case "FirstPage":
FDataPageMan.FirstPage(FDataViewer);
break;
case "PreviousPage":
FDataPageMan.PreviousPage(FDataViewer);
break;
case "NextPage":
FDataPageMan.NextPage(FDataViewer);
break;
case "LastPage":
FDataPageMan.LastPage(FDataViewer);
break;
}
SetStates();
}


//转到指定页
protected void GotoPage(object sender,System.EventArgs e)
{
FDataPageMan = (InsReaderPage) ViewState[FViewStateName];
if (FDataPageMan == null)
{
return;
}
FDataPageMan.GotoPage(FDataViewer, int.Parse(txtCurPageNo.Value.Trim()));
SetStates();
}


#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器
/// 修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion
}
}
查看该用户更多文章>>