首页 > 水晶报表调用存储过程的问题

水晶报表调用存储过程的问题

前言:现在碰到了水晶报表调用存储过程的问题,问题是这样的:ERP软件里有很多的数据表,有些报表的字段要从多个数据表里取数据,并且要对数据进行处理,来作为报表的字段,我看了些资料,说可以通过存储过程来取数据和运算数据后直接插入到水晶报表里,注意报表有多个字段大多字段需要运算的,要怎样做?

回复

1、在项目中添加一个xsd,在设计界面中将存储过程拖入设计界面

2、设计报表,将添加的xsd作为报表的数据源

3、在页面代码中添加以下代码

SqlClient.SqlCommand   cmd   =new   SqlClient.SqlCommand();

cmd.Connection   =   new   SqlClient.SqlConnection( " ");

cmd.CommandType   =   CommandType.StoredProcedure;

cmd.CommandText   =   "spname ";

//cmd.Parameters.Add( "@p1 ");

//cmd.Parameters[ "@p1 "].Value   =   " "

//传递存储程参数

SqlClient.SqlDataAdapter()   pt   =   new     SqlClient.SqlDataAdapter(cmd);

Dataset1   ds   =   new   Dataset1();   //前面添加的强类型数据集

pt.Fill(ds,   "spname ");

ReportDocument   rpt   =   new   ReportDocument();

rpt.Load(Server.MapPath( "CrystalReport1 "));

rpt.SetDataSource(ds)

this.CrystalReportViewer1.ReportSource   =   rpt 



详解:

     做报表要的只是一个结构.你可以用DATASET文件结构来做报表,然后再运行storeprocedure去FILL一个DATASET结构的实例,再rpt.setDataSource(DataSet),就行了..至于你在storeprocedure里做什么,根本跟报表没啥关系.只要输出一个结构相同的表就行了.

本示例操作 主要实现

a. ReportViewer关联Report1.rdlc的简单呈现

b. 对带有报表参数的Report1.rdlc的呈现

c. 利用程式生成的DataSet 填充报表

d. 调用存储过程 生成DataSet 填充报表

==========

简单的呈现

==========

