首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 企业软件 > 行业软件 >

RDLC 报表参数、恒量及常用表达式的使用方法

2012-11-10 
RDLC 报表参数、常量及常用表达式的使用方法二.使用RDLC提供的变量及常用常量  在RDLC报表中,有些你想得到

RDLC 报表参数、常量及常用表达式的使用方法

二.使用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.?掌握如何使用常用的表达式

一.?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");

}

?

热点排行