观察者模式-新用模式
客户要求把所有的查询做成分页.要是每个页面都是做烦死了.与是就想把DATAGRID单独做成一个控件.在各个 查询页面查出结束后,使用用出来的控件显示.思路很清昕,速度做完,调试,出错,原来那个该死的分页控件还要再去执行一次查询!这个公共控件总不能一个一个去执行查询页中的查询吧.想想不是可以做个通知吗,于是加写事件,调试成功.
代码:
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
DgPagingControl1.eQuery +=new QueryHandle(DgCtrol1_q);
}
protected ZTEMas.MaStat.Web.MaStatApp.UserControl.DgPagingControl DgPagingControl1;
/// <summary>
/// 方法名称:DgCtrol1_q
/// 内容摘要: 重新绑定数据
/// </summary>
private void DgCtrol1_q()
{
DgPagingControl1.dgDataBind(Query());
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.btnInquery.Click += new System.EventHandler(this.btnInquery_Click);
this.btnReset.Click += new System.EventHandler(this.btnReset_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
/// <summary>
/// 方法名称:btnInquery_Click
/// 内容摘要: 查询按纽被单击时,调用业务逻辑组件中的相应方法取得
/// MaStatReport对象(统一的手机档案报表类实体),并对页面中的数据表
/// 进行绑定
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnInquery_Click(object sender, System.EventArgs e)
{
DgPagingControl1.dgDataBind(Query());
//显示报表(此方法在基类中定义)
//BindReport(maStatReport,DataGrid1,true);
// 分页控件数据绑定
//this.dgtBind (maStatReport.DataTable);
}
/// <summary>
/// 方法名称:Query
/// 内容摘要:查询,返回MaStatReport
/// </summary>
/// <returns></returns>
private Datatable Query()
{......
}
COMMON中
public delegate void QueryHandle();
/// <summary>
/// 类 编 号:M09_DgPagingControl
/// 类 名 称:DgPagingControl
/// 内容摘要:分页控件
/// </summary>
public class DgPagingControl : System.Web.UI.UserControl
{
protected System.Web.UI.WebControls.DataGrid DataGrid1;
protected ZTE.ITLib.Web.CustomControl.DBGNavigator DBGNavigator1;
public event QueryHandle eQuery;
/// <summary>
/// 方法名称:OnQuery
/// 内容摘要:定义查询事件
/// </summary>
public void OnQuery()
{
if (eQuery != null)
eQuery();
}
private MaStatReport maStatReport;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器
/// 修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.DBGNavigator1.PageIndexChanged += new ZTE.ITLib.Web.CustomControl.DBGNavigator.PageChangedEventHandler(this.DBGNavigator1_PageIndexChanged);
this.DataGrid1.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
/// <summary>
/// 方法名称:dgPackageDataBind
/// 内容摘要:数据绑定
/// </summary>
/// <param name="maStatReport"></param>
public void dgDataBind(DataTable maStatReport)
{
//数据使用DBGNavigator控件实现分页
BindReport(maStatReport,DataGrid1,true);
this.maStatReport=maStatReport;
this.DBGNavigator1.ControlDataSource = .DataTable.DefaultView;
this.DBGNavigator1.ControlToPaginate = this.DataGrid1.UniqueID;
this.DBGNavigator1.DataBind();
}
//白天没加这个事件,这可能是关健
private void DBGNavigator1_indexchange(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
OnQuery;
}