前言:现在碰到了水晶报表调用存储过程的问题,问题是这样的: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>

中的<DataSources>的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

水晶报表调用存储过程的问题相关推荐

  1. java web水晶报表_WEB开发中水晶报表的使用心得

    [需求] 最近在项目开发过程中,客户要求用Crystal Reports生成pdf格式的报表,并实现自动打印功能. [实施索引] 1.创建水晶报表: 2.Java中利用报表组件包将报表结果生成pdf: ...

  2. java水晶报表pull模式_水晶报表Pull模式 每次调用水晶报表的时候都要输入数据库密码的解决方案...

    因为毕业设计的需要 所以研究了一下水晶报表. 前面报表设计什么的都很顺利 但到了调用水晶报表的时候 每次都要输入数据库密码.这很坑爹! 于是网上找了些资料,发现解决方法还是很多的. 不废话,直接贴代码 ...

  3. C#实现调用打印机(打印字符串、打印绘图、打印图片),还差打印水晶报表

    C#实现调用打印机(打印字符串.打印绘图.打印图片),还差打印水晶报表 目的:调用打印机的使用 缺陷:打印的对象不全(还差打印水晶报表),不能实现在插件绘图板中画什么打印什么 改进:同缺陷,希望朋友们 ...

  4. 帆软报表调用mysql存储过程_FineReport调用存储过程

    "总结一下本人在项目中遇到的问题,如何在数据库表名未知且作为一种查询条件的情况下查询出数据集,仅能通过FineReport+Oracle实现. 首先分析这个问题的条件和要求: 条件:只有一个 ...

  5. 从ASP.NET传递参数给水晶报表

    原文 http://www.cnblogs.com/insus/p/3281114.html 上次Insus.NET有简单写了一篇文章<Visual Studio 2012使用水晶报表Cryst ...

  6. 利用数据集在水晶报表中显示图像

    描述 该 C# .NET Windows 程序演示了如何创建数据集,并将图像添加到数据集,以及在运行时将数据集传递到子报表. 文件列表 - bin\Debug\Canada.jpg - bin\Deb ...

  7. Asp.net中水晶报表的使用

    在我们对VS.Net中的水晶报表(Crystal Reports)进行研究之前,我和我朋友对如何将这个复杂的东东加入我们的Web应用有着非常的好奇心.一周以后,在阅读了大量的"HOWTO&q ...

  8. .NET环境下水晶报表使用总

    水晶报表是一个优秀的报表开发工具,本人在开发通用管理系统的时候,所有报表都使用水晶报表,其简单.易用和强大的功能令笔者倍加喜爱,现将水晶报表使用手记呈现给大家. 一.在使用自带的水晶报表时,请注册,否 ...

  9. .NET环境下水晶报表使用总结

    水晶报表是一个优秀的报表开发工具,本人在开发通用管理系统的时候,所有报表都使用水晶报表,其简单.易用和强大的功能令笔者倍加喜爱,现将水晶报表使用手记呈现给大家. 一.在使用自带的水晶报表时,请注册,否 ...

最新文章

  1. Yolo:实时目标检测实战(下)
  2. B-树的插入、查找、删除
  3. zend studio php 5.5,PHP - 下载 - Zend Studio 5.5
  4. linux java 获取路径怎么写_linux中java获取路径怎么写?
  5. 7-5 日期问题面向对象设计(聚合二) (40 分)
  6. [OC]数据库的使用--数据读取
  7. shell 脚本传参
  8. 帝国cms熊掌号MIP主动推送教程
  9. VCL已死,RAD已死(插播)
  10. 笔记、代码清晰易懂!李航《统计学习方法》最新资源全套!
  11. CodeForces 2B The least round way
  12. XAMPP端口更改后 httpd-vhosts.conf 文件配置
  13. 元宇宙里过节,英伟达快速打造「冬日仙境」,占地 16 万平米!
  14. 微信公众号cookie+token获取
  15. windows在cmd中用cl、link工具编译生成dll与lib
  16. KDD 2022 | 美团技术团队精选论文解读
  17. 操作系统的主要功能(3)
  18. Ubuntu 下eclipse安装
  19. OpenGL ES 模拟器
  20. APFS 苹果文件格式的小介绍 Apple File System

热门文章

  1. 32 vs 开发wince_十年经验的大神谈如何学STM32嵌入式开发
  2. java 默认数据库创建路径_无法创建数据库路径文件:/ user / hive /仓库错误
  3. mysql ls命令,Linux 常用 ls命令详解
  4. linux 文本行倒叙,Linux基础(4)之文本处理
  5. catv系统主要有哪三部分组成_你了解买车“三大件”之一的悬挂系统吗?家用车用什么悬挂系统?...
  6. 双系统安装的流程记录
  7. 力扣(LeetCode)刷题,简单题(第3期)
  8. 【python】一个目录里面多个python程序文件,统计一下里面有多少行代码。即分别列出:代码、空行、注释的行数。
  9. 【OpenCV】将单通道的Mat对象转换为三通道的Mat
  10. java aio_java中的AIO