FastReport 指定sql,修改数据源 ( 非DataSet修改 )

news2024/12/24 3:20:21

FastReport 指定sql,修改数据源,非DataSet修改

  • 介绍
      • 报告文件: codetest.frx 文件
      • 核心代码:
      • (扩展)小结一下:

介绍

FastReport中,经常会遇到需要给 sql 加条件的情况。

(废话不多说)比如下面这个案例。

报告文件: codetest.frx 文件

<?xml version="1.0" encoding="utf-8"?>
<Report ScriptLanguage="CSharp" TextQuality="Regular" ReportInfo.Name="Simple List" ReportInfo.Author="Fast Reports Inc" ReportInfo.Description="Demonstrates a simple list report. To create it:&#13;&#10;- go to &quot;Data&quot; menu and select &quot;Choose Report Data...&quot; item to select a datasource;&#13;&#10;- go to &quot;Report|Configure Bands...&quot; menu to create the band structure;&#13;&#10;- return to the report page, doubleclick the data band to show its editor;&#13;&#10;- choose the datasource;&#13;&#10;- drag data from the Data Dictionary window to the band." ReportInfo.Created="01/17/2008 03:05:57" ReportInfo.Modified="07/08/2024 17:08:12" ReportInfo.CreatorVersion="2022.3.9.0">
  <Dictionary>
    <MsSqlDataConnection Name="sqlconnection" ConnectionString="Server=.;Database=codepl;User Id=sa;Password=123456;">
      <TableDataSource Name="tmpsn" Alias="mb_table_alias" DataType="System.Int32" Enabled="true" TableName="tmpsn">
        <Column Name="id" DataType="System.Int32"/>
        <Column Name="sn" DataType="System.String"/>
      </TableDataSource>
      <TableDataSource Name="Table" Alias="mb-qtable-alias" DataType="System.Int32" Enabled="true" SelectCommand="select sn from tmpsn where id&gt;1">
        <Column Name="sn" DataType="System.String"/>
      </TableDataSource>
    </MsSqlDataConnection>
  </Dictionary>
  <ReportPage Name="Page1" PaperWidth="64" PaperHeight="32" LeftMargin="1" TopMargin="1" RightMargin="1" BottomMargin="1" MirrorMargins="true" Watermark.Font="宋体, 60pt">
    <DataBand Name="Data2" Width="117.18" Height="27.02" CanGrow="true" KeepChild="true" DataSource="Table" Columns.Count="2" Columns.MinRowCount="4">
      <BarcodeObject Name="Barcode1" Left="3.7" Width="110.31" Height="15.64" AutoSize="false" DataColumn="mb_table_alias.sn" ShowText="false" Barcode="Code128" Barcode.AutoEncode="true"/>
      <TextObject Name="Text1" Left="11.89" Top="16.47" Width="94.5" Height="10.55" Text="[mb-qtable-alias.sn]" Font="宋体, 5pt"/>
    </DataBand>
  </ReportPage>
</Report>

在这里插入图片描述
如果直接运行的话,就会查询出数据库中的全部:

在这里插入图片描述

但是我们现在要通过改变Sql来查询,所以需要调整sql语句,可以通过下面代码来改变:

核心代码:

FastReport.Report report = new FastReport.Report();
// 加载 FastReport 的报表文件,该文件包含了报表的布局和数据源配置
report.Load(@"C:\Users\daoli\Desktop\fp-test\codetest.frx");
// 查找报表字典中名为 "mb-qtable-alias" 的数据源,数据源是报表中定义的数据连接
var dataSource = report.Dictionary.FindByAlias("mb-qtable-alias");
if (dataSource is TableDataSource tableDataSource)
{
    // 判断 dataSource 是否是 TableDataSource 类型的实例
    // 如果是,则修改它的 SelectCommand 属性来改变查询命令
    tableDataSource.SelectCommand = "SELECT sn FROM tmpsn WHERE id < 10";
}
// 准备报表,这一步会执行数据源的查询,准备显示报表
report.Prepare();
// 显示已经准备好但尚未打印的报表
report.ShowPrepared();

通过核心代码修改Sql之后,就可以实现下图效果了。
在这里插入图片描述
在这里插入图片描述

完整代码:

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 static string sqlConStr = @"Server=.;Database=codepl;User Id=sa;Password=123456;";
        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");
            // 查找报表字典中名为 "mb-qtable-alias" 的数据源,数据源是报表中定义的数据连接
            var dataSource = report.Dictionary.FindByAlias("mb-qtable-alias");
            if (dataSource is TableDataSource tableDataSource)
            {
                // 判断 dataSource 是否是 TableDataSource 类型的实例
                // 如果是,则修改它的 SelectCommand 属性来改变查询命令
                tableDataSource.SelectCommand = "SELECT sn FROM tmpsn WHERE id < 10";
            }
            // 准备报表,这一步会执行数据源的查询,准备显示报表
            report.Prepare();
            // 显示已经准备好但尚未打印的报表
            report.ShowPrepared();
        }
    }
}


