MVC架构 使用FastReport

1.Web.config文件

添加配置

<httpHandlers>
<add path="FastReport.Export.axd" verb="*" type="FastReport.Web.Handlers.WebExport"/>
</httpHandlers>

2.在包含views的文件夹中webconfig中加入以下信息:引用命名空间

<add namespace="FastReport"/>
<add namespace="FastReport.Web"/>

3.在_Layout.cshtml文件中<head>加入

@WebReportGlobals.Scripts()  

@WebReportGlobals.Styles() 

4.在view视图中加入

@ViewBag.WebReport.GetHtml()

5.后台

//数据库中读取报表,并加载数据和报表
        public void ReadBlob(int idData, DataSet dataSet)
        {
            OracleConnection conn = new OracleConnection();
            string connString = "Data Source= (DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.5.86.45)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = ORCL)));User ID=DWMP;Password=DWMP;Persist Security Info=True";
            using (conn = new OracleConnection(connString))
            {
                try
                {
                    conn.Open();
                    OracleCommand cmd = conn.CreateCommand();
                    // 利用事务处理(必须)
                    OracleTransaction transaction = cmd.Connection.BeginTransaction();
                    cmd.Transaction = transaction;
                    // 获得 OracleLob 指针
                    string sql = "select REPORTDATA from BASE_FORMPRINT where id= " + idData;
                    cmd.CommandText = sql;
                    OracleDataReader dr = cmd.ExecuteReader();
                    dr.Read();
                    //读取内存流
                    MemoryStream ms = new MemoryStream((byte[])dr["REPORTDATA"]);

                    WebReport report = new WebReport();//创建报表对象
                    report.Width = 740;
                    report.Height = 600;
                    report.Report.Load(ms);//加载内存流
                    report.Report.RegisterData(dataSet);//传递数据
                    ViewBag.WebReport = report;//赋值报表给页面
                    ms.Dispose();
                    report.Dispose();
                    cmd.Parameters.Clear();
                    // 提交事务
                    transaction.Commit();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    conn.Close();
                }
            }
        }
//动作:打印预览  
        // GET: /Print/PrintDetail
        public ActionResult PrintDetail(int reportid, int opersheetid)
        {
            ViewBag.Message = "PrintDetail";
            DataSet dataSet = getDataSet(reportid,opersheetid);//获得数据集
            ReadBlob(reportid, dataSet);//加载报表
            return View();
        }


        //获得单据数据集
        private DataSet getDataSet(int reportid,int opersheetid)
        {
            DataSet dataSet = new DataSet();
            string getViewName = "select * from base_formprint where id=" + reportid;
            DataTable dt=DbHelperOra.Query(getViewName).Tables[0];
            string sheetView=dt.Rows[0]["sheetdataset"].ToString();
            string detailView = dt.Rows[0]["detaildataset"].ToString();
            string checkView = dt.Rows[0]["aduitdataset"].ToString();
            if (!String.IsNullOrEmpty(sheetView))
            {
                string sqlSheet = "select * from " + sheetView + " where id=" + opersheetid;//单据信息
                DataTable dt1 = DbHelperOra.Query(sqlSheet).Tables[0];
                dt1.TableName = sheetView;
                dataSet.Tables.Add(dt1.Copy());
            }

            if (!String.IsNullOrEmpty(detailView))
            {
                string sqlDetail = "select * from " + detailView + " where sheetid=" + opersheetid;//明细信息
                DataTable dt2 = DbHelperOra.Query(sqlDetail).Tables[0];
                dt2.TableName = detailView;
                dataSet.Tables.Add(dt2.Copy());
            }

            if (!String.IsNullOrEmpty(checkView))
            {
                string sqlCheck = "select * from " + checkView + " where id=" + opersheetid;//审核
                DataTable dt3 = DbHelperOra.Query(sqlCheck).Tables[0];
                dt3.TableName = checkView;
                dataSet.Tables.Add(dt3.Copy());
            }
            return dataSet;
        }
View Code

 

posted @ 2016-11-30 16:31  张云飞  阅读(3038)  评论(1编辑  收藏  举报