`

水晶报表中动态加载报表字段

    博客分类:
  • net
 
阅读更多
usingSystem;

usingSystem.Collections;

usingSystem.ComponentModel;

usingSystem.Data;

usingSystem.Drawing;

usingSystem.Web;

usingSystem.Web.SessionState;

usingSystem.Web.UI;

usingSystem.Web.UI.WebControls;

usingSystem.Web.UI.HtmlControls;

usingCrystalDecisions.CrystalReports.Engine;

usingCrystalDecisions.Shared;

usingSystem.Globalization;



namespaceWEB2003Test.CryStalReportTest

...{

/**////<summary>

///DynamicReportCommon的摘要说明。

///</summary>


publicclassDynamicReportCommon:System.Web.UI.Page

...{

protectedCrystalDecisions.Web.CrystalReportViewercrvEmployees;

protectedDataSetds;



privatevoidPage_Load(objectsender,System.EventArgse)

...{

//在此处放置用户代码以初始化页面

try

...{

if(!Page.IsPostBack)

...{

if(Session["DynamicReportData"]!=null)

...{

ds
=(DataSet)Session["DynamicReportData"];

Session.Remove(
"DynamicReportData");//释放Session中的值

Page.Cache[
"Data"]=ds;//页面缓存报表导出打印时重新绑定报表用

stringtableName=ds.Tables[0].TableName;//DataSet表名

string[]strDescription=newstring[ds.Tables[0].Columns.Count];//存放标头的字符串数

this.GetTableNameAndeColName(ds,tableName,strDescription);//获取表名及列名

CrystalDecisions.CrystalReports.Engine.ReportDocumentcryDocument
=newTextDynamicReport();

this.NoLineBoundReport(ds,strDescription,tableName,cryDocument,this.crvEmployees,18);

}


else

...{

if(Page.Request.QueryString["ReturnUrl"]!=null)

...{

Response.Redirect(Page.Request.QueryString[
"ReturnUrl"].ToString());

}


else

...{

this.PrintStr("没有数据信息,报表加载失败!");

}


}


}


else//这一部分应该自定义

...{

ds
=(DataSet)Page.Cache["Data"];

stringtableName=ds.Tables[0].TableName;//DataSet表名

string[]strDescription=newstring[ds.Tables[0].Columns.Count];//存放标头的字符串数

this.GetTableNameAndeColName(ds,tableName,strDescription);//获取表名及列名

CrystalDecisions.CrystalReports.Engine.ReportDocumentcryDocument
=newTextDynamicReport();

this.NoLineBoundReport(ds,strDescription,tableName,cryDocument,this.crvEmployees,18);

}


}


catch(Exceptionee)

...{

this.PrintStr(ee.Message);

Server.ClearError();

}






}


/**////<summary>

///报表绑定

///</summary>

///<paramname="ds">要绑定的数据集</param>

///<paramname="titleArray">要绑定的字段</param>

///<paramname="tableName">绑定的表名</param></param>

///<paramname="cryDocument">绑定的报表对象</param>

///<paramname="cryDocument">显示的报表对象</param>

///<paramname="cryDocument">合计的报表列数(注所有列的下划线条从Line11开始递增命名) 行的下划线以(Line1、Line2、Line3命名)</param>


privatevoidNoLineBoundReport(DataSetds,string[]titleArray,stringtableName,ReportDocumentcryDocument,CrystalDecisions.Web.CrystalReportViewercrvEmployees,inttotalColoums)

...{

try

...{



CrystalDecisions.Shared.ParameterFieldsparFields
=newParameterFields();//参数字段集合

CrystalDecisions.Shared.ParameterFieldparField;
//参数字段

CrystalDecisions.Shared.ParameterDiscreteValueparDescrete;
//用于参数字段付值

CrystalDecisions.CrystalReports.Engine.LineObjectline;
//用于报表Line对像

CrystalDecisions.CrystalReports.Engine.TextObjecttextBox;
//用于报表TextBox



int[]coloumLength=newint[ds.Tables[tableName].Columns.Count];//存放参数及公式字段长度的数组

intintPostions=0;

DataTabledataTable
=FillDataTableForDataSet(ds,tableName,titleArray,coloumLength);//这部分要改进



this.GetPosition(coloumLength);

for(inti=0;i<titleArray.Length;i++)//设置字段值

...{

textBox
=cryDocument.ReportDefinition.ReportObjects["txt"+(i+1)]asTextObject;

textBox.Text
=""+titleArray[i];

cryDocument.DataDefinition.FormulaFields[
"Formula"+(i+1)].Text="{"+tableName+"."+titleArray[i].Trim()+"}";

}


parField
=newParameterField();

parField.ParameterFieldName
="ReportTitle";

parDescrete
=newParameterDiscreteValue();

parDescrete.Value
=tableName;

parField.CurrentValues.Add(parDescrete);

parField.AllowCustomValues
=false;

parFields.Add(parField);

crvEmployees.ParameterFieldInfo
=parFields;

intPostions
=0;

for(inti=0;i<titleArray.Length;i++)//设置报表对像位置

...{

if(i==0)

...{

cryDocument.ReportDefinition.ReportObjects[
"Formula"+(i+1)].Left=30;

intPostions
=30;

textBox
=cryDocument.ReportDefinition.ReportObjects["txt"+(i+1)]asTextObject;

textBox.Left
=30;

textBox.Border.RightLineStyle
=LineStyle.SingleLine;

textBox.Width
=coloumLength[i];

}


else

...{

intPostions
+=coloumLength[i-1];

cryDocument.ReportDefinition.ReportObjects[
"Formula"+(i+1)].Left=intPostions;

textBox
=cryDocument.ReportDefinition.ReportObjects["txt"+(i+1)]asTextObject;

textBox.Left
=intPostions;

textBox.Border.RightLineStyle
=LineStyle.SingleLine;

textBox.Width
=coloumLength[i];

}


cryDocument.ReportDefinition.ReportObjects[
"Formula"+(i+1)].Width=coloumLength[i];

cryDocument.ReportDefinition.ReportObjects[
"Formula"+(i+1)].Border.LeftLineStyle=LineStyle.NoLine;

cryDocument.ReportDefinition.ReportObjects[
"Formula"+(i+1)].Border.TopLineStyle=LineStyle.NoLine;

cryDocument.ReportDefinition.ReportObjects[
"Formula"+(i+1)].Border.BottomLineStyle=LineStyle.NoLine;

}


intPostions
+=coloumLength[coloumLength.Length-1];





for(inti=1;i<4;i++)

...{

line
=cryDocument.ReportDefinition.ReportObjects["Line"+i]asLineObject;

line.Right
=intPostions;

}




cryDocument.SetDataSource(dataTable);

crvEmployees.ReportSource
=cryDocument;

crvEmployees.DisplayGroupTree
=true;

crvEmployees.DataBind();

ds.Dispose();

}


catch(Exceptionee)

...{

this.PrintStr(@""+ee.Message+"");

Server.ClearError();

}


}








/**////<summary>

///自动将DataSet中的数据转换成字符串同进获取其数据类型的长度

///</summary>

///<paramname="ds">数据源DataSet</param>

///<paramname="tableName">表名</param>

///<paramname="columnsName">列名数组</param>

///<paramname="columnsLength">输出参数列长度数组</param>

///<returns>DataTable</returns>


privateDataTableFillDataTableForDataSet(DataSetds,stringtableName,string[]columnsName,int[]columnsLength)

...{

if(ds.Tables[tableName].Columns.Count!=columnsName.Length||columnsName.Length!=columnsLength.Length||ds.Tables[tableName].Columns.Count!=columnsLength.Length)//传入的参数长度不一致时返回空值

...{

returnnull;

}




DataTabledataTable
=newDataTable(tableName);

System.Data.DataColumncolumn;
//要新建的表列对象

System.Data.DataRowrow;





for(inti=0;i<columnsName.Length;i++)//创建数据表

...{

column
=newDataColumn(columnsName[i].Trim(),System.Type.GetType("System.String"));

columnsLength[i]
=ds.Tables[tableName].Columns[columnsName[i]].MaxLength;

dataTable.Columns.Add(column);

}


for(inti=0;i<ds.Tables[tableName].Rows.Count;i++)

...{

row
=dataTable.NewRow();

for(intj=0;j<columnsName.Length;j++)

...{

if(ds.Tables[tableName].Rows[i][columnsName[j]].GetType().FullName=="System.DateTime")

...{

row[columnsName[j]]
=this.GetStringForDataTime(ds.Tables[tableName].Rows[i][columnsName[j]]);//将时间类型的转换为为-06-05这样的格式

}


elseif(ds.Tables[tableName].Rows[i][columnsName[j]].GetType().FullName=="System.Double")

...{

row[columnsName[j]]
=this.GetStringForDouble(ds.Tables[tableName].Rows[i][columnsName[j]]);//将小数转换为只带两位小数的格式

}


elseif(ds.Tables[tableName].Rows[i][columnsName[j]].GetType().FullName=="System.DBNull")

...{

row[columnsName[j]]
=""+((char)6);

}


else

...{

row[columnsName[j]]
=this.Getstring(ds.Tables[tableName].Rows[i][columnsName[j]]);

}


//row[columnsName[j]]=ds.Tables[tableName].Rows[i][columnsName[j]];

if(columnsLength[j]<row[columnsName[j]].ToString().Length)

...{

columnsLength[j]
=row[columnsName[j]].ToString().Length;



}


}


dataTable.Rows.Add(row);

}


returndataTable;

}




/**////<summary>

///将日期类型转化为-06-12形式的字符串

///</summary>

///<paramname="var">要转换的对象</param>

///<returns返回的字符串</returns>


privatestringGetStringForDataTime(objectvar)

...{

try

...{

return""+Convert.ToDateTime(var).ToString("yyyy-MM-dd");

}


catch

...{

return"";

}


}




/**////<summary>

///将Double类型的数据转化成两们小数的字符串

///</summary>

///<paramname="var">要转换的字符串</param>

///<returns>返回的字符串</returns>


privatestringGetStringForDouble(objectvar)

...{

System.Globalization.NumberFormatInfodoubleNfi
=newCultureInfo("en-US",false).NumberFormat;//小数字符串保留两位小数

doubleNfi.NumberDecimalDigits
=2;



try

...{

return""+Convert.ToString(var).ToString(doubleNfi);

}


catch

...{

return"";

}


}




/**////<summary>

///字符串转换

///</summary>

///<paramname="var">要装换的对象</param>

///<returns>返回的字符串</returns>


privatestringGetstring(objectvar)

...{

try

...{

return""+Convert.ToString(var);

}


catch

...{

return"";

}


}




/**////<summary>

///将Double型字符串转换成Int型字符串

///</summary>

///<paramname="var"></param>

///<returns></returns>


privateintGetIntForDouble(objectvar)

...{

try

...{

returnConvert.ToInt32(var);

}


catch

...{

return0;

}


}




/**////<summary>

///获取报表对象启始坐标位置

///</summary>

///<paramname="coloumLength"></param>


privatevoidGetPosition(int[]coloumLength)

...{

inttotalLength=0;

int[]temp=newint[coloumLength.Length];



for(inti=0;i<coloumLength.Length;i++)

...{

totalLength
+=coloumLength[i];

temp[i]
=coloumLength[i];

}


if(totalLength==0)

...{

return;

}


for(inti=0;i<coloumLength.Length;i++)

...{

coloumLength[i]
=this.GetIntForDouble(temp[i]*11260/totalLength);

}




}




/**////<summary>

///弹出提示窗口

///</summary>

///<paramname="Message">提示信息</param>


privatevoidPrintStr(stringMessage)

...{

System.Text.RegularExpressions.Regexdigitregex
=newSystem.Text.RegularExpressions.Regex("[']");

Message
=digitregex.Replace(Message,"");

Page.RegisterStartupScript(
newRandom().Next(1000000).ToString(),"<script>alert('"+Message+"');</script>");

}




/**////<summary>

///根据DataSet获取表名及字段名数组

///</summary>

///<paramname="ds"></param>

///<paramname="tableName"></param>

///<paramname="columnsNames"></param>


privatevoidGetTableNameAndeColName(DataSetds,stringtableName,string[]columnsNames)

...{

for(inti=0;i<ds.Tables[tableName].Columns.Count;i++)

...{

columnsNames[i]
=ds.Tables[tableName].Columns[i].ColumnName.ToString();

}


}


Web窗体设计器生成的代码#regionWeb窗体设计器生成的代码

overrideprotectedvoidOnInit(EventArgse)

...{

//

//CODEGEN:该调用是ASP.NETWeb窗体设计器所必需的。

//

InitializeComponent();

base.OnInit(e);

}




/**////<summary>

///设计器支持所需的方法-不要使用代码编辑器修改

///此方法的内容。

///</summary>


privatevoidInitializeComponent()

...{

this.Load+=newSystem.EventHandler(this.Page_Load);



}


#endregion


}


}


分享到:
评论

相关推荐

    c#中动态加载水晶报表自定义字段

    c#中动态加载水晶报表自定义字段

    15个Crystal Report 报表编程的实例

    6 如何在水晶报表中添加合计字段 7 如何在水晶报表中制作数据图表 8 如何在水晶报表中使用计算公式 9 如何在水晶报表中制作超级链接 10 如何在水晶报表中显示比例数据 11 如何在水晶报表中实现邮件列表 12 如何在...

    水晶报表从入门到精通

    第一部分 报表编写基础 第1章 创建一个报表 第2章 修改报表 第3章 格式化字段和对象 第二部分 使报表元素...第11章 在水晶报表中使用SQL 第12章 可视化分析数据 第13章 报表模版 第14章 报表引擎处理模型 。。。。。

    C# 打印与报表技术 源码

    如何报表数据分组  如何报表中筛选数据  如何对分组报表中的页码进行设置  报表的应用技巧  如何在水晶报表中使用交叉表  如何在水晶报表中使用子报表  如何动态显示子报表  如何...

    Crystal Reports 2008 水晶报表官方中文傻瓜教程(翻译).pdf

    4.4.1 选择报表类型及数据源.................................83 4.4.2 在“设计”选项卡上处理报表元素.......................84 4.4.3 使用其他报表功能.....................................86 第 5 章报表...

    Anycell Report 中国式报表控件2011 2.45.008.rar

    可拖动对象功能增强(现在AC不仅可以支持强大的表格功能,也可以使用AC Report 像传统的报表工具例如FastReport或水晶报表那样设计报表了)。  2.在新建页面时,增加了“数据模块”类型,用来存放报表中的数据控件...

    C#开发经验技巧宝典

    0997 如何设置水晶报表中节的背景图片 583 0998 如何设置水晶报表中节的背景色 584 0999 如何设置水晶报表的页面 584 1000 如何在报表中添加节 584 1001 如何在报表中移动节的顺序 585 1002 如何在报表中...

    ACReport中国式报表控件2011(Ver2.42)

    1.可拖动对象功能增强(现在AC不仅可以支持强大的表格功能,也可以使用AC Report 像传统的报表工具例如FastReport或水晶报表那样设计报表了) 2.在新建页面时,增加了“数据模块”类型,用来存放报表中的数据控件,...

    Visual C# 2008程序设计经典案例设计与实现

    案例7 利用水晶报表分组统计数据库中的数据 案例8 利用水晶报表筛选数据库中的数据 案例9 图表在水晶报表中的应用 本章小结 第7章 Visual C#2008与Windows系统设置 案例1 任务栏的显示与隐藏 案例2 开始按钮的...

    C# 源码 C#2008经典案例

    案例7 利用水晶报表分组统计数据库中的数据 案例8 利用水晶报表筛选数据库中的数据 案例9 图表在水晶报表中的应用 本章小结 第7章 VisualC#2008与Windows系统设置 案例1 任务栏的显示与隐藏 案例2 开始按钮的显示与...

    C#设计经典案例设计与实现

    案例7 利用水晶报表分组统计数据库中的数据 案例8 利用水晶报表筛选数据库中的数据 案例9 图表在水晶报表中的应用 本章小结 第7章 VisualC#2008与Windows系统设置 案例1 任务栏的显示与隐藏 案例2 开始按钮的显示与...

    Visual+C#+2008程序设计经典案例设计与实现.rar

    案例7 利用水晶报表分组统计数据库中的数据 案例8 利用水晶报表筛选数据库中的数据 案例9 图表在水晶报表中的应用 本章小结 第7章 VisualC#2008与Windows系统设置 案例1 任务栏的显示与隐藏 案例2 开始按钮的显示与...

    SAP BWBO实战指南像学习office一样学习.part5

    15.2 添加字段 15.3 写程序填充数据 15.4 设置数据源和数据抽取验证 第16章 一般数据源 16.1 数据库视图的创建 16.2 一般数据源的创建 16.3 GeneticDelta的设置 第17章 CO—PA数据源 17.1 CO.PA的原理 17.2...

    BW-《SAP BWBO实战指南像学习office一样学习》.part7

    15.2 添加字段 15.3 写程序填充数据 15.4 设置数据源和数据抽取验证 第16章 一般数据源 16.1 数据库视图的创建 16.2 一般数据源的创建 16.3 GeneticDelta的设置 第17章 CO—PA数据源 17.1 CO.PA的原理 17.2...

    BW-《SAP BWBO实战指南像学习office一样学习》.part8.

    15.2 添加字段 15.3 写程序填充数据 15.4 设置数据源和数据抽取验证 第16章 一般数据源 16.1 数据库视图的创建 16.2 一般数据源的创建 16.3 GeneticDelta的设置 第17章 CO—PA数据源 17.1 CO.PA的原理 17.2...

    BW-《SAP BWBO实战指南像学习office一样学习》.part6.

    15.2 添加字段 15.3 写程序填充数据 15.4 设置数据源和数据抽取验证 第16章 一般数据源 16.1 数据库视图的创建 16.2 一般数据源的创建 16.3 GeneticDelta的设置 第17章 CO—PA数据源 17.1 CO.PA的原理 17.2...

    SAP BWBO 实战指南--像学习OFFICE一样学习

    15.2 添加字段 15.3 写程序填充数据 15.4 设置数据源和数据抽取验证 第16章 一般数据源 16.1 数据库视图的创建 16.2 一般数据源的创建 16.3 GeneticDelta的设置 第17章 CO—PA数据源 17.1 CO.PA的原理 17.2...

Global site tag (gtag.js) - Google Analytics