I have an application (NOT MY Coding) which have a lot of crystal reports. the problem I'm facing is that every time i open a crystal report it asks for login username and password.
after a little search i found that i have to set the connectioninfo for the report at run time and i found some solution but when i looked at the code of the application i didn't find it as i was expecting.
the frmviewrpt (the form that has the crystal report viewer) have some thing like this:
RptProBalance rptProductBalance = new RptProBalance();
rptProductBalance.RecordSelectionFormula = getBalanceRptSelection();
rptProductBalance.Refresh();
allReportViewer.ReportSource = rptProductBalance;
the RptProBalance() (the cs file that is extended from the RptProBalance.rpt file):
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.42
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace minfatora {
using System;
using System.ComponentModel;
using CrystalDecisions.Shared;
using CrystalDecisions.ReportSource;
using CrystalDecisions.CrystalReports.Engine;
public class RptProBalance : ReportClass {
public RptProBalance() {
}
public override string ResourceName {
get {
return "RptProBalance.rpt";
}
set {
// Do nothing
}
}
[Browsable(false)]
[DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)]
public CrystalDecisions.CrystalReports.Engine.Section ReportHeaderSection1 {
get {
return this.ReportDefinition.Sections[0];
}
}
[Browsable(false)]
[DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)]
public CrystalDecisions.CrystalReports.Engine.Section PageHeaderSection1 {
get {
return this.ReportDefinition.Sections[1];
}
}
[Browsable(false)]
[DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)]
public CrystalDecisions.CrystalReports.Engine.Section GroupHeaderSection1 {
get {
return this.ReportDefinition.Sections[2];
}
}
[Browsable(false)]
[DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)]
public CrystalDecisions.CrystalReports.Engine.Section DetailSection1 {
get {
return this.ReportDefinition.Sections[3];
}
}
[Browsable(false)]
[DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)]
public CrystalDecisions.CrystalReports.Engine.Section GroupFooterSection1 {
get {
return this.ReportDefinition.Sections[4];
}
}
[Browsable(false)]
[DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)]
public CrystalDecisions.CrystalReports.Engine.Section ReportFooterSection1 {
get {
return this.ReportDefinition.Sections[5];
}
}
[Browsable(false)]
[DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)]
public CrystalDecisions.CrystalReports.Engine.Section PageFooterSection1 {
get {
return this.ReportDefinition.Sections[6];
}
}
}
[System.Drawing.ToolboxBitmapAttribute(typeof(CrystalDecisions.Shared.ExportOptions), "report.bmp")]
public class CachedRptProBalance : Component, ICachedReport {
public CachedRptProBalance() {
}
[Browsable(false)]
[DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)]
public virtual bool IsCacheable {
get {
return true;
}
set {
//
}
}
[Browsable(false)]
[DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)]
public virtual bool ShareDBLogonInfo {
get {
return false;
}
set {
//
}
}
[Browsable(false)]
[DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Hidden)]
public virtual System.TimeSpan CacheTimeOut {
get {
return CachedReportConstants.DEFAULT_TIMEOUT;
}
set {
//
}
}
public virtual CrystalDecisions.CrystalReports.Engine.ReportDocument CreateReport() {
RptProBalance rpt = new RptProBalance();
rpt.Site = this.Site;
return rpt;
}
public virtual string GetCustomizedCacheKey(RequestContext request) {
String key = null;
// // The following is the code used to generate the default
// // cache key for caching report jobs in the ASP.NET Cache.
// // Feel free to modify this code to suit your needs.
// // Returning key == null causes the default cache key to
// // be generated.
//
// key = RequestContext.BuildCompleteCacheKey(
// request,
// null, // sReportFilename
// this.GetType(),
// this.ShareDBLogonInfo );
return key;
}
}
}
I have no clue where exactly I'm supposed to make the connection info and pass it to the report.
It sounds like the datasource is set up in the .rpt file. Open the .rpt file in the crystal reports designer (or VS if you have the add on) and choose "verify database". Once you have supplied this info and saved, it shouldn't do that anymore. The password was probably changed since the original setup.
If you want to supply it via code, then in your case it looks like you'd go into that datasource that is calling your .rpt file and set it there. Here is an example from my blog in VB.Net. This code will go through all sub reports and the main report and update the connection strings (this assumes, that all reports/subreports are connecting to the same database, if not, you could use pieces of this code to update individual sub reports).
It would be used something like this (although, you're binding to a viewer probably and not exporting, so you could ignore that, this is just for example).
Here is the extension method module: