Any*_*vas 5 .net c# crystal-reports winforms
我正在尝试显示一些报告,其中包含一些子报告,但每次显示报告时都会抛出一些要求数据库连接的对话框.我正在使用此代码:
private void frmReporte_Load(object sender, System.EventArgs e)
{
Clave = ConfigurationSettings.AppSettings["Password"].ToString();
NombreBD = ConfigurationSettings.AppSettings["CatalogBD"].ToString();
NombreServidor = ConfigurationSettings.AppSettings["Servidor"].ToString(); ;
UsuarioBD = ConfigurationSettings.AppSettings["UserID"].ToString();
this.crtReportes.ReportSource = this.prepareReport();
}
public void imprimirReporte()
{
ReportDocument rpt = new ReportDocument();
rpt.Load(mvarRutaReporte);
rpt.SetDataSource(clsReportes.dsReporte);
rpt.PrintToPrinter(1, false, 1, 1);
}
private ReportDocument prepareReport()
{
Sections crSections;
ReportDocument crReportDocument, crSubreportDocument;
SubreportObject crSubreportObject;
ReportObjects crReportObjects;
ConnectionInfo crConnectionInfo;
Database crDatabase;
Tables crTables;
TableLogOnInfo crTableLogOnInfo;
crReportDocument = new ReportDocument();
crReportDocument.Load(RutaReporte);
crReportDocument.SetDataSource(clsReportes.dsReporte.Tables[0]);
crDatabase = crReportDocument.Database;
crTables = crDatabase.Tables;
crConnectionInfo = new ConnectionInfo();
crConnectionInfo.ServerName = NombreServidor ;
crConnectionInfo.DatabaseName = NombreBD;
crConnectionInfo.UserID = UsuarioBD;
crConnectionInfo.Password = Clave;
foreach (CrystalDecisions.CrystalReports.Engine.Table aTable in crTables)
{
crTableLogOnInfo = aTable.LogOnInfo;
crTableLogOnInfo.ConnectionInfo = crConnectionInfo;
aTable.ApplyLogOnInfo(crTableLogOnInfo);
}
// Para los reportes que poseen subreportes
// pongo el objeto seccion del la seccion actual del reporte
crSections = crReportDocument.ReportDefinition.Sections;
// busco en todas las secciones el objeto reporte
foreach (Section crSection in crSections)
{
crReportObjects = crSection.ReportObjects;
//busco en todos los reportes por subreportes
foreach (ReportObject crReportObject in crReportObjects)
{
if (crReportObject.Kind == ReportObjectKind.SubreportObject)
{
crSubreportObject = (SubreportObject)crReportObject;
//abro el subreporte y me logeo con los datos del reporte general
crSubreportDocument = crSubreportObject.OpenSubreport(crSubreportObject.SubreportName);
crDatabase = crSubreportDocument.Database;
crTables = crDatabase.Tables;
foreach (CrystalDecisions.CrystalReports.Engine.Table aTable in crTables)
{
crTableLogOnInfo = aTable.LogOnInfo;
crTableLogOnInfo.ConnectionInfo = crConnectionInfo;
aTable.ApplyLogOnInfo(crTableLogOnInfo);
}
}
}
}
return crReportDocument;
}
Run Code Online (Sandbox Code Playgroud)
在 crystal 中,您可以指定是否在 Crystal 管理控制台 (CMC) @ 每个报告级别生成报告时提示数据库登录。登录 CMC,打开您的报告 > 流程 > 数据库。在页面底部,您可以指定“提示用户进行数据库登录”、“使用 SSO 上下文进行数据库登录”或“使用与运行报表时相同的数据库登录”。选择第三个选项以使用服务器中存储的凭据。
| 归档时间: |
|
| 查看次数: |
15920 次 |
| 最近记录: |