一起学习水晶报表之推模式【弱类型的DataSet实现显示报表数据】(课程5)

本文主要是介绍一起学习水晶报表之推模式【弱类型的DataSet实现显示报表数据】(课程5),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前面我们都是通过拉模式进行数据访问和显示,这里,将带大家一起来学习强大的推模型,实现报表功能。

我们知道在拉模式中,报表会根据需要显示的表和字段,首先需要进行所有字段和表进行查询,如果用户需要针对性地筛选数据,那么再从已经查到的数据中才进行筛选,这样看来,拉模式是不是太浪费系统资源了,进而也影响了系统的性能。我们这样想,是否可以通过先查询到用户想要的数据,然后直接显示到报表中,这样是不是就省去了先查找所有数据这一步骤,当数据复杂和繁多的时候,推模式是那么的犀利和便捷,因此我在这里也推荐大家采用【推模式】,使用代码进行访问和实现,真的是太灵活了。废话不说了,马上进入方法,实践才是硬道理。

在这里,我首先教新手一个快速获取报表模板中的SQL语句方法:


如图,打开报表rpt模板文件,选择【数据库字段】>>【鼠标右键】选择【显示SQL查询(w)】。这样就直接获取SQL的查询语句了。


【1】前面我们获取了SQL查询语句,但是该SQL语句并不是能够让C# 后台代码访问数据的合法语句,因此,需要的修改为合法的语句方能使用。这个我在这里就不多讲了,相信大家都懂的。我的方法是将刚才的语句复制到SQL Server中,进行验证。如图:


【2】进行报表模板的设计;

方法如前面一样,添加>>新建项>>Reporting>>Crystal Report报表,我不啰嗦了,这里我选择【作为空白报表】,如图:


没关系的,只不过报表向导有个导向过程,其实选择空白报表也是可以在后面添加表和字段的,自己琢磨研究。方法还是一样,选择对应的报表模板rpt,【数据库字段】>>【数据库专家】>>这样是不是就是可以添加了。方法相信大家都懂了。

【3】由于这里采用的是【推模式】,那么我就不用内置驱动来导入数据字段信息了,否则又是【拉模式】了。怎么办呢,有几种方法哦:

(1)采用刚才已经获取的SQL查询语句命令,如图:


这里选择:【创建新连接】>>【OLE DB】>>【你的数据库】>>【添加命令】>>双击,便弹出窗口【将命令添加到报表】

在该窗口输入刚才的SQL语句命令即可。【确定】>保存


【4】然后就是拖动字段进行设计报表模板了。不多说,自己美工去。

【5】在网页页面拖动水晶报表控件,这个和前面一样,这里也不多说了。

【6】这里我也不建立什么三层架构的,简单点吧,建立一个类,进行访问数据。如下:

public class CommonCode
    {
        public static DataTable GetData()
        {
            String connString = @"server=.;uid =sa;pwd = admin@123456;database = 北风贸易";
            using (SqlConnection conn = new SqlConnection(connString))
            {
                SqlDataAdapter da = new SqlDataAdapter(@"SELECT 产品资料.产品编号, 产品资料.供应商编号, 产品类别.类别名称, 供应商.供应商, 产品资料.类别编号
 FROM   (北风贸易.dbo.产品资料 产品资料 INNER JOIN 北风贸易.dbo.产品类别 产品类别 ON 产品资料.类别编号=产品类别.类别编号) INNER JOIN 北风贸易.dbo.供应商 供应商 ON 产品资料.供应商编号=供应商.供应商编号
",conn);
                //da.SelectCommand.Parameters
                DataSet ds = new DataSet();
                da.Fill(ds);
                return ds.Tables[0];
            }
        }

    }

当然,这里您也可以用Dataset类型,只不过到调用过程中,用ds.Tables[0]就可以了。

【7】然后页面后台写代码访问:

public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            CrystalReport2 rptDoc = new CrystalReport2();


       
    rptDoc.SetDataSource(CommonCode.GetData());  //获取数据源


            CrystalReportViewer1.ReportSource = rptDoc;

        }
    }

这是因为,我们使用推模式,已经在前面那个CommonCode类中获取了用户登录数据库信息。因此就可以省略了前面那些拉模式的代码,不用每次都要给表赋予用户登录数据库信息。

【8】编译,运行成功。




这篇关于一起学习水晶报表之推模式【弱类型的DataSet实现显示报表数据】(课程5)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/976855

相关文章

批量导入txt数据到的redis过程

《批量导入txt数据到的redis过程》用户通过将Redis命令逐行写入txt文件,利用管道模式运行客户端,成功执行批量删除以Product*匹配的Key操作,提高了数据清理效率... 目录批量导入txt数据到Redisjs把redis命令按一条 一行写到txt中管道命令运行redis客户端成功了批量删除k

分布式锁在Spring Boot应用中的实现过程

《分布式锁在SpringBoot应用中的实现过程》文章介绍在SpringBoot中通过自定义Lock注解、LockAspect切面和RedisLockUtils工具类实现分布式锁,确保多实例并发操作... 目录Lock注解LockASPect切面RedisLockUtils工具类总结在现代微服务架构中,分布

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali