我希望Crystal Report连接到我的应用程序,但当我使用 EF Code First 方法和存储库模式时,我遇到的问题就出现了。我不明白如何将我的 Crystal Report Connection 与我的DBContext连接,在Crystal Report Connection Viewer中我无法看到我的DbContext。我看到的大多数帮助都指向我创建数据集,即 .XSD文件,但所有DataSet都已经可用于DbContext。这是否可能,如果是,那么任何1指导我以下是我的错误
Invalid index. (Exception from HRESULT: 0x8002000B (DISP_E_BADINDEX))
string reportPath = Path.Combine(reportFolder, rpt);
ReportDocument.Load(reportPath);
ReportDocument.Database.Tables[0].SetDataSource(companies); //Line 29 this where i am getting error
Line 30: // ReportDocument.SetDataSource(companies);
await Task.Delay(10);
现在错误显而易见我没有创建连接,因为我正在使用 DBcontext ,我认为这是从所有连接相关细节的地方。据我所知,我的DbContext应该可用整个申请。如果我不去 Dbcontext ,我必须重新创建连接,这有点否定整个分层概念。
这就是我在我的回购中使用水晶报告的方式,
namespace RPS.Reporting
{
public sealed class ReportGenerator
{
private ReportDocument ReportDocument { get; set; }
public ReportGenerator()
{
ReportDocument = new ReportDocument();
}
public async Task<Stream> GetCompaniesReport(IEnumerable<Company> companies)
{
string rpt = "VoucherSummary.rpt";
// string reportFolder = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
string reportFolder = AppDomain.CurrentDomain.BaseDirectory.Replace("WebApp", "Reporting")+ "Accounting";
string reportPath = Path.Combine(reportFolder, rpt);
ReportDocument.Load(reportPath);
ReportDocument.Database.Tables[0].SetDataSource(companies);
// ReportDocument.SetDataSource(companies);
await Task.Delay(10);
Stream stream = ReportDocument.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
stream.Seek(0, SeekOrigin.Begin);
return stream;
}
}
}
这是我的控制者。
public class HomeController : Controller
{
private readonly ICompanyService _companyService;
public HomeController(CompanyService companyService)
{
_companyService = companyService;
}
.........
public async Task<ActionResult> ExportCompanies()
{
Response.Buffer = false;
Response.ClearContent();
Response.ClearHeaders();
ReportGenerator reportGenerator = new ReportGenerator();
// string rptPath = Path.Combine(System.Web.HttpContext.Current.Server.MapPath("~"));
Stream stream = await reportGenerator.GetCompaniesReport(_companyService.GetCompanies());
return File(stream, "application/pdf", "Companies.pdf");
}
}