第一篇
1.每页显示多少行由Report的InteractiveSize-Height属性决定,规则是 height=行数*0.63492 每行的高度
2.如何显示表头,选择用xml格式打开report文件,在
<TablixRowHierarchy>
<TablixMembers>
<TablixMember>
<KeepWithGroup>After</KeepWithGroup>
<RepeatOnNewPage>true</RepeatOnNewPage> //加上这句话就可以了。属性里找不到,只可以在这里加
</TablixMember>
<TablixMember>
<Group Name="Details" />
</TablixMember>
</TablixMembers>
</TablixRowHierarchy>
3.PageCountModel属性
在页面添加了ReportView控件后有一个PagecountModel属性,这个属性的有两个值,Actual和Estimate。
Actual是现实真实的具体页数
Estimate是也是预估的页面,后面有一个问号
4.如果通过页面里加载了这么
<LocalReport ReportPath="Rdlc\CopyRecordRdlc.rdlc">
</LocalReport>
也就是在页面里reportViewer控件的右上角点三角加载的RDLC文件,这样在winform是没有问题的,但是在Web里会出现没有数据源的问题,正确办法是在查询按钮里加载 rvCopyRecord.LocalReport.ReportPath = @"Rdlc\CopyRecordRdlc.rdlc";
这样就不会有那个提示了
5.报表里增加参数,
在报表里增加总费用,在报表工具箱里参数文件夹下右键,新建参数AllCost,把这个参数拖到报表里,在页面传值,
double allCost =0;
ReportDataSource reportDataSource = GetData(out allCost);
ReportParameter r = new ReportParameter("AllCost", allCost.ToString());
rvCopyRecord.LocalReport.SetParameters(r);
这样就可以把总费用传入报表了
6.统计功能
必须在int或者decimal字段上菜可以加,其他的字段是first
选中报表的最后一行,选择增加Group Blow 在最下面增加一行,在GroupBy里输入一个无意义的参数,这样会只显示一行,如果选择有意义的字段会出现很多行(不知道为什么)。在右键最后一行的最后一列,选择Fx,进入表达式页面,选在Database,这里列出了所有可以统计的字段,int或者decimal是Sum其他的是FIrst,在Sum字段上双击,这样在上面的输入框里自动生成一个表达式,这样统计功能就生成了。
7.饼状图百分比,
饼状图里显示的时候显示百分比,默认的是显示的小数如0.2(vs2010),但是希望显示百分比,在series label propertys里有一个Number属性,在里面可以设置百分比属性,但是不知道是微软的bug还是我自己没有研究透,反正设置上了百分比不成功,每次打开又变成默认值,也就是小数,
提供2种方法显示百分比,
1),在饼状图上选择百分比数字,选择series label propertys,在label Data 里选择fx,在里面添加如下内容= FormatPercent(CountRows()/CountRows("PieChart"),2)(pieChart是你饼状图的名字,默认为Chart1).这样就会显示百分比了。
2),在series label propertys里选择number属性不生效,每次打开都变成default,但是柱状图里可以设置,通过比较xml文件发现了区别,用xml格式打开饼状图的xml文件,在ChartDataPoint节点下有一个ChartDataLabel节点,在里面加上如下代码
<Style >
<Format>0.00%</Format>
</Style>
这样就可以显示为百分比了。
8.如何在饼状图里显示链接
如果想在各个比例上单击打开网页,然后传一个参数过去
在饼状图上选择标签然后选择series label propertys,在URL里面选择action,选择url,点fx,写入,="http://www.baidu.com?Id="+Fields!Paremare.Value.
注意在使用URL的时候必须在引用这个rdlc文件的地方加上如下的代码
rvCopyRecord.LocalReport.EnableHyperlinks = true;
否则编译的时候不报错,但是运行的时候报错
9.如何让饼状图百分比在饼的外面并显示连线
选择饼状图上的dataLable,然后选择右面的属性,在里面选择CustomerAttirbutes,设置pielabelstyle=outside,pielablecolor="color"这样就可以了
10.使用subreport控件的问题,在父报表里放一个subreport控件,将reportName属性设置为需要显示的子报表的名字。
1)Data retrieval failed for the subreport, 'Subreport1', located at: D:\Work\报表开发\ReportService\ReportService.Web\Rdlc\ProductDetail.rdlc. Please check the log files for more information.
这个问题是因为没有给子报表提供数据源,
在显示报表的事件里添加 reportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(LocalReport_SubreportProcessing);
void LocalReport_SubreportProcessing(object sender, SubreportProcessingEventArgs e)
{
DataSet dataSet = null;
try
{
// Load data from XML file
ReportDataSource reportDataSource = GetData();
// Supply a DataTable corresponding to each report dataset. The dataset name must match the name defined in the main report stream
// (in the Name attribute of the <DataSets>\<DataSet> element.
e.DataSources.Add(reportDataSource);
}
finally
{
if (dataSet != null)
dataSet.Dispose();
}
}
问题1:
如何设置才能对表里的组进行强制分页, 比如一共100条记录,每页只显示10行,而且所有页都需要将表头打印出来(即表头重复打印)
答1:
1. 工具箱中拖一个列表过来,设置 列表-->行组-->组属性常规-->组表达式=Int((RowNumber(Nothing)-1)/10) 分页符-->勾选在组的结尾
2. 工具箱中拖一个表,放在列表中,然后可以对表进行随意设计,表中分组就会自动按照10条一页进行分页,标题也会在新页中被重复打印了
问题2:
我在表中有一个字段[数量]是需要合计的,我用SUM(数量),合计出来的是所有记录数(100条记录)的数量总合,我想只合计当前页记录数的数量小计,我该如何设置?
答2:
公式:=Sum(Fields!数量.Value) 这样的格式在分组中,就是求组小计, 在不是分组的情况下,就是合计。
而自动生成的语句是用的:=Sum(Fields!数量.Value, "DataSet_Name") 这条是自动生成的无论有没有分组的情况下,都是所有记录的合计
问题3:
我分页后,每页分页后面都跟有一个空白页,这个如何去掉?
答3:
这个主要是报表设计时宽度过大引起的,你可以在报表设计区域右键-->报表属性 查看纸张设置的大小及边距设置(A4 宽:21cm 高:29.7cm),然后调整表体及表单不要超过该大小即可,多调整几次,应该就没啥问题了
问题4:
关于打印分页数据最后多出一页空白页的问题
答4:
只要把报表主体的高度和所要打印的列表或表单高度一样(使两者的底部重合即可),这样打印出来就不会出现空白页了