报表——Fast Report

       一套软件,应该是离不开报表的,以前一直是接触的是水晶报表、Grid Report报表等,这篇博客说一下Fast Report报表。


     

 1、   初步了解:

     

      引用Fast Report.dll

     


        整体上,他的界面风格还是比较好看的,他的右边是数据源,通过访问数据库即可得到,可以对数据直接拖拽放在显示区域,很是方便,同时他还提供了强大的第三方类库,假如你觉得这个方法不好,可以对方法进行覆盖或者是重写。

       具体的模板操作,详见链接:Fast Report操作手册

       

2   、比较常用的代码,如下:


    

<span style="font-family:FangSong_GB2312;font-size:24px;"> public class AutoPrintFastReport
    {
        private FastReport.Report freport;
        private EnvironmentSettings ES;
        private ORG.DataUtility.BLL.AutoPrintReport bll;


        private string sysdescription = string.Empty;
        private string report = string.Empty;
        private string funcName=string.Empty;
        private string styleid=string.Empty;

        public void Dispose()
        {
            this.freport.Dispose();
            this.freport.Clear();   
            this.ES.Dispose();

        }

        public AutoPrintFastReport()
        {
            Init();
        }
        
        /// <summary>
        /// 初始化报表风格
        /// </summary>
        private void Init()
        {
            this.freport = new FastReport.Report();
            this.bll = new BLL.AutoPrintReport();
            //report
            //风格
            this.ES = new EnvironmentSettings();
            //窗体logo
            if (File.Exists(@"images/fr.png"))
            {
                Image image = Image.FromFile(@"images/fr.png");
                this.ES.DesignerSettings.Icon = System.Drawing.Icon.FromHandle(((Bitmap)image).GetHicon());
                this.ES.PreviewSettings.Icon = System.Drawing.Icon.FromHandle(((Bitmap)image).GetHicon());
            }
            //窗体title
            this.ES.DesignerSettings.Text = "";
            //界面风格
            ES.UIStyle = FastReport.Utils.UIStyle.Office2007Blue;
            //语言导入
            FastReport.Utils.Res.LoadLocale(@"Chinese (Simplified).frl");
        }

        /// <summary>
        /// 获取模版信息
        /// </summary>
        private void GetTempInf()
        {
            if (!string.IsNullOrEmpty(this.funcName)&& !string.IsNullOrEmpty(this.styleid))
            {
                DataSet ds = this.bll.GetReport(this.funcName,this.styleid);
                if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
                {
                    this.report = ds.Tables[0].Rows[0]["report"].ToString();
                    this.sysdescription = ds.Tables[0].Rows[0]["reportDesc"].ToString();
                    
                }
            }
            //设置模版名称
            this.freport.FileName = this.sysdescription;
        }
        /// <summary>
        /// 开启设计报表
        /// </summary>
        /// <param name="dt"></param>
        /// <param name="name"></param>
        /// <param name="TempID"></param>
        public void Design(DataTable dt,string name,string funcName,string styleid)
        {
            //重做“保存”和“另存为”事件
            this.ES.DesignerSettings.CustomSaveDialog += new OpenSaveDialogEventHandler(CustomSaveDialog_Handler);
            this.ES.DesignerSettings.CustomSaveReport += new OpenSaveReportEventHandler(CustomSaveReport_Handler);


            

            //禁用“新建”菜单
            this.ES.DesignerSettings.Restrictions.DontCreateReport = true;
            //禁用“打开”菜单
            this.ES.DesignerSettings.Restrictions.DontLoadReport = true;
            //禁用"最近打开的文档"列表
            this.ES.DesignerSettings.Restrictions.DontShowRecentFiles = true;
            // 注册报表数据
            this.freport.RegisterData(dt, name);

            //加载可用的数据源
            this.freport.GetDataSource(name).Enabled = true;

            //数据库对应的模版
            this.funcName = funcName;
            this.styleid = styleid;
            this.sysdescription = name;

            //设置模版数据
            this.GetTempInf();

            //report为空时不导入
            if (!string.IsNullOrEmpty(this.report))
            {
                //导入模版数据
                this.freport.LoadFromString(this.report);
            }


            this.freport.Design();

            // 释放使用的资源
            this.ES.DesignerSettings.CustomSaveDialog -= new OpenSaveDialogEventHandler(CustomSaveDialog_Handler);
            this.ES.DesignerSettings.CustomSaveReport -= new OpenSaveReportEventHandler(CustomSaveReport_Handler);

            this.freport.Dispose();
            this.freport.Clear();
            this.ES.Dispose();

        }

        
        /// <summary>
        /// FastReport的“保存”功能重载
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void CustomSaveReport_Handler(object sender, OpenSaveReportEventArgs e)
        {
            try
            {
                this.report = e.Report.SaveToString();
                bool ch = this.bll.UpdateReport(this.funcName, this.styleid, this.report);
                if (ch)
                {
                    MessageBox.Show(FRLang.MSG0004, AppMessage.MSG0000, MessageBoxButtons.OK, MessageBoxIcon.Information);

                }
                else
                {
                    MessageBox.Show(FRLang.MSG0005, AppMessage.MSG0000, MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        /// <summary>
        /// FastReport的“另存为”功能重载
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void CustomSaveDialog_Handler(object sender, OpenSaveDialogEventArgs e)
        {
            if (MessageBox.Show(FRLang.MSG0003, AppMessage.MSG0000, MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
            {
                e.Cancel = false;
                //e.FileName = @"saleProofdetail.frx";
            }
            else
            {
                e.Cancel = true;
            }

        }

        /// <summary>
        /// 打印报表
        /// </summary>
        /// <param name="dt">数据源</param>
        /// <param name="name">数据源别名</param>
        /// <param name="TempID">模版ID</param>
        public void Print(DataTable dt, string name, string funcName,string styleid)
        {
            //数据库对应的模版
            this.funcName = funcName;
            this.styleid = styleid;

            //设置模版数据
            this.GetTempInf();

            //report为空时报错
            if (!string.IsNullOrEmpty(this.report))
            {
                //导入模版数据
                this.freport.LoadFromString(this.report);
            }
           
            //注册数据源
            this.freport.RegisterData(dt, name);

            //启用数据源
            this.freport.GetDataSource(name).Enabled = true;
            // 运行报表打印
            this.freport.Print();

            // 释放使用的资源
            this.freport.Dispose();
            this.freport.Clear();
        }

        /// <summary>
        /// 预览报表
        /// </summary>
        /// <param name="dt">数据源</param>
        /// <param name="name">数据源别名</param>
        /// <param name="TempID">模版ID</param>
        public void Preview(DataTable dt, string name, string funcName, string styleid)
        {
            //数据库对应的模版
            this.funcName = funcName;
            this.styleid = styleid;

            //设置模版数据
            this.GetTempInf();

            //report为空时报错
            if (!string.IsNullOrEmpty(this.report))
            {
                //导入模版数据
                this.freport.LoadFromString(this.report);
            }

            //注册数据源
            this.freport.RegisterData(dt, name);

            //启用数据源
            this.freport.GetDataSource(name).Enabled = true;
            // 运行报表预览
            this.freport.Show();

            // 释放使用的资源
            this.freport.Dispose();
            this.freport.Clear();
        }



    }</span>

      假如遇到报表乱码的问题,应该是语言的原因,可以在代码中设置语言为中文,或者是在报表中设置为中文哦。


      假如报表在保存后,里面的一些信息是我们想要的,或者是我们需要修改的。我们可以在报表保存的时候,截获他保存的信息,这样可以在上面加以改动,我是通过截取保存的XML文件来进行修改,变成自己想要的样子。



     

  

     






    

评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值