zoukankan      html  css  js  c++  java
  • Reporting services 开发日志

    报表数据源使用sql语句传参数的时候,在参数前面使用“:”冒号接参数名,

    例如:想要把参数p_id传入下列语句中使用时,select * from user where userid=:p_id

    报表可以包含指向其他报表的链接。单击主报表中的链接时打开的报表称为“钻取报表”,钻取报表必须与主报表在同一报表服务器上,但可位于不同的文件夹。可以向具有“操作”属性的任何项添加钻取链接,

    1. 在“设计”视图中,右键单击要添加链接的文本框、图像或图表,然后单击“属性”

    2. 在该报表项的“属性”对话框中,单击“操作”

    3. 选择“转到报表”。其他部分将显示在此选项的对话框中。

    4. “从列表中选择报表”中,键入或选择要跳转至的报表的名称。

      ms159847.note(zh-cn,SQL.100).gif注意:
      报表名称的列表包括了当前报表服务器项目中的所有报表。如果钻取报表在报表服务器上而不在项目中,请键入报表的名称。报表名称可以包含此报表的相对路径或服务器上的报表的绝对路径。相对路径的示例为:…\DrillthroughReport\Store。绝对路径的示例为:\SalesReports\DrillthroughReport\Store

      在配置为本机模式的报表服务器上,不必使用文件扩展名 .rdl 指定钻取报表名称。

      在配置为 SharePoint 集成模式的报表服务器上,必须在表达式中指定报表名称,并包含文件扩展名 .rdl。例如,="http://site/subsite/Documents/DrillthroughReport.rdl"

      如果必须为钻取报表指定参数,请执行下一个步骤。

    5. “使用这些参数运行报表”中,单击“添加”。将向参数网格添加一个新行。

      • “名称”文本框中,键入钻取报表中的报表参数的名称。如果钻取报表位于报表服务器项目中,则可从下拉列表中选择参数名称。
        ms159847.note(zh-cn,SQL.100).gif注意:
        参数列表中的名称必须与目标报表中的期望参数完全匹配。如果名称不匹配,或者并未列出某个预期的参数,则钻取报表将出错。

      • “值”中,键入或选择要传递给钻取报表中的参数的值。
        ms159847.note(zh-cn,SQL.100).gif注意:
        值可以包含其计算结果将传递到报表参数的表达式。值列表中的表达式包括当前报表的字段列表。

    6. 若要测试该链接,请运行报表,然后单击对其设置此链接的报表项。对于文本框,更改文本的颜色和效果有助于向用户指示该文本是一个链接。例如,通过在“文本框属性”对话框中设置“字体”属性,将颜色更改为蓝色,并对文本添加下划线。

    下面文章引自:http://www.cnblogs.com/wendy-lijie/archive/2009/05/27/1490806.html

    对Table中的详细内容,以不同的颜色间隔开相邻的两行。 A:选择Table的Detail行,选择属性中的BackgroundColor,值选择表达式,输入:=iif(RowNumber(Nothing) Mod 2, "White", "Beige")。
    2、设置每面显示Table表头或表尾
    A:选择Table Header或Table Footer,将属性中的RepeatOnNewpage设为True.
    3、在每页都显示放入的图片或标题头等信息。
    A:只须在Table Header中加行数,把你要显示的内容放到单元格中,然后再按第二条方式设置后就可以了。

    1.     分页的控制方式
    1.1. Reporting Services自动分页
    在报表的页眉或者页尾添加文本框,调用全局变量=Globals!PageNumber
    1.2. 根据记录条数来分页
    当每条记录呈现的高度不一致,我们又希望让每页呈现的记录条数一致,那么我们可以通过记录条数来分页。在通过记录条数分页时,通常是
    根据记录条数来分组,然后在组的结束位置添加分页符。
    在表、矩阵或者列表中添加一个组,然后在分组表达式中输入=(RowNumber("ContainerName") - 1) \ PageSize ( PageSize 用每页所包含的
    记录条数替代,ContainerName用包含这个组的表、矩阵或者列表的名称替代)。这个表达式是用记录的行号整除分页大小,也就是记录所在的
    页码数。最后选中“在结尾处分页”,在每个组实例的结尾处放置分页符。
    1.3. 按组分页
    插入组时,在<常规>的页签中,可以选择<在起始处分页>或者<在结尾处分页>

    2.     获取参数列表的方法
    ReportingService rService = new ReportingService();//创建报表服务实例
    rService.Credentials = System.Net.CredentialCache.DefaultCredentials;//设置默认系统凭据

       string historyID = null;
       bool forRendering = true;
       ParameterValue[] values = null;  
       DataSourceCredentials[] credentials = null;
       ReportParameter[] parameters;
       parameters = rService.GetReportParameters//获取报表参数集合
        (
        "/cfhrreport/pos",
        historyID,
        forRendering,
        values,
        credentials      
        );
       ListItem item;
       foreach(ValidValue v in parameters[0].ValidValues)//遍历参数的有效值集合
       {
        item=new ListItem(v.Label ,v.Value );
        this.DropDownList1 .Items .Add (item);//填充到一个下拉框
       }

    3.     Reporting Services API
    首先添加web引用
    http://server/reportserver/reportservice.asmx
    ReportingService rService = new ReportingService();//创建报表服务实例
    rService.Credentials = System.Net.CredentialCache.DefaultCredentials;//默认系统凭据
    CatalogItem[] catalogItems;
    catalogItems = rService.ListChildren("/", true);//对根路径检索
    foreach(CatalogItem item in catalogItems)
    {
        if(item.Type ==ItemTypeEnum.Folder)
    {
    //遍历报表文件夹
    }
    }
    foreach(CatalogItem item in catalogItems)
    {
    if(item.Type ==ItemTypeEnum.Report)
    {
    //遍历报表
    }
    }
    //搜索报表
    ReportService.SearchCondition[] condition=new SearchCondition[1];
    condition[0]=new SearchCondition();
    condition[0].Name ="Name";
    condition[0].Value =this.TextBox1.Text ;
    catalogItems=rs.FindItems ("/",WebReportSample.ReportService .BooleanOperatorEnum .And ,condition);
    //发布报表
    byte[] reportData;
    System.IO .FileStream fs=System.IO .File.OpenRead ("c:\\Report1.rdl");
    reportData=new byte [fs.Length ];
    fs.Read (reportData,0,fs.Length );
    rs.CreateReport ("New Report","/",false,reportData,null);
    //删除报表
    rs.DeleteItem ("报表名称");

    4.     报表Url分析
    报表 URL 包含 Web 服务器的名称、报表服务器虚拟目录的名称以及报表的完全限定名称。(完全限定的名称包含报表路径,并以报表本身的
    名称结束。)
    http://server/virtualroot?%5B/pathinfo%5D&prefix:param=value%5B&prefix:param=value%5D...n]
        常用前缀及其参数名:
    4.1. rc:toolbar=true/false 显示/不显示工具栏
    4.2. rs:command=render 呈现报表
    4.3. rs:format=PDF(DOC,XLS)导出报表格式
    4.4. rc:parameters=true/false 显示/不显示工具栏的参数选择区域
    4.5. @Parameter=value 直接传递参数值
    注意:在URL参数中如果有中文,将不能被正确识别,解决的方法是用HttpUtility.UrlEncode将其转换为uft-8,再附加到参数中即可。此外还
    要注意参数是大小写敏感的。

    5. ASP.NET中展现报表
    ASP.NET提供了多种技术来呈现Web形式的报表,通常的解决方法是用Iframe。将我们前面所掌握的URL赋值给Iframe的src,结合Javascritp脚
    本,我们便可以将报表集成在页面中。此外,我们还可以充分利用ASP.NET强大的控件功能,如日历控件、图像按钮等功能提高系统的易用性。
    小技巧:有时报表中的图片可能会显示不出来,这可能是Cookies的设置问题,你也可以通过让客户下载reg文件,把Reporting Services服务
    器加入本地计算机的信任站点中。此外,报表中的image有embed和external两种方式,建议使用external方式,这样可以有效地缩小报表的尺
    寸。

    6.报表中使用自定义嵌入式代码
    Reporting Service 只接受Microsoft Visual Basic .NET 中编写嵌入式代码, 代码准备好,您就可以使用全局定义的 Code 成员在报表表达
    式中调用它。例如,如果您编写了一个名为 GetValue 的嵌入式代码函数,就可以使用下列语法从您的表达式中调用它:
    6.1.在报表<属性>中,选择<代码>页签,输入自定义代码
    Function GetValue(value As Object) As Object
    if Value is Nothing then
    return 0
    else
    return value
    end if
    End Function
        6.2.调用方法:
    =Code.GetValue(Code.GetValue(Fields!字段名.Value))

  • 相关阅读:
    vim7.1在windows下的编码设置[转]
    Swashbuckle(6.2.3)【Swagger(3.0)】 第一节
    Git命令集合
    ABP Framework(5.0.0rc) 第一节
    /var/lib/docker/overlay2 占用很大,清理Docker占用的磁盘空间,迁移 /var/lib/docker 目录
    WPF中解决内存泄露的几点提示与解决方法
    用C#读取docx文件
    C#启动单个实例
    WPF学习心得(1):WPF进行动画后不能改变相对应的属性问题的解决
    [转]使WPF程序应用预置的控件风格, 如Aero, Luna, Royale, Classic等
  • 原文地址:https://www.cnblogs.com/xiarifeixue/p/1634311.html
Copyright © 2011-2022 走看看