(扩展)小结一下:

通过 tableDataSource 来设置了Sql,是不是也代表其他地方也可以设置呢。

答:没错

在这里,其实还有很多方法可以实现。我们可以通过配置字典来观察等等。

着一些都是可以通过 DataComponentBase 来接触底层的一些代码。如下图和介绍

在这里插入图片描述
FastReport.Utils.DataComponentBase 是 FastReport 报表生成器中的一个类,它是 FastReport 中的数据组件基类。FastReport 是一个用于生成复杂报表的工具,它支持多种数据源,包括数据库、XML、Excel 文件等。
DataComponentBase 类提供了一系列方法,用于处理报表中的数据。这些方法包括:

  • GetData(): 获取数据源中的数据。
  • SetData(): 设置数据源中的数据。
  • Refresh(): 刷新数据源,重新从数据源获取数据。
  • GetRow(): 获取数据源中的指定行。
  • SetRow(): 设置数据源中的指定行的数据。
  • AddRow(): 在数据源中添加新行。
  • DeleteRow(): 删除数据源中的指定行。
    这些方法为报表提供了基本的数据操作功能,使得用户可以轻松地处理报表数据。此外,DataComponentBase 类还可能包含其他用于数据处理的方法和属性。
    在使用 FastReport 创建报表时,您可能需要从 DataComponentBase 派生出自己的类,以便为特定的数据源或数据操作提供自定义逻辑。这可以通过继承 DataComponentBase 类并重写其方法来实现。
    请注意,FastReport 的具体类和方法可能会随着版本的更新而变化,因此建议查阅最新的 FastReport 文档以获取最准确的信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1908820.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

k8s 部署 metribeat 实现 kibana 可视化 es 多集群监控指标

文章目录 [toc]环境介绍老(来)板(把)真(展)帅(示)helm 包准备配置监控集群获取集群 uuid生成 api_key配置 values.yaml 配置 es 集群获取集群 uuid 和 api_key配置 values.yaml 查看监控 缺少角色的报错 开始之前&#xff0c;需要准备好以下场景 一套 k8s 环境 k8s 内有两套不同…

jvisualvm工具使用--添加远程监视

jvisualvm简介 jvisualvm该工具位于jdk的bin目录下&#xff0c;是jdk自带的可用于监控线程、内存情况、查看方法的CPU时间和内存中的对 象、已被GC的对象、反向查看分配的堆栈等&#xff0c;即&#xff1a;Java虚拟机监控、故障排查及性能分析工具。 远程监控方法 以windows端…

ProFormList --复杂数据联动ProFormDependency

需求&#xff1a; &#xff08;1&#xff09;数据联动&#xff1a;测试数据1、2互相依赖&#xff0c;测试数据1<测试数据2,测试数据2>测试数据1。 &#xff08;2&#xff09;点击添加按钮&#xff0c;添加一行。 &#xff08;3&#xff09;自定义操作按钮。 &#xff0…

后端之路——登录校验前言(Cookie\ Session\ JWT令牌)

前言&#xff1a;Servlet 【登录校验】这个功能技术的基础是【会话技术】&#xff0c;那么在讲【会话技术】的时候必然要谈到【Cookie】和【Session】这两个东西&#xff0c;那么在这之前必须要先讲一下一个很重要但是很多人都会忽略的一个知识点&#xff1a;【Servlet】 什么是…

Android约束布局的概念与属性(2)

目录 3&#xff0e;链式约束4&#xff0e;辅助线 3&#xff0e;链式约束 如果两个或以上控件通过下图的方式约束在一起&#xff0c;就可以认为是他们是一条链&#xff08;如图5为横向的链&#xff0c;纵向同理&#xff09;。 图5 链示意图 如图5所示&#xff0c;在预览图中选…

CTFShow中BJDCTF2020的RE题

encode 写脚本时候发现了应该就是一个 base64 和 RC4 结合 base64 rc4的初始化S盒 rc4的异或加密 好久没有做题&#xff0c;有点忘记了&#xff0c;直接动调 可以把初始 S盒调出来&#xff0c;后面解总是出乱码&#xff0c;也是看了好久的wp才知道v6后面要赋值的字符串是十…

关于Mars3d的入门

关于Mars3d的入门 一. 创建地球&#xff0c;加载瓦片图层二 矢量图层2.1 常用矢量图层2.1.1 GraphicLayer2.1.2 GeoJsonLayer 2.2 矢量图层的点击事件 三 矢量数据四 事件机制 一. 创建地球&#xff0c;加载瓦片图层 // 1. 创建地球let map new mars3d.Map("mars3dContai…

FOC算法

如下图所示的&#xff0c;是FOC算法的整体流程图&#xff0c;下面图中最重要的部分就是SVPWM和3相全桥电路&#xff0c;和送给SVPWM进行运算&#xff0c;运算之后的结果为三个相差120的马鞍波&#xff0c;然后将这三相马鞍波作为控制全桥MOS开关的三个PWM波的占空比&#xff0c…