1. 打开VS2005,文件->新建->网站 选择语言种类(C#)

2. 在该解决方案下 设计其已经生成的Default.aspx

3. 将工具箱-数据下的ReportViewer 拉入Default.aspx的设计界面

4. 在用鼠标选中ReportViewer1时 可以看到其右上角的 小三角 图标

5. 用鼠标点击该小三角 将展开 ReportViewer任务 快捷菜单

6. 由于本项目 目前还没有做好的报表 所以 选择 设计新报表

7. 点击 设计新报表 后 将呈现报表Report1.rdlc的设计界面

8. 由于本项目 目前还没有做好的网站数据源

   所以 此时要添加新数据源

  (如果没有呈现“网站数据源”界面,可以点击报表设计界面,

   此时上方菜单中多出现“数据”,“报表”等选项

   可以在“数据”菜单下,选择“显示数据源”)

9. 点击“添加新数据源” 会出现“TableAdapter 配置向导”

10. 选择数据连接(如连接到本机的Northwind数据库),下一步

11. 选择是否要将连接字符串保存到应用程序配置文件中,下一步

12. 选择命令类型,此时 可以 点击 取消 按钮,退出向导

13. 全部保存

14. 选择 视图 菜单 下 “服务器资源管理器”,

    可以看到刚才所建立的数据连接,

    可以看到Northwind数据库下的表,视图,存储过程,函数

15. 在解决方案的树下 找到并打开App_Code文件夹下的DataSet1.xsd数据集

16. 可以看到 打开的数据集设计器 是空的,此时可以将“服务器资源管理器”

    下的Northwind的表或存储过程等 拉入 数据集设计器

    (如此时 拉入了Orders表 和 Sales by Year这个存储过程)

17. 全部保存

18. 双击Report1.rdlc,打开报表设计界面

    将此时的报表设计工具箱中的 报表项 的  表 拉入 报表设计界面

19. 选择 “数据”菜单下的“显示数据源”,

    可以在网站数据源下 看到 DataSet1 下的 两个 表 Orders 和 Sales by Year

20. 此时选择Orders下的任意字段 (如OrderID 和 CustomerID)

    拉到Report1.rdlc设计界面的表的“详细资料”处 用于报表显示

21. 全部保存

22. 回到Default.aspx的设计界面,为ReportViewer1 绑定报表

    选择ReportViewer1显示刚才设计好的Report1.rdlc

23. 全部保存,按F5或Ctrl+F5 运行,以查看初步效果

======================================

接下来要为Report1.rdlc添加一个报表参数

======================================

24. 回到报表Report1.rdlc的设计界面

    点击 报表 菜单 下的“报表参数”

25. 在报表参数在设置框中 添加一个报表参数 进行相关设置 并 确定以保存

   (如其参数名称为rptParaA,类型为String)

26. 拉入一个文本框的报表项到Report1.rdlc的设计界面 以做为该报表的标题显示

27. 选中并右键单击该文本框,在弹出的菜单中选择“表达式”,

    进入“编辑表达式”的对话框

28. 在“编辑表达式”的对话框中,选择 参数,

    并双击刚才设置的rptParaA,使文本框的值=Parameters!rptParaA.Value

29. 保存对Report1.rdlc的修改

30. 因为新的Report1.rdlc报表的文本框需要有报表参数值的传入

    所以要在ReportViewer1 对Report1.rdlc的呈现时

    对Default.aspx.cs的编辑

31. 在Default.aspx.cs加入引用

    using Microsoft.Reporting.WebForms;   

    在Page_Load中加入如下代码

        ReportParameter rptParaA = new ReportParameter("rptParaA""测试报表参数");

        ReportViewer1.LocalReport.SetParameters(
new ReportParameter[] { rptParaA });



32.保存并运行 以查看效果

=========================================

接下来,需要对所要呈现的报表资料 进行定制

也就是通过设计DataSet

用符合需要的数据对报表进行资料绑定和呈现

=========================================

33.设置ReportViewer1的Visible为false

34.在Default.aspx的设计界面 加入一个按钮Button1

   将通过此按钮的Click事件 实现对数据库的访问 以及DataSet的数据填充

   和对ReportViewer1的资料绑定

35. Default.aspx.cs加入引用

    using System.Data.SqlClient;

    using Microsoft.Reporting.WebForms;

    Button1_Click中的代码示例如下 

        SqlConnection myConn = new SqlConnection("Data Source=192.168.0.36;Initial Catalog=Northwind;User ID=sa;Password=sa");

        SqlDataAdapter myda 
= new SqlDataAdapter("select top 5 * from orders", myConn);

        DataSet myds 
= new DataSet();

        myConn.Open();

        myda.Fill(myds);

        myConn.Close();



        ReportViewer1.Visible 
= true;



        ReportParameter rptParaA 
= new ReportParameter("rptParaA""测试报表参数");

        ReportViewer1.LocalReport.SetParameters(
new ReportParameter[] { rptParaA });

  

        ReportDataSource rds 
= new ReportDataSource("DataSet1_Orders", myds.Tables[0]);

        ReportViewer1.LocalReport.DataSources.Clear();

        ReportViewer1.LocalReport.DataSources.Add(rds);

        ReportViewer1.LocalReport.Refresh();



   注意ReportDataSource rds = new ReportDataSource("DataSet1_Orders", myds.Tables[0]);

       的"DataSet1_Orders"是与前台html程序的

        <rsweb:ReportViewer ID="ReportViewer1" runat="server" Font-Names="Verdana" Font-Size="8pt" Height="400px" Visible="False" Width="400px">

            
<LocalReport ReportPath="Report1.rdlc">

                
<DataSources>

                    
<rsweb:ReportDataSource DataSourceId="ObjectDataSource1" Name="DataSet1_Orders" />

                
DataSources>

            
LocalReport>

        
rsweb:ReportViewer>

       中的的Name="DataSet1_Orders"是一致的

    可以通过对DataSet的填充时的sql语句等的定制 来得到所需要的数据 以便报表呈现

    需要注意的是由于ReportViewer1此时的关联报表为Report1.rdlc,所以DataSet的Tables[0]中的结构

    一定要包含Report1.rdlc所呈现的字段,所以,这里的Sql语句为select top 5 * from orders

36.保存 运行 点击Button1 以便 报表呈现

===============================================

如果 报表所要呈现的数据 来源于存储过程

那么 在装载DataSet时 使其数据来源于存储过程即可

===============================================

37.右击项目 添加新项 ,选择 报表,向项目中加入Report2.rdlc,

   设置其呈现的数据来源为存储过程 Sales by Year

   同样的在Report2.rdlc的设计界面 加入“表”报表项

   并将网站数据源下的DataSet1下的Sales by Year表中的字段

   拉入报表项“表”在详细数据中 进行显示

38.如同Default.aspx 向项目中添加新的页面Default2.aspx

   向Default2.aspx加入一个Button 和 ReportViewer1

   并设置ReportViewer1所要呈现的报表为Report2.rdlc

   设置ReportViewer1的Visible为false

   双击Button 进行其Click事件的编写

   设置Default2.aspx为项目的起始页

39.在Default2.aspx.cs加入引用

   using System.Data.SqlClient;

   using Microsoft.Reporting.WebForms;

40.Button1_Click的事件代码示例如下

    protected void Button1_Click(object sender, EventArgs e)

    
{

        SqlConnection myConn 
= new SqlConnection("Data Source=192.168.0.36;Initial Catalog=Northwind;User ID=sa;Password=sa");

        SqlDataAdapter myda 
= new SqlDataAdapter("Sales by Year", myConn);

        myda.SelectCommand.Parameters.AddWithValue(
"@Beginning_Date""1997-10-10");

        myda.SelectCommand.Parameters.AddWithValue(
"@Ending_Date""2000-10-10");

        myda.SelectCommand.CommandType 
= CommandType.StoredProcedure;

        DataSet myds 
= new DataSet();

        myConn.Open();

        myda.Fill(myds);

        myConn.Close();



        ReportViewer1.Visible 
= true;

        

        ReportDataSource rds 
= new ReportDataSource("DataSet1_Sales_by_Year", myds.Tables[0]);

        ReportViewer1.LocalReport.DataSources.Clear();

        ReportViewer1.LocalReport.DataSources.Add(rds);



        ReportViewer1.LocalReport.Refresh();

    }




41.保存 运行 点击按钮 报表效果查看

转载于:https://www.cnblogs.com/kingjiong/archive/2008/10/20/1315279.html

更多相关:

  •         之前做机房收费系统用的报表是Grid++Report,这次VB.NET重构中用到了VisualStudio自带的报表控件。刚開始当然对这块功能非常不熟悉,只是探究了一段时间后还是把它做出来了。        以下把在VisualStudio(我用的是VisualStudio2013,假设与您使用的版本号不同,过程中...

  • Q:设计器如何打开A:如果是安装的,那么直接到菜单下,打开润乾报表设计器就行了,如果是压缩包或者从别人那儿拷过来的,就运行 eportHomein下面的startup.bat就可以打开了。 Q:做一个报表最基本需要哪些东西A:一般来说,常见的报表上面是查询条件,下面是以表格形式列出的查询结果,所以一个润乾报表由两个文件组成。 比...

  • 大多数情况下报表的数据源SQL都是固定的,但有时也需要动态变动其中某些部分实现动态拼出,比如在报表应用中允许用户通过选择表和字段查询自己关心的报表数据,报表开发时则希望对同类报表(明细或汇总)使用同一模板。这时就需要在报表中接收相应参数拼接出动态SQL进行查询后制作动态报表。润乾集算报表提供了两种处理动态SQL的方法,使用宏和集算脚...

  • 本文是西门子开放式TCP通信的第2篇,上一篇我们讲了使用西门子1200PLC作为TCP服务器的程序编写,可以点击下方链接阅读:【公众号dotNet工控上位机:thinger_swj】基于Socket访问西门子PLC系列教程(一)在完成上述步骤后,接下来就是编写上位机软件与PLC之间进行通信。上位机UI界面设计如下图所示:从上图可以看出...

  • 我有一个大型数据集,列出了在全国不同地区销售的竞争对手产品。我希望通过使用这些新数据帧名称中的列值的迭代过程,根据区域将该数据帧分成几个其他区域,以便我可以分别处理每个数据帧-例如根据价格对每个地区的信息进行排序,以了解每个地区的市场情况。我给出了以下数据的简化版本:Competitor Region ProductA Product...

  • 作为一名IT从业者,我来回答一下这个问题。首先,对于具有Java编程基础的人来说,学习Python的初期并不会遇到太大的障碍,但是要结合自己的发展规划来制定学习规划,尤其要重视学习方向的选择。Java与Python都是比较典型的全场景编程语言,相比于Java语言来说,当前Python语言在大数据、人工智能领域的应用更为广泛一些,而且大...

  • 这段时间通过学习相关的知识,最大的变化就是看待事物更加喜欢去了解事物后面的本质,碰到问题后解决问题思路也发生了改变。举个具体的例子,我在学习数据分析,将来会考虑从事这方面的工作,需要掌握的相关专业知识这个问题暂且按下不表,那哪些具体的问题是我需要了解的呢,以下简单罗列:1、了解数据分析师这个岗位在各个地区的需求情况?2、数据分析师的薪...

  • 这一节将开始学习python的一个核心数据分析支持库---pandas,它是python数据分析实践与实战的必备高级工具。对于使用 Python 进行数据分析来说,pandas 几乎是无人不知,无人不晓的。今天,我们就来认识认识数据分析界鼎鼎大名的 pandas。目录一. pandas主要数据结构 SeriesDataFrame二...

  • 最近梳理了一下卷积神经网络设计相关的论文(这个repo现在只列出了最重要的一些论文,后面会持续补充):Neural network architecture design​github.com1. Handcrafted1.1 Efficient[1608.08021] PVANET: Deep but Lightweight Neu...

  • delphi用的fastreport比较多 所以。net中也研究一下用法,这个打印控件还是很简单的 只要手动设计一下写少许代码就可以打印了 甚至可以写成通用代码 以后就可以不用写代码 安装demo会同时安一个设计器  打开设计器 通过设计器设计模板 新建数据源 新建数据集    查询单表全部内容,选中完成即可,现在我们要做一个带...

  • 简介: 本文翻译自《iOS7 by Tutorials》一书的第一章“Designing for iOS 7”,主要从程序员角度介绍了iOS7的新设计理念,堪称神作!本文翻译仅作学习交流之用,版权归原作者所有,有删减。非专业翻译人士粗糙之处在所难免,想体会原文精髓的朋友请到Raywenderlich商店支持正版。 —————— by...

  • 背景 做过需求之后,很少使用 UML 画概要设计,这几天尝试的用了几个工具,最总还是选择了 VisualStudio。 Edraw 详细信息很难编辑,如:签名。 Viso 添加成员太麻烦了。 VisualStudio 图形不支持着色。 备注 使用 VisualStudio 可以直接将概要设计的成果用在详细设计中。   转载于...