当前位置: 首页 > 编程日记 > 正文

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

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

相关文章:

iOS-ARC_Xcode检测循环引用

iOS-ARC_Xcode检测循环引用 一&#xff0c;在桌面上新建立一个工程&#xff0c;在ViewController.m中输入如下代码&#xff1a; - (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.NSMutableArray *firstArr…

什么是SESSION?(三)

本微信图文通过一个利用数据库的方式存储Session的例子&#xff0c;深入介绍了对Session机制的理解。本微信图文由钟锦提供。

leetcode--回文数--python

文章目录题目题目详情示例解题代码代码运行结果体会题目 题目详情 判断一个整数是否是回文数。回文数是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向左&#xff09;读都是一样的整数。 示例 输入: 121 输出: true输入: -121 输出: false 解释: 从左向右…

DevXpress 控件: 第一篇: 将 Master_Details 关系进行到底--XtraPivotGridControl控件

一. 控件说明: XtraPivotGridControl&#xff1b;数据控件 二. 控件特点: 1. 支持行, 列字段拖动, 对调 支持行, 列字段的添加, 移除 支持数据字段的添加, 移除, 对调 2. 支持以行, 列字段排序 支持以过滤字段排序 3. 支持行, 列字段过滤 …

JNI与NDK学习第二篇-----应用篇

2019独角兽企业重金招聘Python工程师标准>>> 1.安装配置NDK 1). 解压NDK的zip包到非中文目录(最好英文目录不要带空格) 2). 配置path : 解压后NDK的根目录----->ndk-build 2.给AS关联NDK 1). local.properties中添加配置 ndk.dirE\:\\Android\\sdk\\android-…

数据结构与算法课程的代码链接

VS2005版本 http://download.csdn.net/detail/lsgo_myp/9713329 VS2015版本 http://download.csdn.net/detail/lsgo_myp/9730592

leetcode--字符串转换为整数--python

文章目录题目题目详情说明示例解题代码思路代码运行结果最佳方案题目 题目详情 请你来实现一个 atoi 函数&#xff0c;使其能将字符串转换成整数。 首先&#xff0c;该函数会根据需要丢弃无用的开头空格字符&#xff0c;直到寻找到第一个非空格的字符为止。 当我们寻找到的…

什么是自组织特征映射网络?

什么是自组织特征映射网络&#xff1f;

理解jQuery对象$.html

如果要比喻jQuery和原生javascript的关系&#xff0c;我个人认为是自动档和手动档汽车的区别。使用原生javascript&#xff0c;可以知道离合器以及档位的作用&#xff1b;而使用jQuery&#xff0c;则把离合器和手动档位封装到函数&#xff0c;直接前进、后退或驻车即可。所以&a…

精通ASP.NET中弹出窗口技术

本文讨论如何以ASP.NET中的CodeBehind方式实现各种弹出窗口&#xff0c;实现与弹出窗口的交互。并探讨常用非标准IE浏览器对弹出的窗口的各种过滤行为及使用弹出窗口相应对策&#xff0c;以期给出使用弹出窗口的一个通用较优方案。 关键词&#xff1a;ASP.NET、CodeBehind、过滤…

leetcode--删除排序数组中的重复项--python

文章目录题目题目详情示例说明解题代码思路代码运行结果最佳方案题目 题目详情 给定一个排序数组&#xff0c;你需要在原地删除重复出现的元素&#xff0c;使得每个元素只出现一次&#xff0c;返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在原地修改…

转换人民币大小金额

