Во-первых, я бы избежал контроля средства просмотра отчетов Microsoft. Просто используйте элемент управления браузера и перейдите к отчету, передав параметры в URL-адресе, как при использовании браузера.
Это намного лучше по многим причинам.
- В MS Report Viewer Control есть много ошибок, с которыми вы будете зависать.
- Браузер и средство просмотра отчетов отображают отчеты по-разному (слегка), например, с полями и т. Д. Поэтому вам придется настраивать большинство отчетов, если вы когда-нибудь переключитесь на веб-приложение и вам понадобится использовать браузер для доступа к отчетам. Это подводит меня к следующему вопросу. , .
- Если вам когда-либо понадобится перейти в веб-приложение, вам нужно будет переопределить способ вызова отчетов, передачи параметров и т. Д., А не просто использовать функциональность браузера, которую вы уже создали (вы по-разному получаете доступ к отчетам с помощью элемента управления и . используя браузер)
В противном случае, если вы действительно хотите использовать элемент управления Report Viewer, вот пример (с использованием .NET 2.0):
ReportViewer rvReportViewerControl = new ReportViewer();
rvReportViewerControl.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Remote;
rvReportViewerControl.ServerReport.ReportServerUrl = new Uri("http://<SERVERNAME>/ReportServer");
rvReportViewerControl.ServerReport.ReportPath = "<FOLDER PATH TO REPORTS>");
rvReportViewerControl.ShowParameterPrompts = false;
Microsoft.Reporting.WinForms.ReportParameterInfoCollection rpInfoCollection = rvReportViewerControl.ServerReport.GetParameters();
if (rpInfoCollection.Count > 0)
{
List<ReportParameter> paramList = new List<ReportParameter>();
foreach (ReportParameterInfo reportParameter in rpInfoCollection)
{
string parameterName = reportParameter.Name.ToString();
string parameterValue = "";
bool isParameterVisible = reportParameter.Visible;
paramList.Add(new ReportParameter(parameterName, parameterValue, isParameterVisible));
}
rvReportViewerControl.ServerReport.SetParameters(paramList);
}
rvReportViewerControl.RefreshReport();
На этом сайте много полезной информации.