wpf中的报表查看器和选择公式
我有一个WPF应用程序,我想在其中演示SQL Server Reporting Services SQL 2008报表。我知道我们必须使用主机窗口控件,然后使用报表查看器控件。我想使用远程处理模式。 我的代码示例是: 我添加了名称空间: 使用System.Windows.Forms; 使用System.Windows.Forms.Integration; 使用Microsoft.Reportingwpf中的报表查看器和选择公式,wpf,reportviewer,Wpf,Reportviewer,我有一个WPF应用程序,我想在其中演示SQL Server Reporting Services SQL 2008报表。我知道我们必须使用主机窗口控件,然后使用报表查看器控件。我想使用远程处理模式。 我的代码示例是: 我添加了名称空间: 使用System.Windows.Forms; 使用System.Windows.Forms.Integration; 使用Microsoft.Reporting 使用Microsoft.ReportingServices; 使用Microsoft.Report
使用Microsoft.ReportingServices; 使用Microsoft.Reporting.WinForms 我的XAML: 我的问题是如何在microsoft report viewer控件[如crystal report]中设置选择公式。或者miscroft提供了任何其他类似crystal reports中的选择公式 当我运行代码时,它只在主机窗口控件中显示报表查看器,而不在窗口中显示报表数据 请有人给我提供所有步骤列表,我必须休整,以获得所需的结果和示例代码
将通知您快速响应。对于报告路径,请取消.rdl扩展名:
rptViewer.ServerReport.ReportPath=“/Reports/mytestreport”代码>
对不起,我不熟悉Crystal Reports的选择公式 在远程模式下使用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添加参数,然后使用这些参数过滤数据。谢谢Ray Burns
根据我们的讨论,我得出结论:
1) 如果我使用远程处理模式,那么我必须传递所有我必须过滤记录的参数
2) 如果我使用本地处理模式,那么在C代码中,我必须设置报表的数据源
但是
因为我正在使用microsoft Reporting services sql 2008。我在SQL server Business Intelligence Studio中设计了报告,并编写了查询/或调用存储过程,还设置了数据源。所以这意味着report应该只包含设计,所有与数据库相关的事情都将用C#code处理?
所有的客户端机器都有本地报告,这是好方法吗
viewer.LocalReport.DataSources.Add(
new ReportDataSource("Sales", GetSalesData()));
viewer.LocalReport.DataSources.Add(
new ReportDataSource("Sales", GetSalesData().Where(d => d.Amount > 10)));