apply template pattern in report or data driven page.

博客介绍了创建基础控件的步骤,包括定义数据网格、查询按钮等,将绑定数据方法定义为虚拟,定义准备参数。还提到在继承页面中重写准备参数函数以定义自定义SQL语句,并给出了部分代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. create a base control
 define the datagrid, query button, and export button or image;
 define the binddata method as virtual
 define the PrepareParam
the following is partial code:

  1  public   class  DataControl : BaseControl
  2   {
  3     protected   const   string  SQLKey  =   " SqlName " ;
  4     protected   const   string  ListKey  =   " ParamList " ;
  5 
  6     protected  ASPNetDatagridDecorator m_add  =   new  ASPNetDatagridDecorator();
  7 
  8     protected  SortableGrid dgBasic;
  9     protected   string  _cacheKey  =   "" ;
 10     protected  System.Web.UI.WebControls.ImageButton ibExport;
 11     protected  Button btnQuery;
 12 
 13 
 14     private   string  _queryId  =   " OtherAll " ;
 15     private   string  _xmlName  =   " Specific " ;
 16     public   string  QueryID 
 17    {
 18      get  {  return  _queryId; }
 19      set  { _queryId  =  value; }
 20    }
 21 
 22     public   string  XmlName 
 23    {
 24      set  { _xmlName  =  value; }
 25    }
 26 
 27     virtual   protected   bool  PrepareParam()
 28    {
 29      return   true ;
 30    }
 31 
 32     virtual   protected   void  AddHeader() 
 33    {
 34    }
 35 
 36     virtual   protected   void  BindData() 
 37    {   
 38      string  sqlName  =  ( string ) ViewState[SQLKey];
 39     ArrayList list  =  (ArrayList) ViewState[ListKey];
 40      if (sqlName  ==   ""   ||  list  ==   null
 41       return ;
 42 
 43      try  
 44     {
 45      DataSet dsData  =  (DataSet) Cache[_cacheKey];
 46       if (dsData  ==   null
 47      { 
 48       IDataProviderBase dp  =  DataProvider.Instance();
 49        try  
 50       {     
 51        dsData  =   new  DataSet();
 52        dsData  =  dp.GetDataSet(_xmlName, sqlName, list);
 53        Cache.Insert(_cacheKey, dsData,  null , DateTime.MaxValue, TimeSpan.FromMinutes( 20 ));
 54       }
 55        catch (Exception ex) 
 56       {
 57        EventLogHelper.LogError(ex.ToString());
 58       }
 59 
 60        if (Config.GetConfigValue( " IsDebug " " 0 " ==   " 1 " )
 61        Response.Write(dp.SQLStatement);
 62      }
 63      DataView dv  =  dsData.Tables[ 0 ].DefaultView;
 64       string  str  =  dgBasic.SortExpression;
 65       if (str  !=   ""
 66      {
 67       dv.Sort  =  str;
 68        if ( ! dgBasic.IsSortedAscending)
 69        dv.Sort  +=   "  desc " ;
 70      }
 71      dgBasic.DataSource  =  dv;
 72      dgBasic.DataBind();
 73     }
 74      catch (Exception ex) 
 75     {
 76      EventLogHelper.LogError(ex.ToString());
 77     }
 78    }
 79 
 80     virtual   protected   void  ExportExcel(SortableGrid dgBasic) 
 81    {
 82     
 83     dgBasic.GridLines  =  System.Web.UI.WebControls.GridLines.Both;
 84  //    dgBasic.EnableViewState = false;
 85 
 86     Response.Clear();
 87     Response.Buffer  =   true ;
 88     Response.ContentType  =   " application/vnd.ms-excel " ;
 89     Response.Charset  =   " UTF-8 " ;
 90     Response.ContentEncoding  =  System.Text.Encoding.GetEncoding( " UTF-8 " );
 91     Response.AppendHeader( " Content-Disposition " " attachment;filename=book1.xls " );
 92      this .Page.EnableViewState = false ;
 93 
 94     System.IO.StringWriter tw  =   new  System.IO.StringWriter();
 95     System.Web.UI.HtmlTextWriter hw  =   new  System.Web.UI.HtmlTextWriter(tw);
 96     
 97     AddHeader();
 98     CRMEngine.Components.Util.ClearControls(dgBasic);
 99     dgBasic.RenderControl(hw);
100 
101     Response.Write(tw.ToString());
102     Response.End();
103    }
104 
105 
106     protected   override   void  OnInit(EventArgs e)
107    {
108      base .OnInit (e);
109 
110     _cacheKey  =  LogonUser.LoginName  + " _specific " ;
111 
112     ibExport.Click  +=   new  System.Web.UI.ImageClickEventHandler(ibExport_Click);
113     dgBasic.SortCommand  +=   new  System.Web.UI.WebControls.DataGridSortCommandEventHandler(dgBasic_SortCommand);
114     btnQuery.Click  +=   new  EventHandler(btnQuery_Click);
115    }
116 
117 
118     private   void  ibExport_Click( object  sender, System.Web.UI.ImageClickEventArgs e)
119    {
120      this .ExportExcel(dgBasic);
121    }
122 
123     private   void  dgBasic_SortCommand( object  source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
124    {
125     BindData();
126    }
127 
128 
129     protected   void  btnQuery_Click( object  sender, EventArgs e)
130    {
131 
132      if (PrepareParam()  ==   false )
133       return ;
134 
135     Cache.Remove(_cacheKey);   
136     BindData();   
137    }
138   }
139 
140 

 

 
2. in any inherited page
override PerpareParam function to define your custom SQL statement;

ex.

  

 1  override   protected   void  AddHeader() 
 2    {
 3     TableCell cell  =   null ;   
 4     ArrayList header  =   new  ArrayList();
 5 
 6     cell  =   new  TableCell();
 7     cell.Text  =   " 表头一 " ;
 8     cell.RowSpan  =   2 ;
 9     cell.HorizontalAlign  =  HorizontalAlign.Center;
10     header.Add(cell);
11 
12     
13     cell  =   new  TableCell();
14     cell.Text  =   " 表头二 " ;
15     cell.ColumnSpan  =   3 ;
16     cell.HorizontalAlign  =  HorizontalAlign.Center;
17     header.Add(cell);
18 
19     m_add.AddMergeHeader(header);
20    }
21 
22     protected   override   bool  PrepareParam()
23    {   
24     ArrayList list  =   new  ArrayList();
25     list.Add(ctlDate.SelectedDate);
26      if (ctlCity.CityID  !=   int .Parse(Config.GetConfigValue( " ProvinceID " )))
27      list.Add( "  area_city= " +  ctlCity.CityID);
28      else
29      list.Add( "  1=1 " );
30 
31     ViewState[SQLKey]  =   this .QueryID;
32     ViewState[ListKey]  =  list;
33      return   base .PrepareParam();
34    }
35 
36     override   protected   void  BindData() 
37    {
38     AddHeader();
39      base .BindData();
40    }
41 

采用这种方法的好处是数据绑定/排序等常用操作封装在父类中进行,  每个具体的应用(页面)中只需要定义其SQL和对应的PAGE页面(因为显示的表格字段不同)即可. 如果要修改某些属性, 修改父类中的定义即可.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值