В настоящее время я работаю над проектом C # для колледжа, где мне необходимо применить N-уровневую архитектуру с 5 уровнями:
- Доступ к данным
- Уровень SQL
- Бизнес-уровень
- Внешний интерфейс рабочего стола
- Веб-интерфейс
Одним из требований проекта является отображение отчетов.
Я выбралиспользовать отчеты ReportViewer и RDLC для достижения этой цели.Мой выбор работал нормально, пока я не достиг финальной итерации проекта.
До этой итерации мне нужно было только генерировать отчеты из приложения Desktop, а отчет RDLC находился внутри моего проекта приложения Desktop.Теперь мне нужно сгенерировать отчет по ASP.Net WebForm.
Поскольку доступ к отчету должен осуществляться двумя разными проектами, я подумал, что все, что мне нужно было сделать, это переместить отчет RDLC на уровень, на мой бизнес-уровень (вероятно, в любом случае, должен был быть там, к сожалению).Конечно, я столкнулся с проблемами.Это никогда не было так просто, не правда ли?
После некоторого поиска я обнаружил 2 конкретных полезных сообщения:
- Reportviewer и отчет находятся в разных проектах в одном решении.Как мне прикрепить отчет к зрителю
- https://forum.inductiveautomation.com/t/displaying-a-report-over-multiple-projects/12825
В первом посте все, что мне нужно будет сделать, это установить Copy to Output Directory
моегоДля файла RDLC Copy always
, а затем для ReportViewer.LocalReport.ReportPath
укажите имя файла rdlc с расширением ("example.rdlc"
).
К сожалению, этот ответ никогда не работал ни для меня, ни для ОП.Почему это не сработало, было объяснено во втором посте:
Средство просмотра отчетов не может просматривать отчет из другого проекта, хотя это может сделать хороший запрос функции.- adam.morales
Затем я попробовал что-то немного другое.Вместо того, чтобы обращаться к отчету с помощью ReportPath
из другого проекта, почему бы мне не создать на своем бизнес-уровне свойство, которое будет возвращать LocalReport
, у которого уже есть определение отчета?К сожалению, ReportViewer.LocalReport
только для чтения.Даже если бы это было доступно для записи, я не удивился бы, если бы это не решило проблему;потому что ReportPath
является строкой, и проблема, вероятно, возникает, когда LocalReport
пытается выполнить рендеринг.
Это создает для меня очень большую проблему.Недостаточно времени, чтобы полностью переделать отчеты, и я не хочу прибегать к использованию 2 разных файлов RDLC, по одному для каждого внешнего проекта;потому что это плохой дизайн.
Чтобы быть полностью понятным в моих потребностях:
- Мне нужно иметь доступ к отчету RDLC из 2 разных проектов
- Iдолжен следовать N-уровневой архитектуре и поддерживать повторное использование кода
Итак, вот почему я спрашиваю, какой обходной путь я мог бы попытаться решить эту проблему?