1 usingSystem; 2 3 namespaceTest 4 { 5 /**////<summary>6 ///Rmb 的摘要说明。 7 ///</summary>8 publicclassRmb 9 { 10 /**////<summary>11 ///转换人民币大小金额 12 ///</summary>13 ///<param name"num">金额</param>14…

偏执却管用的 10 条 Java 编程技巧

经过一段时间的编码&#xff08;咦&#xff0c;我已经经历了将近20年的编程生涯&#xff0c;快乐的日子总是过得很快&#xff09;&#xff0c;我们开始感谢那些好习惯。因为&#xff0c;你知道… “任何可能出错的事情&#xff0c;最后都会出错。” 这就是人们为什么喜欢进行“…

如何利用SOM网络进行柴油机故障诊断

如何利用SOM网络进行柴油机故障诊断

leetcode--删除排序链表中的重复元素--python

文章目录题目题目详情示例解题代码思路代码运行结果最佳方案题目 题目详情 给定一个排序链表&#xff0c;删除所有重复的元素&#xff0c;使得每个元素只出现一次。 示例 输入: 1->1->2 输出: 1->2输入: 1->1->2->3->3 输出: 1->2->3解题代码 …

如何使用 UserAccountControl 标志操纵用户帐户属性

转载&#xff1a; http://support.microsoft.com/kb/305144 概要 在打开用户帐户的属性后&#xff0c;单击帐户选项卡&#xff0c;然后选中或清除“帐户选项”对话框中的复选框&#xff0c;则会将数值分配给 UserAccountControl 属性。分配给该属性的值通知 Windows 已启用了哪…

程序员 专属的新年祝福原来是这样的! (附中奖名单)

程序员的新年祝福会是什么样的&#xff1f;我们共收到了97位 OSCer 的回复&#xff0c;以下为支持数排名前十的祝福语&#xff1a; yale8848&#xff08;支持数&#xff1a;10&#xff09; document.write("") &#xff08;小编&#xff1a;捂脸&#xff0c;不过不知…

LSGO代码小组第16周复盘日志

LSGO代码小组第16周复盘日志&#xff0c;汇报人&#xff1a;高勇

leetcode--买股票的最佳时机II--python

文章目录题目题目详情注意示例代码思路解题代码运行结果最佳方案题目 题目详情 给定一个数组&#xff0c;它的第 i 个元素是一支给定股票第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易&#xff08;多次买卖一支股票&#xff09;。…

我的广州生活~

步入11月份&#xff0c;天气逐渐转冷&#xff01;本以为广东的冬天是永远的裤头T恤&#xff0c;看来我错了。。。在凉席上抗争了一周&#xff0c;我感冒了两次&#xff0c;看来人毕竟斗不过天&#xff0c;还是乖乖的铺上褥子&#xff0c;等待南国的冬天。他们都说广州的冬天是种…

苹果手表可以运行 ruby 脚本了

不得不佩服啊&#xff01; 各位看下载地址吧https://itunes.apple.com/cn/app/ruby-2.0-for-ios-yun-xing/id727047729?mt8https://yqfile.alicdn.com/d0403806fdff7411060f9b0b059d1f9966c19447.png" >https://yqfile.alicdn.com/5dbd9a02e4252465b9896713a592e092ca…

Matlab与线性代数--广义逆矩阵

本微信图文详细介绍了Matlab中求解广义逆矩阵的方法。

leetcode--无重复字符的最长子串--python

文章目录题目题目详情示例解题代码思路代码运行结果最佳方案题目 题目详情 给定一个字符串&#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长…

TOP语句与Order By语句

默认情况下&#xff0c;如果在子查询&#xff0c;函数&#xff0c;视图中尝试去使用ORDER BY&#xff0c; CREATE VIEW dbo.VSortedOrders ASSELECT orderid, customerid FROM dbo.Orders ORDER BY orderid GO 那么可能会遇到下面的错误 消息 1033&#xff0c;级别 15&#xff…

利用“队列”解决“窗口混乱”问题

本图文利用队列这种数据结构以及多线程技术模拟了银行排队&#xff08;叫号&#xff09;软件的工作流程。

MySQL操作数据库--与MySQL零距离接触1-7

第一章 1-7操作数据库 数据库是一个集合&#xff1a;表 索引等。 MySQL语句规范&#xff1a; 关键字与函数名称全部大写 数据库名称、表名称、字段名称全部小写 SQL语句必须以分号结尾 语法结构&#xff1a; {}&#xff1a;代表必选项 …

leetcode--盛最多水的容器--python

文章目录题目题目详情说明示例解题代码思路代码运行结果最佳方案题目 题目详情 给定 n 个非负整数 a1&#xff0c;a2&#xff0c;…&#xff0c;an&#xff0c;每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线&#xff0c;垂直线 i 的两个端点分别为 (i, ai) 和 (…

创意海报生成器

今天无意中看到一个网站,用来生成一些好玩的图片. http://www.photofunia.com 转载于:https://www.cnblogs.com/victorxu/archive/2008/11/17/1334779.html

基于Go语言来理解Tensorflow

Tensorflow并非一套特定机器学习库——相反&#xff0c;其属于一套通用型计算库&#xff0c;负责利用图形表达计算过程。其核心通过C语言实现&#xff0c;同时亦绑定有多种其它语言。与Python绑定不同的是&#xff0c;Go编程语言绑定不仅允许用户在Go环境当中使用TensorFlow&am…

如何利用BP网络进行神经网络变量筛选

如何利用BP网络进行神经网络变量筛选