У меня есть это:
<Window>
<ContentPresenter Content="{Binding Viewer}" />
</Window>
internal class MainViewModel : ObservableObject{
private WindowsFormsHost _viewer;
public WindowsFormsHost Viewer
{
get { return _viewer; }
set { Set(() => Viewer, ref _viewer, value); }
}
public MainViewModel()
{
_viewer = new WindowsFormsHost();
var reportViewer = new ReportViewer();
reportViewer.ProcessingMode = ProcessingMode.Remote;
reportViewer.ServerReport.ReportServerUrl = new Uri("http://someservername/Reports/Pages/Folder.aspx");
reportViewer.ServerReport.ReportPath = "ItemPath=/somefolder1/somefolder2/ReportX";
Viewer.Child = reportViewer;
}
}
Я вижу панель инструментов отключенных служб отчетов в верхней части окна, но нет отчета. Я играл вокруг назначения различных строк ReportPath и ReportServerUrl, но ничего. Это проблема с URL? Конечно, URL-адрес работает, если я помещаю его в браузер. Благодарю.
Я знаю, что это действительно старый вопрос, но больше ищет будущих людей, которые находят ту же ошибку, и я просто нахожу и решаю ту же ошибку...
Вам нужно ввести вызов функции RefreshReport класса reportViewer. Как это:
public MainViewModel()
{
_viewer = new WindowsFormsHost();
var reportViewer = new ReportViewer();
reportViewer.ProcessingMode = ProcessingMode.Remote;
reportViewer.ServerReport.ReportServerUrl = new Uri("http://someservername/Reports/Pages/Folder.aspx");
reportViewer.ServerReport.ReportPath = "ItemPath=/somefolder1/somefolder2/ReportX";
reportviewer.RefreshReport();
Viewer.Child = reportViewer;
}
Я столкнулся с той же проблемой. Я не уверен, что эта работа для вас, но в моем случае. Строка в вашем коде Var reportViewer = new ReportViewer
должен быть перемещен в xaml например
<WindowsFormsHost DockPanel.Dock="Top" Background="White">
<rv:ReportViewer
x:Name="_ReportViewer"
ReportRefresh="CreateStatement"
BackColor="White"
BorderStyle="None"
></rv:ReportViewer>
</WindowsFormsHost>
теперь, почему это так ведет себя, я действительно не знаю.