观察者模式-新用模式

客户要求把所有的查询做成分页.要是每个页面都是做烦死了.与是就想把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;
  }

posted @ 2005-08-24 17:00  瑞德船长  阅读(1562)  评论(4编辑  收藏  举报