crystal report 水晶报表+c# 在visual studio 开发
1.我的开发环境是visual studio 2015+c#
a.要在VS开发水晶报表先安装好CRforVS,我安装的是 CRforVS_redist_install_64bit_13_0_25,安装包可以百度一下就有了。
b.安装后会在VS的工具箱里看到 crystalReportViewer控件 ,把这个crystalReportViewer 插入窗体,这个控件是用来显视报表的。
2. 下面是我写的sqlserver,mysql,excel,access四种数据源获取的水晶报表ReportDocument的方法,可以参考。
a.连接SQLSERVER的水晶报表
public static ReportDocument getCrystalReportDocMSSQL(string RptPath, string ServerName, string DataBaseName, string UserId, string Password)
{
ReportDocument RptDoc = new ReportDocument();
RptDoc.Load(RptPath);//报水晶报表加载进来,RptPath为水晶报表*.rpt文件的物理路径+文件名称. rpt文件可以用水晶报表设计器先设计好。
TableLogOnInfo tabLog = new TableLogOnInfo();
for (int i = 0; i <= RptDoc.Database.Tables.Count - 1; i++)
{
tabLog = RptDoc.Database.Tables[i].LogOnInfo;
tabLog.ConnectionInfo.ServerName = ServerName;//sqlserver的服务器IP地址或名称
tabLog.ConnectionInfo.DatabaseName = DataBaseName;//数据库名称
tabLog.ConnectionInfo.UserID = UserId;//数据库用户
tabLog.ConnectionInfo.Password = Password;//数据库密码
RptDoc.Database.Tables[i].ApplyLogOnInfo(tabLog);
}
return RptDoc;
}
b.连接myssql的水晶报表, 开发电脑需要安装mysql的驱动程序,根据安装的版本需要修改对应的DriverName参数值
RptPath // 水晶报表*.rpt文件的物理路径+文件名称.
DriverName //mysql驱动名称
ServerName//mysql服务器IP或名称,
DataBaseName //数据库名称
UserId //用户名
Password //密码
public static ReportDocument getCrystalReportDocMYSQL(string RptPath, string DriverName, string ServerName, string DataBaseName, string UserId, string Password)
{
ReportDocument RptDoc = new ReportDocument();
RptDoc.Load(RptPath);//报水晶报表加载进来,RptPath为水晶报表*.rpt文件的物理路径+文件名称. rpt文件可以用水晶报表设计器先设计好。
TableLogOnInfo tabLog = new TableLogOnInfo();
string connString = "DRIVER={" + DriverName + "};SERVER=" + ServerName + ";Port=3306;UID=" + UserId + ";";
for (int i = 0; i <= RptDoc.Database.Tables.Count - 1; i++)
{
tabLog = RptDoc.Database.Tables[i].LogOnInfo;
tabLog.ConnectionInfo.ServerName = connString;
tabLog.ConnectionInfo.DatabaseName = DataBaseName;
tabLog.ConnectionInfo.UserID = UserId;
tabLog.ConnectionInfo.Password = Password;
RptDoc.Database.Tables[i].ApplyLogOnInfo(tabLog);
}
return RptDoc;
}c. 连接EXCEL的水晶报表
文件名称.
ServerName// 这里的 ServerName 要指定excel文件的物理路径+文件名称,如: d:\excel水表报表\测试.xls
public static ReportDocument getCrystalReportDocExcel(string RptPath, string DatabaseName)
{
ReportDocument RptDoc = new ReportDocument();
RptDoc.Load(RptPath);//报水晶报表加载进来,RptPath为水晶报表*.rpt文件的物理路径+文件名称. rpt文件可以用水晶报表设计器先设计好。
TableLogOnInfo tabLog = new TableLogOnInfo();
RptDoc.DataSourceConnections[0].SetConnection("", DatabaseName, false);
return RptDoc;
}
RptPath // 水晶报表*.rpt文件的物理路径+文件名称.
ServerName// 这里的 ServerName 要指定access文件的物理路径+文件名称,如: d:\access水表报表\测试.mdb
public static ReportDocument getCrystalReportDocACCESS(string RptPath, string DatabaseName)
{
ReportDocument RptDoc = new ReportDocument();
RptDoc.Load(RptPath);//报水晶报表加载进来,RptPath为水晶报表*.rpt文件的物理路径+文件名称. rpt文件可以用水晶报表设计器先设计好。
TableLogOnInfo tabLog = new TableLogOnInfo();
RptDoc.DataSourceConnections[0].SetConnection("", DatabaseName, false);
return RptDoc;
}
3. 透过以上4个文件获取到不同数据源的ReportDocument 后,最后就是把 ReportDocument 在 crystalReportViewer控件里显视了,这个就简单以,以下代码以sqlsever 为例。
ReportDocument _RptDoc = getCrystalReportDocMSSQL(“d:\\水晶报表\\测试报表1.rpt” , "localhost", "mydb", "sa", "123");
if(_RptDoc != null)
{
this.rptViewer.ReportSource = _RptDoc;
this.rptViewer.RefreshReport();//打开参数输入窗口让用户输入参数
}
4. 总结:
写下这个是为了有需要人有参考学习,我为了做这个水晶报表开始一开始花的时间是在获取ReportDocument 上,因为SQLSERVER还容易些,网上能找到一些关于水晶报表动态改变SQLSERVER的文章资料,
但MYSQL、EXCEL、ACCESS找了好久好久,没有找到完整的,后来经过google+自己尝试出来的。所以今天写下来,要是哪天忘记了还可以找出来看一看。另外还有oracle 的没有实现,因为我没有oracle 的环境,后面有机会再补上。