zoukankan      html  css  js  c++  java
  • RDLC 报表参数、常量及常用表达式的使用方法

    一. ASP.NET 程序为RDLC报表提供参数

    在我们的报表中,往往需要从ASP.NET程序提供一些参数显示在报表的指定位置,第一篇中我们已经讲过怎样传递一个数据集,但是我们只需要一个值,总 不能把这个值放到DataSet中来传输吧(因为DataSet本其实是由XML结成,在传递过程中需要比data本身更多的资源),所以这个时候我们就 需要知道如何传递一个参数到RDLC报表。下面我们就来讲一讲。

    不知道大家还记不记得我在第一篇中的Default.aspx.cs中写的一个Button事件,如下。

    protected void ButtonReportGenerate_Click(object sender, EventArgs e)

    {

    List<ReportDataSource> reportDataSource = new List<ReportDataSource>();

    RportDataSet ds = new RportDataSet();

    string templatePath = string.Empty;

    string totalRecords = string.Empty;

    SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["LoggingConnectionString"].ConnectionString);

    SqlCommand command = conn.CreateCommand();

    command.CommandType = CommandType.Text;

    command.CommandText = "SELECT * FROM T_BC_LOGS";

    SqlDataAdapter da = new SqlDataAdapter(command);

    da.Fill(ds.T_BC_LOGS);

    reportDataSource.Add(new ReportDataSource("RportDataSet_T_BC_LOGS", ds.T_BC_LOGS));

    //TemplateFiles

    templatePath = "ReportTemplate/LogReport.rdlc";

    List<ReportParameter> parameterList = new List<ReportParameter>();

    ////Generate Report

    GetReportMultipleDataSourceFile(reportDataSource, templatePath, parameterList, "pdf");

    }

    其中我定义了一个泛型变量,如下:

    List<ReportParameter> parameterList = new List<ReportParameter>();

    但是我并没有给这个变量赋任何值,我要告诉大家的就是这里变量就是为我们传递参数提供的。好,下面我们就来讲一下怎么传递这个参数。

    1. 首先我们打开ReportTemplate文件夹中的RDLC报表模板,点击报表的编辑区,然后打开Report菜单下的Report Parameters…,在Report Parameters窗口中,我们点击Add 按钮,接着我们输入这个参数的名称与类型(这个名称你要记住,因为下面的编程中要用到),如果这个参数提供的时候不一定每次都有值,那么我们则要选中 All null value的复选框,如下图所示,如果你有多个参数则以此方法添加即可。

    2. 我们从Visual Studio IDE左边的ToolBox中拖一个TextBox到这个报表模板的页首(在我的报表中,复杂的表头大部分都是通过TextBox来实现的,可以设计 TextBox的边框及字体等属性来设计,所以后面的内容中我不会再提如何设计复杂的报表页首),右击这个TextBox,选择Expression…, 在Expression窗口中,我们选择Category中的Parameters,然后双击最右边你刚刚加的那个参数,点击确定即可。至此,对报表的设 计完成了。

    3. 修改Default.aspx页面中的程序如下所示:

    protected void ButtonReportGenerate_Click(object sender, EventArgs e)

    {

    List<ReportDataSource> reportDataSource = new List<ReportDataSource>();

    RportDataSet ds = new RportDataSet();

    string templatePath = string.Empty;

    string totalRecords = string.Empty;

    SqlConnection conn =

    new SqlConnection(ConfigurationManager.ConnectionStrings["LoggingConnectionString"].ConnectionString);

    SqlCommand command = conn.CreateCommand();

    command.CommandType = CommandType.Text;

    command.CommandText = "SELECT * FROM T_BC_LOGS";

    SqlDataAdapter da = new SqlDataAdapter(command);

    da.Fill(ds.T_BC_LOGS);

    reportDataSource.Add(new ReportDataSource("RportDataSet_T_BC_LOGS", ds.T_BC_LOGS));

    //TemplateFiles

    templatePath = "ReportTemplate/LogReport.rdlc";

    List<ReportParameter> parameterList = new List<ReportParameter>();

    //为参数Parameter1传递This is a parameter

    parameterList.Add(new ReportParameter("Parameter1", "This is a parameter"));

    ////Generate Report

    GetReportMultipleDataSourceFile(reportDataSource, templatePath, parameterList, "pdf");

    }

    二.使用RDLC提供的变量及常用常量

    在RDLC报表中,有些你想得到的功能是用ASP.NET代码完成不了的,比如说这个报表总共有多少页,当前在第几页等等,这些功能我们就要借助RDLC表达式中自带的一些常量了,下面就让我们来谈谈这此常量。

    1. 显示总共页数及当前页

    a) 从Visual Studio IDE左边的ToolBox中拖两个TextBox到报表的页首。

    b) 右击第一个TextBox,选择Expression…,在Expression窗口的Category中选择Globals,然后在Item中双击选择TotalPages,这个变量就是总共多少页,为了方便我们查看,我们把在上面显示的表达式进行修改如下:

    ="Total of "+Globals!TotalPages.ToString()

    c) 按上面的加入总页的方式,右击第二个TextBox选择Expression…,然后在选择Globals,接着选择PageNumber,这就是当前的页数,同样为了方便查看,修改如下:

    =" Total of "+Globals!PageNumber.ToString()

    注意:

    刚才我们选择总页数和当前页数的时候,是不是发现除了这两个还有好几个常量,现在解释如下:

    ExecutionTime

    生成报表的时间

    PageNumber

    当前的页号

    ReportFolder

    包含报表的文件路径

    ReportName

    报表的名称

    ReportServerUrl

    执行报表Server的路径(这里没有用Server,所以没有,如果用ReportService那就就存在了)

    TotalPages

    总行数

    UserID

    当前执行报表的人

    Language

    执行报表Server的系统语言

    2. 为RDLC报表中数据行增加自动编号

    a) 为了完成这个功能,我们完成这个功能,现在我们为报表中已经存在的Talbe在最左边加一个字段叫S/N(这篇中没有讲表从哪里来,请参阅[原创] RDLC 报表系列(一) 创建一个报表)。

    b) 还记得我当时给这个表绑定了一个数据集吗?选点右击表,选择Properties,从里面拷出那个数据集的名称。

    c) 右击S/N的数据字段,选择Expression,在Expression的Category中选择Common FunctionsàMiscellaneous,然后双击右边Item中的RowNumber,在其参数中输入数据集的名称,如下所示:

    =RowNumber("RportDataSet_T_BC_LOGS")

    三.常用表达式的使用

    1. 连接字符

    =Fields!FirstName.Value + Fields!LastName.Value 连接两个字段在一个单元格中,并一行显示

    =Fields!FirstName.Value & vbCrLf & Fields!LastName.Value 连接两个字段在一个单元格中显示,但是换行显示

    2. If表达式使用

    =IIF(Fields!LineTotal.Value > 100, True, False) 如果成立执行True的表达式,否则执行False表达式,我可也可以写其它的表达式代替代码里的东西

    3. Count表达式使用

    =Count(Fields!DAILYCOUNT.Value,"WeldingReportDataSet_T_WelderDaily") 计算WeldingReportDataSet_T_WelderDaily数据集中DAILYCOUNT有多少行

    3. Sum表达式使用

    =Sum(Fields!DAILYCOUNT.Value,"WeldingReportDataSet_T_WelderDaily") 计算WeldingReportDataSet_T_WelderDaily数据集中DAILYCOUNT的总和

    4. Format表达式使用

    =CDate(Fields!TOPAINTDATE.Value).ToString("dd MMM yyyy") 对date的格式进行应用

    六.总结

    通过上面的内容,我们学习到如下内容:

    1. 从ASP.NET传递参数到RDLC报表中

    2. 掌握如何使用RDLC提供的常量;

    3. 掌握如何使用常用的表达式

    版权说明:作者:张颖希PocketZ's Blog
    出处:http://www.cnblogs.com/PocketZ
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    若本文为翻译内容,目的为练习英文水平,如有雷同,纯属意外!有不妥之处,欢迎拍砖

  • 相关阅读:
    Linux 共享库
    使用Visual Studio(VS)开发Qt程序代码提示功能的实现(转)
    ZOJ 3469 Food Delivery(区间DP)
    POJ 2955 Brackets (区间DP)
    HDU 3555 Bomb(数位DP)
    HDU 2089 不要62(数位DP)
    UESTC 1307 windy数(数位DP)
    HDU 4352 XHXJ's LIS(数位DP)
    POJ 3252 Round Numbers(数位DP)
    HDU 2476 String painter (区间DP)
  • 原文地址:https://www.cnblogs.com/PocketZ/p/2121301.html
Copyright © 2011-2022 走看看