| 发表于:2007-06-18 16:43:09 楼主 |
为提高性能.我写了一个缓存机制.第一次查看报表,查询的数据.我缓存了下来.第二次,如果缓存里有,就不查.直接取.现在分页,导出都没有问题.但打印有问题.不知道打印是怎么做. 查询数据应没有问题,分页,导出都可以. 代码如下 using system; using system.collections; using system.componentmodel; using system.data; using system.drawing; using system.web; using system.web.sessionstate; using system.web.ui; using system.web.ui.webcontrols; using system.web.ui.htmlcontrols; using crystaldecisions.crystalreports.engine; using crystaldecisions.shared; using system.collections.specialized; using system.configuration; namespace reporttest2003 { /// <summary> /// webform1 的摘要说明。 /// </summary> public class webform2 : system.web.ui.page { protected crystaldecisions.web.crystalreportviewer crystalreportviewer1; //reportdocument reportdoc; private void page_load(object sender, system.eventargs e) { // 在此处放置用户代码以初始化页面 //this.loadrpt(); } private void loadrpt() { // // parameterfields paramfields = new parameterfields (); // parameterfield paramfield; // parameterdiscretevalue discreteval; // // namevaluecollection coll=request.querystring; // string[] arr1 = coll.allkeys; // string skey= " "; // string svalue= " "; // // for (int i = 1; i < arr1.length; i++) // { // skey=arr1[i]; // svalue=coll[i]; // paramfield=new parameterfield(); // paramfield.name= "@ "+skey; // discreteval=new parameterdiscretevalue(); // discreteval.value=svalue; // paramfield.currentvalues.add(discreteval); // paramfields.add (paramfield); // } // // crystalreportviewer1.parameterfieldinfo = paramfields; // // string rptfile=coll[0]; // reportdocument reportdoc; // reportdoc = new reportdocument(); // reportdoc.load(server.mappath(@ "reportfile\ "+rptfile)); // // // string sservername=configurationsettings.appsettings[ "crystalreportconnectservername "]; // string sdatabasename=configurationsettings.appsettings[ "crystalreportconnectdatabasename "]; // string suserid=configurationsettings.appsettings[ "crystalreportconnectuserid "]; // string spassword=configurationsettings.appsettings[ "crystalreportconnectpassword "]; // // // tablelogoninfo logoninfo ; // foreach( crystaldecisions.crystalreports.engine.table tb in reportdoc.database.tables) // { // logoninfo = tb.logoninfo; // logoninfo.connectioninfo.servername = sservername; // logoninfo.connectioninfo.databasename = sdatabasename; // logoninfo.connectioninfo.userid = suserid; // logoninfo.connectioninfo.password = spassword; // tb.applylogoninfo(logoninfo); // // } // crystalreportviewer1.reportsource = reportdoc; namevaluecollection parameters=request.querystring; string rptfile=parameters[0]; namevaluecollection parameters1=new namevaluecollection(); for(int i=1;i <parameters.count;i++) { parameters1.add(parameters.allkeys[i],parameters[i]);//localhost/reporttest2003/reportfile/testpage.rpt[i]); } reportdocument reportdoc = new reportdocument(); reportdoc.load(server.mappath(@ "reportfile\ "+rptfile)); system.data.dataset ds; ds=facade.getdata(this.session.sessionid,rptfile,parameters1, "sp_syswin_ "+rptfile.substring(0,rptfile.indexof( ". "))); reportdoc.setdatasource(ds.tables[0]); crystalreportviewer1.reportsource = reportdoc; //this.crystalreportviewer1.databind(); } #region web 窗体设计器生成的代码 override protected void oninit(eventargs e) { // // codegen: 该调用是 asp.net web 窗体设计器所必需的。 // initializecomponent(); base.oninit(e); this.loadrpt(); } /// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void initializecomponent() { this.load += new system.eventhandler(this.page_load); } #endregion } } |
|
|
|
|