我有一个WPF应用程序,我想呈现SQL Server Reporting Services sql 2008报告。我知道我们必须使用主机窗口控制然后在报表查看器控件中。我想使用远程处理模式。 我的代码示例是: 我添加了名称空间:
使用System.Windows.Forms;
使用System.Windows.Forms.Integration;
使用Microsoft.Reporting;
使用Microsoft.ReportingServices;
使用Microsoft.Reporting.WinForms;
我的XAML:
xmlns:wfi="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"
xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
xmlns:wfr="clr-namespace:Microsoft.Reporting.WinForms;assembly=Microsoft.ReportViewer.WinForms"
Title="ReportHost" Height="300" Width="300">
<Grid>
<wfi:WindowsFormsHost Height="100" Margin="39,27,39,0" Name="winFormsHost" VerticalAlignment="Top" >
<wfr:ReportViewer x:Name="rptViewer" ProcessingMode="Remote" />
</wfi:WindowsFormsHost>
</Grid>
代码:
rptViewer.ServerReport.ReportServerUrl =
new Uri("http://mymachine-:8080/ReportServer_myreports");
rptViewer.ServerReport.ReportPath="/Reports/mytestreport.rdl";
rptViewer.ServerReport.Refresh();
我的问题是如何在微软报表查看器控件中设置选择公式[如水晶报表]。或者miscroft提供的任何其他行为与水晶报告中的选择公式相似。
当我运行代码时,它只显示主机窗口控件中的报表查看器,而不显示窗口中的报表数据。
请有人向我提供所有步骤清单,我必须通过示例代码获取所需的结果。
快速反应将被评估。
答案 0 :(得分:0)
要获取报告的路径,请不要使用.rdl扩展名:
rptViewer.ServerReport.ReportPath="/Reports/mytestreport";
抱歉,我不熟悉Crystal Reports的选择公式。
答案 1 :(得分:0)
在远程模式下使用ReportViewer在几个方面很痛苦,其中之一就是你必须将所有内容编码为参数 - 你不能只设置选择公式并完成它。
我建议您切换到使用LocalReport。您所要做的就是从服务器检索RDL,执行查询并设置DataSources属性。主要优点是您根本不需要服务器而且您不必担心服务器配置更改会破坏您的应用程序,但您也可以获得更好的性能(通常)和更大的灵活性。
如果您使用的是LocalReport,可以使用ReportEmbeddedResource将报表嵌入到.exe或.dll中,也可以将它们作为文件放在.exe或.dll旁边并使用ReportPath,或者您可以将它们放在服务器上并将它们下载到临时目录中以供使用。
使用LocalReport时,任意选择都是微不足道的:只需添加一些LINQ即可。换句话说,替换它:
viewer.LocalReport.DataSources.Add(
new ReportDataSource("Sales", GetSalesData()));
用这个:
viewer.LocalReport.DataSources.Add(
new ReportDataSource("Sales", GetSalesData().Where(d => d.Amount > 10)));
我能想到你可能需要在服务器上运行报告以及处理痛苦和低效率的唯一原因是:1。如果客户端由于安全锁定而无法以任何其他方式获取数据,和2.如果检索到一个庞大的数据集并将其处理为一小组,并且客户端很小或很远。在这两种情况下,您唯一的选择是手动将参数添加到RDL,然后使用这些参数来过滤数据。
答案 2 :(得分:0)
感谢Ray Burns,
根据我们的讨论,我得出结论:
1)如果我使用远程处理模式,那么我必须传递我必须过滤记录的所有参数。
2)如果我使用本地处理模式,那么在C#代码中我必须设置报告的数据源。
但是
当我使用微软报告服务sql 2008时。我在SQL Server Business Intellegence Studio中设计了报告,他们已经编写了查询/或调用存储过程,并设置了数据源。那么它意味着repoorts应该只包含设计,所有与数据库相关的东西都将用C#代码处理? 并且所有客户端机器都在本地报告,这是好方法吗?