`
kennyluo
  • 浏览: 81859 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

关于C# WinForm FastReport Studio的使用方法:

 
阅读更多

using System;
using System.Data;
using FastReport;
using Szcx.GeneralDB;
using System.Collections.Generic;

namespace CxFastReport
{
    //基类
    public abstract class BasePlugin :IfrxUserDataSet, IfrxUserDataSetEvents, IfrxDataSet, IfrxPlugin
    {
        private int itemIndex;
        /// <summary>
        /// 报表行索引,包括报表头,尾和数据行
        /// </summary>
        public int ItemIndex
        {
            get { return itemIndex; }
            set { itemIndex = value; }
        }

        private int columnCount;
        /// <summary>
        /// 列数
        /// </summary>
        public int ColumnCount
        {
            get { return columnCount; }
            set { columnCount = value; }
        }

        int rowCount = 0;
        /// <summary>
        /// 数据项总行数
        /// </summary>
        public int RowCount
        {
            get { return rowCount; }
            set { rowCount = value; }
        }
        
        #region IfrxUserDataSet 成员

        string fields;
        /// <summary>
        /// 报表列集合,格式:('column1'/n'column1'/n........)
        /// </summary>
        public string Fields
        {
            get { return fields; }
            set { fields = value; }
        }

        string name;
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
 
        #endregion

        #region IfrxUserDataSetEvents 成员

        public void OnFirst() { ItemIndex = 0; }
        public void OnNext() { ItemIndex++; }
        public void OnPrior() { ItemIndex--; }

        public void OnCheckEOF(out bool IsEOF)
        {
            IsEOF = (ItemIndex >= rowCount);
        }

        /// <summary>
        /// 报表时获取数据
        /// </summary>
        /// <param name="VarName">列名</param>
        /// <param name="Value">值</param>
        public abstract void OnGetValue(object columanName, out object Value);

       #endregion

        #region IfrxDataSet 成员

        public int CurrentRecordNo { get { return ItemIndex; } }
        public void GoFirst() { ItemIndex = 0; }
        public void GoNext() { ItemIndex++; }
        public void GoPrior() { ItemIndex--; }

        public int FieldsCount { get { return ColumnCount; } }
        public int RecordsCount { get { return this.rowCount; } }


        public int RangeEndCount
        {
            get
            {
                // TODO:  Add ReportDataTable.RangeEndCount getter implementation
                return 0;
            }
            set
            {
                // TODO:  Add ReportDataTable.RangeEndCount setter implementation
            }
        }

        public FastReport.frxRangeBegin RangeBegin
        {
            get
            {
                // TODO:  Add ReportDataTable.RangeBegin getter implementation
                return new FastReport.frxRangeBegin();
            }
            set
            {
                // TODO:  Add ReportDataTable.RangeBegin setter implementation
            }
        } 

        public abstract object ValueOfField(string FieldName);

        string userName = "";

        public string UserName
        {
            get { return userName; }
            set { userName = value; }
        }

        public FastReport.frxRangeEnd RangeEnd
        {
            get
            {
                // TODO:  Add ReportDataTable.RangeEnd getter implementation
                return new FastReport.frxRangeEnd();
            }
            set
            {
                // TODO:  Add ReportDataTable.RangeEnd setter implementation
            }
        }

        #endregion

        #region IfrxPlugin 成员

        public FastReport.frxPluginType PluginType
        {
            get
            {
                return FastReport.frxPluginType.ptDataSet;
            }
        }

        #endregion
    }
}






using System;
using System.Data;
using FastReport;
using Szcx.GeneralDB;
using System.Collections.Generic;
using Szcx.Misc;

namespace CxFastReport
{
    //实现Table数据的转换
    public class ReportDataTable : BasePlugin
    {
        private DataTable dataTable;

        /// <summary>
        /// 构造方法,构建列
        /// </summary>
        /// <param name="table">数据表</param>
        /// <param name="dataSourceName">生成的数据源名称</param>
        public ReportDataTable(DataTable table,string dataSourceName)
        {
            dataTable = table;
            FeildMap.Clear();
            //初始化
            this.Name = dataSourceName;
            this.UserName = dataSourceName;
            this.RowCount = table.Rows.Count;
            this.Fields = null;
            this.ColumnCount = table.Columns.Count;
            //构建列
            foreach (DataColumn col in dataTable.Columns)
            {
                 FeildMap.Add(field.FLD_DESC, field);
                 this.Fields += field.FLD_DESC + "/n";
 
            }
        }

        /// <summary>
        /// 实现报表时获取数据
        /// </summary>
        /// <param name="columnName">列名</param>
        /// <param name="Value">获取的值</param>
        public override void OnGetValue(object columnName, out object Value)
        {
           //报表时获取值
           object value = dataTable.Rows[this.ItemIndex][columnName.ToString()];
            //将Decimal数据类型装换为Int32,FastReport不能识别Decimal数据类型
            if (Value is Decimal)
            {
                Value = Decimal.ToInt32((Decimal)Value);
            }
        }

        public override object ValueOfField(string FieldName)
        {
            throw new Exception("The method or operation is not implemented.");
        }
    }
}



using System;
using System.Collections.Generic;
using System.Text;
using FastReport;
using System.Data;

namespace CxFastReport
{
    //数据绑定类
    public class ReportBinding
    {
        private List<BasePlugin> reportBasePlugins = new List<BasePlugin>();

        public void BindToReport(List<BasePlugin> plugins, TfrxReportClass report)
        {
            reportBasePlugins.Clear();
            foreach (BasePlugin plugin in plugins)
            {
                this.reportBasePlugins.Add(plugin);
                report.BindObject(plugin);
                report.SelectDataset(true, plugin);
            }
        }

        /// <summary>
        /// 卸载数据源
        /// </summary>
        public void UnbindFromReport(TfrxReportClass report)
        {
            foreach (BasePlugin local_table in this.reportBasePlugins)
            {
                report.SelectDataset(false, local_table);
            }
            reportBasePlugins.Clear();
        }
    }
}


//继承FastReporet的新类
using System;
using System.Collections.Generic;
using System.Text;
using FastReport;
using System.Data;
using System.Windows.Forms;
using System.Collections;

namespace CxFastReport
{
    public class FrxFastReport : TfrxReportClass
    {
        Form form;
        bool secondLang;
        public bool SecondLang
        {
            get { return secondLang; }
            set { secondLang = value; }
        }

        /// <summary>
        /// 绑定数据源对象的类
        /// </summary>
        private ReportBinding reportBinding = null;

        /// <summary>
        /// 数据源插件对象:分别是由:ReportDataTable,ReportList实现的
        /// </summary>
        List<BasePlugin> plugins = new List<BasePlugin>();

        private IList list = null;

        public FrxFastReport(Form form, bool secondLang)
        {
            this.secondLang = secondLang;
            this.reportBinding = new ReportBinding();
            this.form = form;
        }

        Dictionary<string, object> listDataSource = new Dictionary<string, object>();

        /// <summary>
        /// 数据源和名称,键值对,object为数据源,string数据源名称,
        /// 如:ListDataSource.Add(new Dictionary<tableName,dataTable>);
        /// </summary>
        public Dictionary<string, object> ListDataSource
        {
            get { return listDataSource; }
            set { listDataSource = value; }
        }

        /// <summary>
        /// 绑定数据到报表
        /// </summary>
        public void BindToReport()
        {
            IEnumerator ienumeratorKey = ListDataSource.Keys.GetEnumerator();
            while (ienumeratorKey.MoveNext())
            {
                string key = ienumeratorKey.Current.ToString();
                object reportDataSource = this.ListDataSource[key];
                if (reportDataSource is DataTable)
                {
                    this.plugins.Add(new ReportDataTable((DataTable)reportDataSource, key));
                    continue;
                }
                if (reportDataSource is DataView)
                {
                    DataTable tempTable = ((DataView)reportDataSource).Table;
                    this.plugins.Add(new ReportDataTable(tempTable, key));
                    continue;
                }
                if (reportDataSource is IList)
                {
                    this.list = (IList)reportDataSource;
                    this.plugins.Add(new ReportList(this.list, key));
                    continue;
                }
            }
            this.reportBinding.BindToReport(this.plugins, this);
        }
        
        /// <summary>
        /// 卸载数据源
        /// </summary>
        public void UnbindFromReport()
        {
            this.reportBinding.UnbindFromReport(this);
        }
    }
}


//掉用方法
//设置FastReport数据源
 Dictionary<string, DataTable> listDataSource = new Dictionary<string, DataTable>();
   /// <summary>
        /// 数据源和名称,键值对,object为数据源,string数据源名称,
        /// 如:ListDataSource.Add(new Dictionary<tableName,dataTable>);
        /// </summary>
        public Dictionary<string, DataTable> ListDataSource
        {
            get { return listDataSource; }
            set { listDataSource = value; }
        }



        /// <summary>
        /// 绑定数据到报表
        /// </summary>
        public void BindToReport()
        {
            IEnumerator ienumeratorKey = ListDataSource.Keys.GetEnumerator();
            while (ienumeratorKey.MoveNext())
            {
                string key = ienumeratorKey.Current.ToString();                DataTable reportDataSource = this.ListDataSource[key];
                 this.plugins.Add(new ReportDataTable((DataTable)reportDataSource, key));
                 this.reportBinding.BindToReport(this.plugins, this);
        }


 
分享到:
评论

相关推荐

    c# winform 绘制多行文本:自动换行:文本

    c# winform 绘制多行文本:自动换行:文本c# winform 绘制多行文本:自动换行:文本c# winform 绘制多行文本:自动换行:文本c# winform 绘制多行文本:自动换行:文本c# winform 绘制多行文本:自动换行:文本c# winform 绘制...

    c# winform fastreport

    近期做项目整理的资料,fastreport 4.6 破解版使用、c# winform demo、部署说明

    C# WinForm Log4net 示例: LogDemo.rar

    Log4net在C# WinForm中应用的一个简单示例:LogDemo.rar; VS2013下工程源码,解压后可直接参考使用; 也可参考该资源对应博客内容:http://blog.csdn.net/sean4m/article/details/53192944

    C# 调用 FastReport 报表的源代码

    我们将讲解C#调用FastReport的核心概念、使用步骤以及如何处理Delphi编译的BaseReport.dll。 1. **FastReport简介** FastReport是一款用于.NET平台的报表设计和生成工具,提供了丰富的预定义组件,如表格、图表、...

    C#Winform摄像头的视频录制和播放

    C# Winform实现图像的动态采集,采集到的流媒体按照*.wam或者任意一种Windows Media Player 11可以播放的文件格式, 并获取流媒体采集结束时的最后画面作为流媒体的封面。 要求有录像功能:“开始录像”、“暂停...

    C# winform调用本机摄像头,demo,附源码

    在C#编程环境中,Windows Forms(Winform)是一种常用的桌面应用程序开发框架,它允许开发者创建交互式的用户界面。本文将详细讲解如何利用C# Winform调用本机摄像头,包括多摄像头切换、多分辨率切换以及拍照功能。...

    c# fastreport PrintDialog 修改打印机设置,弹出打印机设置

    在C# WinForm应用开发中,FastReport是一个强大的报表设计工具,它允许开发者创建复杂的报告并集成到他们的应用程序中。而PrintDialog组件是.NET Framework提供的一种标准控件,用于显示一个对话框,让用户选择和...

    C# winform 万能打印模板,可以打印证书,修改证书参数,C#窗体程序

    C# winform 万能打印模板,可以打印证书,修改证书参数,C#窗体程序,代码注释详细 C# winform 万能打印模板,可以打印证书,修改证书参数,C#窗体程序,代码注释详细 C# winform 万能打印模板,可以打印证书,修改...

    C# winform 使用DsoFramer 创建 显示office 文档

    4. **交互控制**:开发者可以使用C#代码控制DsoFramer的属性和方法,比如设置文档的显示模式(阅读模式或编辑模式)、禁用/启用Office菜单和工具栏等。 5. **事件处理**:DsoFramer提供了丰富的事件,如Document...

    WinForm、WebForm、MVC都可用的FastReport

    FastReport是一款强大的报表工具,广泛应用于C#编程环境中,支持WinForm、WebForm以及MVC三种不同的应用程序架构。它的灵活性和易用性使得开发者能够快速创建复杂的数据报告,提高开发效率,同时也为用户提供友好的...

    C# Winform漂亮菜单

    1. **C# Winform界面设计**:C#是.NET框架下的主要编程语言,Winform是它用于构建桌面应用的库,提供了丰富的控件和API,允许开发者创建功能完备的用户界面。在Winform中,开发者可以使用设计工具直接拖放控件,如...

    198个经典C#WinForm实例源码 超赞的完整版

    "198个经典C#WinForm实例源码"包括: 1-窗体技巧 2-控件操作 3-图像操作 4-报表打印 5-系统操作 6-文件处理 7-网络操作 8-数据库操作 9-加密解密 10-硬件读写 11-游戏设计 "超赞的198个经典C#WinForm实例源码.zip " ...

    【C# winform 代码】类的静态成员及静态方法

    Microsoft Visual Studio 2010做的C# winform类的静态成员及静态方法,主要代码: public class Student { private int IDBase = 20080000; private int ID; public static int StudentNumber; public string ...

    C# winform窗体间传值(使用委托或事件)

    C#winform窗体间传值,三种方法示例,注释详细。使用方法:使用vs2013打开编译运行即可; 工程中总共介绍了三种方法: ###方法1:通过保存对象的引用调用其方法实现对子窗体的控制; ###方法2:通过委托,在子窗体...

    C#Winform图标素材.rar

    使用"C#Winform图标素材"这个压缩包,你可以找到各种风格和主题的图标,如通用的文件操作图标(例如新建、打开、保存、复制、粘贴等)、导航图标(前进、后退、主页等)、状态图标(成功、警告、错误等)以及自定义...

    C# Winform使用Font Awesome图标

    在C# Winform应用开发中,常常需要使用各种图标来增强界面的美观性和用户体验。Font Awesome是一个广泛使用的矢量图标库,它提供了大量的图标供开发者选择。本文将详细讲解如何在C# Winform项目中使用Font Awesome...

    C#Winform动态调用C++和C#的Dll

    在C#中,我们可以使用`DllImport`属性来标记外部方法,指出该方法是存在于DLL中的,然后通过`Assembly.Load`或`Assembly.LoadFrom`方法加载DLL。 然而,将DLL作为嵌入资源处理有以下好处: 1. 防止DLL地狱问题:...

    200个经典C#WinForm实例源码.rar

    C# WinForm允许开发者自定义控件样式,使用SkinForm或DevExpress等第三方库进行界面美化。实例中的一些项目可能展示了如何利用这些技术打造美观的用户界面,包括主题切换、动画效果等。 通过深入学习这200个经典...

    c#winform开发框架

    C# WinForm开发框架是一种基于.NET Framework的桌面应用程序开发工具,它为开发者提供了一套完整的控件、设计模式和架构,使得创建具有丰富用户界面的Windows应用程序变得更加便捷和高效。这款框架尤其适合初学者,...

    C#winform调用webapi.rar

    在IT行业中,C#是一种广泛使用的编程语言,尤其在开发Windows桌面应用时,WinForm是一个常用的框架。WebAPI则是.NET Framework或.NET Core中用于构建RESTful服务的技术,它允许开发者创建HTTP服务,可以被各种客户端...

Global site tag (gtag.js) - Google Analytics