Vortex GPGPU的硬件设计和代码结构分析

文章目录 前言一、GPGPU是什么&#xff1f;1.1 GPU和GPGPU之间的差异1.2 GPU和CPU之间的集成方式1.3 GPU包含什么&#xff08;列举和VMIPS向量体系结构的差异&#xff09; 二、Vortex GPGPU是什么&#xff1f;2.1 Vortex GPGPU的技术边界和验证环境2.2 Vortex GPGPU的指令集设计…

Kubernetes基于helm部署jenkins

Kubernetes基于helm安装jenkins jenkins支持war包、docker镜像、系统安装包、helm安装等。在Kubernetes上使用Helm安装Jenkins可以简化安装和管理Jenkins的过程。同时借助Kubernetes&#xff0c;jenkins可以实现工作节点的动态调用伸缩&#xff0c;更好的提高资源利用率。通过…

C++ | Leetcode C++题解之第223题矩形面积

题目&#xff1a; 题解&#xff1a; class Solution { public:int computeArea(int ax1, int ay1, int ax2, int ay2, int bx1, int by1, int bx2, int by2) {int area1 (ax2 - ax1) * (ay2 - ay1), area2 (bx2 - bx1) * (by2 - by1);int overlapWidth min(ax2, bx2) - max…

使用void 0替代undefined

在很多大厂的规范里面&#xff0c;有这么一条规定&#xff1a;不让直接使用undefined关键字&#xff0c;而应该使用void 0来替代undefined。 一、void 0是什么意思&#xff1f; void是一个关键字&#xff0c;他后面跟的是一个表达式&#xff0c;不管这个表达式算的是啥&#…

you should not run configure as root, 升级tar出错

为了能用 tar 支持 zstd 的压/解缩包命令&#xff0c;需要升级 tar 到 1.3 以上&#xff0c;下面是下载和编译、安装命令&#xff1a; wget https://mirrors.aliyun.com/gnu/tar/tar-1.32.tar.bz2 tar -jxvf tar-1.32.tar.bz2 cd tar-1.32 ./configure make make install但在执…

Docker定时清理

一、循环调度执行 1、检查cron状态 systemctl status crond 2、创建要执行的shell脚本 vim /home/cleanup_docker.sh #! /bin/bash # 清理临时文件 echo $(date "%H:%M:%S") "执行docker清理命令..." docker system prune -af-a 清理包括未使用的镜像 …

PyJWT,一个基于JSON的轻量级安全通信方式的python库

目录 什么是JWT&#xff1f; JWT的构成 PyJWT库简介 安装PyJWT 生成JWT 验证JWT 使用PyJWT的高级功能 自定义Claims 错误处理 结语 什么是JWT&#xff1f; 在介绍PyJWT这个Python库之前&#xff0c;我们首先需要了解什么是JWT。JWT&#xff0c;全称JSON Web Token&am…

LabVIEW开发商业软件的多角度分析与注意事项

在使用LabVIEW开发商业软件时&#xff0c;有许多方面需要考虑和注意&#xff0c;包括项目管理、架构设计、性能优化、用户体验、安全性、维护与支持等。以下是从多个角度详细分析在LabVIEW中开发商业软件需要注意的事项。 项目管理 需求分析&#xff1a;确保深入了解客户需求&a…

如何在vue3中使用scss

一 要使用scss首先需要下载相关的包 可以在终端使用下面的命令下载相关包 npm install -D sass 二 在src文件下新建一个文件夹叫做styles 在文件夹下创建三个文件 index.scss主要用来引用其他文件 reset.scss用来清除默认的样式 variable.scss用来配置全局属性 三 需要在v…

生物素结合金纳米粒子(Bt@Au-NPs ) biotin-conjugated Au-NPs

一、定义与特点 定义&#xff1a;生物素结合金纳米粒子&#xff0c;简称BtAu-NPs或biotin-conjugated Au-NPs&#xff0c;是指通过特定的化学反应或物理方法将生物素修饰到金纳米粒子表面&#xff0c;形成稳定的纳米复合材料。 特点&#xff1a; 高稳定性&#xff1a;生物素的修…

上位机图像处理和嵌入式模块部署(mcu项目2:串口日志记录器)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 淘宝上面有一个商品蛮好玩的&#xff0c;那就是日志记录器。说是记录器&#xff0c;其实就是一个模块&#xff0c;这个模块的输入是一个ttl串口&am…

2024年信息素养大赛图形化编程小低组复赛真题-附答案 6547网

2024年全国青少年信息素养大赛图形化编程小低组复赛真题 题目总数&#xff1a;6 总分数&#xff1a;100 第1部分 第 1 题 问答题 【编程实现】点击小绿旗&#xff0c;实现将鱼的所有造型印到舞台区 【具体要求】 1. 将鱼显示出来 全部擦除所有内容 2. 将鱼的造型设…