2021-02-18

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 的环境,后面有机会再补上。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值