Love in coding...

    Free and Susan

统计

积分与排名

techLINKS

我参与的团队

友情链接

最新评论

VS2005中ReportViewer 本地模式下报表呈现 入门示例

本示例操作 主要实现
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.保存 运行 点击按钮 报表效果查看

posted on 2006-11-27 08:39 freeliver54 阅读(4940) 评论(14)  编辑 收藏 所属分类: Report

评论

#1楼  2006-12-06 00:10 a[匿名] [未注册用户]

如果是winform
ReportDataSource rds = new ReportDataSource("DataSet1_Orders", myds.Tables[0]);
ReportViewer1.LocalReport.DataSources.Clear();
ReportViewer1.LocalReport.DataSources.Add(rds);
ReportViewer1.LocalReport.Refresh();
这里怎么改啊   回复  引用    

#2楼  2006-12-06 00:10 a[匿名] [未注册用户]

比较急...在线等 谢谢了 呵呵   回复  引用    

#3楼 [楼主] 2006-12-06 08:50 freeliver54      

ReportDataSource rds = new ReportDataSource("NorthwindDataSet_Orders", myds.Tables[0]);
reportViewer1.LocalReport.DataSources.Clear();
reportViewer1.LocalReport.DataSources.Add(rds);

//reportViewer1.LocalReport.Refresh();
reportViewer1.RefreshReport();

其中NorthwindDataSet_Orders 是在
点击reportViewer1控件时 的 右上角的小三角 所展开的
ReportViewer 任务处 点击 选择数据源
在弹出的对话框中的 数据源名称   回复  引用  查看    

#4楼  2007-01-02 11:43 kiusell [未注册用户]

兄弟,呵呵,你的文章给了我很大的启发,头痛了几天的东西终于弄出来了,谢谢   回复  引用    

#5楼  2007-04-02 10:07 hurry [未注册用户]

因为我的rdlc列是不固定的.

我用上面办法绑定数据到rdlc表的每一列然后显示没有问题.


现在的问题是如果我想一个datatable全表绑定到rdlc的table上.应该怎么实现呢? 麻烦给个思路或者探讨下啊.   回复  引用    

#6楼 [楼主] 2007-04-02 13:27 freeliver54      

@hurry
不知可不可以用如下方法:
用存储过程 做为报表的数据来源
而存储过程所返回的可以是Table
当然 这个Table的数据组成 也就是DataTable的数据来源   回复  引用  查看    

#7楼  2007-06-18 17:57 guangwen [未注册用户]

太感谢老大的无私奉贤精神了.   回复  引用    

#8楼  2007-07-09 14:58 Cool [未注册用户]

你好,请问 在sql reporting services 2000 中要创建 动态参数(多个)化报表,如何创建?   回复  引用    

#9楼  2007-07-09 17:46 freeliver54      

@Cool
你说的动态参数
是指报表的数据源的取得 可能会依据多个不同的参数?
还是说报表参数可能会有多个?
如果是第一种 那就是组装sql语句时 where条件处的串了
如果是第二种 则需要报表参数可以为空
  回复  引用  查看    

#10楼  2008-05-23 16:21 钝悟 [未注册用户]

楼主讲得太好了,帮了我大忙,感激得五体投地   回复  引用    

#11楼  2008-07-21 14:57 hbf      

谢谢,学到很多   回复  引用  查看    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  博客园首页

  新闻频道

  社区

  小组

  博问

  网摘

  闪存

  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-11-27 11:59 编辑过
成果网帮您增加网站收入


相关链接: