[.Net码农]在BS表单上使用fastreport.net

http://blog.csdn.net/nihao87224/article/details/46365597




使用c#制作activex控件

背景:觉得现有自带的打印方案模板工具已经不够用了,想把fastreport引入进来。所以选择用activex插件的形式。另外不会c++所以选择用c#来做。

环境:开发环境vs2012中选择的framework3.5、sqlserver2008 R2数据库、tomcat的BS。

目标:在BS表单中可以实现使用fastreport进行打印、打印设计功能。(按照不同公司可以有多个打印模板)

这部分开发没有太多可以说的,主要就是在vs中引入fastreport的几个dll,贴上几个主要的代码吧。

打印部分:

 public void fsPrint(string rptEntityJsonString)
        {
            try
            {
                rEntity = (rptEntity)JsonConvert.DeserializeObject(rptEntityJsonString, typeof(rptEntity));
                DataSet ds = this.getDataSetBySql(rEntity.sqlStringList);

                string rptString = string.Empty;
                //如果已经存在此类打印方案,则弹出打印模板选择界面加载之前的打印模板(如果同dataid,同branchid只有一个可供选择的打印模板则自动返回那一个)
                if (this.getRptCount(rEntity) > 0)
                {
                    if (this.getRptCount(rEntity) == 1)  //直接绑定之前存在的模板
                    {
                        rptString = GetRptString(rEntity.rptid);
                    }
                    else
                    {
                        openRptDialogForm form = new openRptDialogForm();
                        form.ReportsTable = this.getRptInfoTable(rEntity.branchid, rEntity.dataid);

                        if (form.ShowDialog() != DialogResult.OK)
                        {
                            MessageBox.Show("没有选择打印方案!");
                            form.Close();
                            return;
                        }
                        else
                        {
                            rEntity.rptid = form.ReportID;
                            rptString = GetRptString(rEntity.rptid);
                        }
                    }
                }

                FastReport.Report report1 = new FastReport.Report();
                report1.LoadFromString(rptString);
                report1.RegisterData(this.getDataSetBySql(rEntity.sqlStringList), "rptDataSet");
                foreach (DataTable dt in ds.Tables)
                {
                    report1.GetDataSource(dt.TableName).Enabled = true;
                }
                report1.Show();
                report1.Dispose();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

 

打印设计:

   public void designReport(string rptEntityJsonString)
        {
            //设置订制保存打印模板的方法
            Config.DesignerSettings.CustomSaveReport += DesignerSettings_CustomSaveReport;
            Config.DesignerSettings.CustomSaveDialog += DesignerSettings_CustomSaveDialog;
            //解析rptEntity的json字符串
            try
            {
                rEntity = (rptEntity)JsonConvert.DeserializeObject(rptEntityJsonString, typeof(rptEntity));
                DataSet ds = this.getDataSetBySql(rEntity.sqlStringList);
                FastReport.Report rpt = new FastReport.Report();
                rpt.RegisterData(ds, "rptDataSet");
                //弹出新建和打开选择窗口
                choseForm choseF = new choseForm();
                if (choseF.ShowDialog() == DialogResult.OK)
                {
                    //新建方案模板
                    if (choseF.option == "New")
                    {
                        //弹出新建form
                        NewForm newF = new NewForm();
                        newF.rptEditMode = NewForm.editMode.新建;
                        newF.ReportsTable = this.getRptInfoDataTable(rEntity.branchid, rEntity.dataid);
                        newF.ThisEntity = rEntity;
                        if (newF.ShowDialog() != DialogResult.OK)
                        {
                            return;
                        }
                    }
                    //打开方案模板
                    else
                    {
                        //如果已经存在此类打印方案,则弹出打印模板选择界面加载之前的打印模板(如果同dataid,同branchid只有一个可供选择的打印模板则自动返回那一个)
                        if (this.getRptCount(rEntity) > 0)
                        {

                            //弹出编辑form
                            NewForm editForm = new NewForm();
                            editForm.rptEditMode = NewForm.editMode.打开;
                            editForm.ReportsTable = this.getRptInfoDataTable(rEntity.branchid, rEntity.dataid);
                            editForm.ThisEntity = rEntity;

                            if (editForm.ShowDialog() == DialogResult.OK)
                            {
                                rpt.LoadFromString(this.GetRptString(rEntity.rptid));
                            }

                        }
                    }
                }
                else
                {
                    return;
                }
                foreach (DataTable dt in ds.Tables)
                {
                    rpt.GetDataSource(dt.TableName).Enabled = true;
                }
                rpt.Design();
                rpt.Dispose();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

 

 其中值得注意的是 Config.DesignerSettings.CustomSaveReport += DesignerSettings_CustomSaveReport;  这个事件可以在回调函数中自定义保存方法,因此我为了方便将打印的模板直接保存到数据库中了。

另外关于c#制作activex控件的具体步骤参考了以下博客,受益匪浅。

http://www.cnblogs.com/homer/archive/2005/01/04/86473.html

http://www.cnblogs.com/homer/archive/2005/01/08/88780.html

http://www.cnblogs.com/homer/archive/2005/01/26/97822.html

 

js与activex控件的数据交互

背景:依然是由于使用的erp限制,不能直接在html页中使用object对象,注册依然是采用的如下方法 (MSComm1名字是直接复制之前电子秤里面的,懒得改了。)

function uf_GetSerPortData()
{
    try
    {
        MSComm1 = new ActiveXObject("ReportTools.rptObject");
        if ((typeof (MSComm1) == "undefined") || (MSComm1 == null))
        {
           // alert("创建打印工具对象失败!");
        }
        else
        {
            //绑定事件
           // alert("创建activex对象成功!");

        }
    }
    catch (err)
    {
       // alert(err.description);
    }
}

目标:需要将数据传输到activex端,此处选择的是json字符串方式

为了方便,写了个专门转换的js方法:

[javascript]  view plain copy
  1. function GetRptJsonStr(rptSqlStringArray, rptid, rptName, branchid, rptDescription, createtime, lastModifyTime, lastModifyUserID, dataid) {  
  2.           //初始化返回对象  
  3.           var retObj = {  
  4.               retState: "success",  
  5.               jsonString: ""  
  6.           }  
  7.           //初始化json格式  
  8.           var retRptJsonObj =  
  9.              {  
  10.                  "sqlStringList": [],  
  11.                  "rptid""",  
  12.                  "rptName""",  
  13.                  "branchid""",  
  14.                  "rptDescription""",  
  15.                  "createtime""",  
  16.                  "lastModifyTime""",  
  17.                  "lastModifyUserID""",  
  18.                  "dataid"""  
  19.              }  
  20.   
  21.           try {  
  22.   
  23.               for (var i = 0; i < rptSqlStringArray.length; i++) {  
  24.                   retRptJsonObj.sqlStringList.push(rptSqlStringArray[i]);  
  25.               }  
  26.               retRptJsonObj.rptid = rptid;  
  27.               retRptJsonObj.rptName = rptName;  
  28.               retRptJsonObj.branchid = branchid;  
  29.               retRptJsonObj.branchid = branchid;  
  30.               retRptJsonObj.rptDescription = rptDescription;  
  31.               retRptJsonObj.createtime = createtime;  
  32.               retRptJsonObj.lastModifyTime = lastModifyTime;  
  33.               retRptJsonObj.lastModifyUserID = lastModifyUserID;  
  34.               retRptJsonObj.dataid = dataid;  
  35.   
  36.               retObj.jsonString = JSON.stringify(retRptJsonObj);  
  37.           }  
  38.           catch (err) {  
  39.               retObj.retState = err.message;  
  40.           }  
  41.           return retObj;  
  42.       }  

 打印设计使用的方法:

function uf_printDesign()
{

  var sqlArray = new Array();
  var sql=  "select top 10 rq, orderId,mail_no, send_name, send_phone,send_mobile,send_address, send_postcode, send_province, send_city,send_area, order_type,service_type,"
           +"receive_name, receive_mobile,receive_phone, receive_address, receive_postcode, receive_province, receive_city,receive_area,"
           +"item_name, item_number, remark, date, is_zx, is_dy,"
           +"items_value,agency_fund,dbo.f_Ch2Num(agency_fund,1) as je,fenb_seqno,bigpen,username"
           +" from int_waybill_yt"
  sqlArray.push(sql);

  var retObj= GetRptJsonStr(sqlArray,"0","测试用的打印方案","FLB","测试描述","2015-05-13T10:26:34.3448226+08:00","2015-05-13T10:26:34.3448226+08:00","PF","scc_waybill_yuantong");
  if (retObj.retState == "success") {
     MSComm1.designReport(retObj.jsonString);
  }
  else {
      alert(retObj.retState);
  }

}

 

activex控件的部署

背景:由于c#开发的activex控件不能像ocx那样直接用regsvr32的方式注册,如果用regasm.exe注册又不靠谱,所以选择弄成安装包的形式。一番周折之后还是选择了vs2010的安装和部署工具(InstallShield 实在是折腾不下来)

生成过程:新建vs2010安装项目,选择程序集,生成。

需要注意的:

问题描述:明明选的是3.5,但是生成的安装包却提示要4.0的framework。其实是系统必备里面勾选错了。

解决方案:

  1. 右键项目--》视图--》启动条件——》属性——》Version   改成3.5的           
  2. 右键项目——》属性——》系统必备——》  去掉不必要的

问题描述:转换为activex控件。

解决方案:文件系统——》右键指定dll——》属性——》Register——》选为vsdraCOM

 

 

下面贴上效果图:


博客园CSDN同步更新,博客园地址http://www.cnblogs.com/falcon-fei/



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 ASP.NET使用 Echarts,需要进行以下准备工作: 1. 下载 Echarts:从 Echarts 官网(https://echarts.apache.org/zh/download.html)下载最新版本的 Echarts。 2. 引入 Echarts:将下载的 Echarts 文件解压后,将 echarts.min.js 文件复制到项目中。 3. 引入 jQuery 库:Echarts 依赖于 jQuery 库,因此需要将 jQuery 库引入到项目中。 4. 创建容器:在 ASP.NET 页面中创建一个 div 容器,用于显示图表。 5. 初始化图表:在页面加载时,通过 JavaScript 代码初始化图表,并将图表绑定到容器上。 下面是一个简单的 ASP.NET 页面示例,展示如何使用 Echarts: ```html <!DOCTYPE html> <html> <head> <title>Echarts Demo</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script src="echarts.min.js"></script> </head> <body> <div id="chart" style="width: 600px;height:400px;"></div> <script> $(document).ready(function () { // 初始化图表 var chart = echarts.init(document.getElementById('chart')); // 配置项 var option = { title: { text: 'Echarts Demo' }, tooltip: {}, xAxis: { data: ['A', 'B', 'C', 'D', 'E', 'F'] }, yAxis: {}, series: [{ name: '数据', type: 'bar', data: [5, 20, 36, 10, 10, 20] }] }; // 使用配置项显示图表 chart.setOption(option); }); </script> </body> </html> ``` 这个示例中,我们引入了 jQuery 库和 Echarts 库,并在页面中创建了一个 id 为 chart 的 div 容器。在 JavaScript 代码中,我们初始化了一个 echarts 实例,然后定义了一个 option 配置项,最后使用 setOption() 方法将图表显示在容器中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值