一起学习水晶报表之推模式【弱类型的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

相关文章

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源

springboot下载接口限速功能实现

《springboot下载接口限速功能实现》通过Redis统计并发数动态调整每个用户带宽,核心逻辑为每秒读取并发送限定数据量,防止单用户占用过多资源,确保整体下载均衡且高效,本文给大家介绍spring... 目录 一、整体目标 二、涉及的主要类/方法✅ 三、核心流程图解(简化) 四、关键代码详解1️⃣ 设置

Nginx 配置跨域的实现及常见问题解决

《Nginx配置跨域的实现及常见问题解决》本文主要介绍了Nginx配置跨域的实现及常见问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来... 目录1. 跨域1.1 同源策略1.2 跨域资源共享(CORS)2. Nginx 配置跨域的场景2.1

Python中提取文件名扩展名的多种方法实现

《Python中提取文件名扩展名的多种方法实现》在Python编程中,经常会遇到需要从文件名中提取扩展名的场景,Python提供了多种方法来实现这一功能,不同方法适用于不同的场景和需求,包括os.pa... 目录技术背景实现步骤方法一:使用os.path.splitext方法二:使用pathlib模块方法三

CSS实现元素撑满剩余空间的五种方法

《CSS实现元素撑满剩余空间的五种方法》在日常开发中,我们经常需要让某个元素占据容器的剩余空间,本文将介绍5种不同的方法来实现这个需求,并分析各种方法的优缺点,感兴趣的朋友一起看看吧... css实现元素撑满剩余空间的5种方法 在日常开发中,我们经常需要让某个元素占据容器的剩余空间。这是一个常见的布局需求

HTML5 getUserMedia API网页录音实现指南示例小结

《HTML5getUserMediaAPI网页录音实现指南示例小结》本教程将指导你如何利用这一API,结合WebAudioAPI,实现网页录音功能,从获取音频流到处理和保存录音,整个过程将逐步... 目录1. html5 getUserMedia API简介1.1 API概念与历史1.2 功能与优势1.3

Java实现删除文件中的指定内容

《Java实现删除文件中的指定内容》在日常开发中,经常需要对文本文件进行批量处理,其中,删除文件中指定内容是最常见的需求之一,下面我们就来看看如何使用java实现删除文件中的指定内容吧... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细介绍3.1 Ja

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

PostgreSQL中MVCC 机制的实现

《PostgreSQL中MVCC机制的实现》本文主要介绍了PostgreSQL中MVCC机制的实现,通过多版本数据存储、快照隔离和事务ID管理实现高并发读写,具有一定的参考价值,感兴趣的可以了解一下... 目录一 MVCC 基本原理python1.1 MVCC 核心概念1.2 与传统锁机制对比二 Postg

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4