FastReport 指定sql 和修改 数据库连接地址的 工具类 :FastReportHelper
  • 介绍
  • 核心代码:
  • 完整代码:

介绍

FastReport中,经常会遇到需要给 sql 加条件的情况,或者给数据库地址做更换。

(废话不多说)直接上工具类源码。

核心代码:
public class FastReportHelper
    {
        /// <summary>
        /// 设置字典中Sql根据别名
        /// </summary>
        /// <param name="report">报表类</param>
        /// <param name="alias">别名</param>
        /// <param name="sql">Sql</param>
        public static void SetDictionaryByAlias(Report report, string alias, string sql)
        {
            // 在报表的字典中查找指定别名的数据源
            var dataSource = report.Dictionary.FindByAlias(alias);
            // 检查数据源是否是TableDataSource类型
            if (dataSource is TableDataSource tableDataSource)
            {
                // 如果是TableDataSource类型,则设置其SelectCommand属性为提供的SQL语句
                tableDataSource.SelectCommand = sql;
            }
        }

        /// <summary>
        /// 设置字典中的数据源(数据库连接)
        /// </summary>
        /// <param name="report">报表类</param>
        /// <param name="name">名字</param>
        /// <param name="sqlconn">数据库连接地址</param>
        public static void SetDictionaryByName(Report report, string name, string sqlconn)
        {
            // 在报表的字典中查找指定名字的数据源
            var dataSource = report.Dictionary.FindByName(name);
            // 检查数据源是否是msSqlDataConnection类型
            if (dataSource is MsSqlDataConnection msSqlDataConnection)
            {
                // 如果是msSqlDataConnection类型,则设置其ConnectionString属性为提供的数据库连接地址
                msSqlDataConnection.ConnectionString = sqlconn;
            }
        }

    }
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.

具体解决什么问题实现什么业务呢?

参考下图

FastReport 指定sql 和修改 数据库连接地址的 工具类 :FastReportHelper_FastReport

FastReport 指定sql 和修改 数据库连接地址的 工具类 :FastReportHelper_数据库_02

如下面两种场景来调用:

如果直接运行的话,就会查询出数据库中的全部,而且数据源是之前报告文件中的数据源:

FastReport 指定sql 和修改 数据库连接地址的 工具类 :FastReportHelper_sql_03

做了更换之后,就是变化成我们自己的数据源和新的查询语句。

如何调用参考下面代码:

// 设置报表的数据连接,这里的"sqlconnection"是报表中定义的数据连接别名
            // 参数是数据库连接字符串 
            FastReportHelper.SetDictionaryByName(report, "sqlconnection", @"Server=.;Database=codepl;User Id=sa;Password=123456;");
            // 设置报表中的数据源查询语句,这里的"mb-qtable-alias"是报表中定义的数据集别名
            // 参数是SQL查询语句,从tmpsn表中选择id小于10的记录
            FastReportHelper.SetDictionaryByAlias(report, "mb-qtable-alias", "SELECT sn FROM tmpsn WHERE id < 10");
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

通过核心代码修改Sql和数据源之后,就可以实现下图效果了。

FastReport 指定sql 和修改 数据库连接地址的 工具类 :FastReportHelper_oracle_04

完整代码:
using FastReport;
using FastReport.Data;
using FastReport.Utils;
using System.Collections;
using System.Data;

using System.Data.SqlClient;

namespace fp_test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            FastReport.Report report = new FastReport.Report();
            // 加载 FastReport 的报表文件,该文件包含了报表的布局和数据源配置
            report.Load(@"C:\Users\daoli\Desktop\fp-test\codetest.frx");
            // 设置报表的数据连接,这里的"sqlconnection"是报表中定义的数据连接别名
            // 参数是数据库连接字符串 
            FastReportHelper.SetDictionaryByName(report, "sqlconnection", @"Server=.;Database=codepl;User Id=sa;Password=123456;");
            // 设置报表中的数据源查询语句,这里的"mb-qtable-alias"是报表中定义的数据集别名
            // 参数是SQL查询语句,从tmpsn表中选择id小于10的记录
            FastReportHelper.SetDictionaryByAlias(report, "mb-qtable-alias", "SELECT sn FROM tmpsn WHERE id < 10");
            // 准备报表,这一步会执行数据源的查询,准备显示报表
            report.Prepare();
            // 显示已经准备好但尚未打印的报表
            report.ShowPrepared();

        }

    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.

FastReport 指定sql 和修改 数据库连接地址的 工具类 :FastReportHelper_sql_05

  • GetData(): 获取数据源中的数据。
  • SetData(): 设置数据源中的数据。
  • Refresh(): 刷新数据源,重新从数据源获取数据。
  • GetRow(): 获取数据源中的指定行。
  • SetRow(): 设置数据源中的指定行的数据。
  • AddRow(): 在数据源中添加新行。
  • DeleteRow(): 删除数据源中的指定行。

FastReport 指定sql 和修改 数据库连接地址的 工具类 :FastReportHelper_sql_06

FastReport 指定sql 和修改 数据库连接地址的 工具类 :FastReportHelper_sql_07

主要是上图这几个 Find。具体详细就以后再细细写文档了(大部分都有资料。可以去官网看看。)。