2009-07-27 3 views
1

J'ai des Crystal Reports qui ont été créés en utilisant Crystal (externe à Visual Studio) et qui sont maintenant chargés dans le projet VS. Avant que le rapport ne soit prévisualisé, j'ai configuré les informations de la base de données du rapport comme ceci dans le rapport et dans tous les sous-rapports.Crystal Reports - "Le rapport que vous avez demandé nécessite des informations supplémentaires"

 var connectionInfo = new ConnectionInfo(); 
     connectionInfo.ServerName = "192.168.x.xxx"; 
     connectionInfo.DatabaseName = "xxxx"; 
     connectionInfo.Password = "xxxx"; 
     connectionInfo.UserID = "xxxx"; 
     connectionInfo.Type = ConnectionInfoType.SQL; 
     connectionInfo.IntegratedSecurity = false; 

     TableLogOnInfo logon = table.LogOnInfo; 
     table.LogOnInfo.ConnectionInfo = connectionInfo; 
     table.ApplyLogOnInfo(logon); 

Le rapport affiche correctement lorsqu'elle est initialement prévue, mais quand je vais à la page suivante dans l'aperçu du rapport je reçois le message « Le rapport demandé exige plus d'informations » et sont invité à entrer les informations de connexion de base de données encore. Une fois que je l'ai entré ici, je ne suis plus invité. Il semble que la configuration initiale de ConnectionInfo I ne dépasse pas la première page.

J'utilise Cristal XI et Visual Studio 2008.

Répondre

5

J'ai trouvé la meilleure façon de corriger un bug est de poster la question StackOverflow et 5 minutes plus tard travailler par vous-même. Inutile de dire, j'ai travaillé cela.

En plus de définir toutes les informations de connexion dans les objets de rapport, je dois également le faire dans le composant Crystal Viewer dans ASP.NET. Donc, je viens d'écrire un code comme celui-ci et tout cela fonctionne, pas d'invites.

<CR:CrystalReportViewer Height="500px" ID="Viewer" runat="server" /> 

var connectionInfo = new ConnectionInfo(); 
    connectionInfo.ServerName = "192.168.x.xxx"; 
    connectionInfo.DatabaseName = "xxxx"; 
    connectionInfo.Password = "xxxx"; 
    connectionInfo.UserID = "xxxx"; 
    connectionInfo.Type = ConnectionInfoType.SQL; 
    connectionInfo.IntegratedSecurity = false; 

for (int i = 0; i < Viewer.LogOnInfo.Count; i++) 
{ 
    Viewer.LogOnInfo[i].ConnectionInfo = connectionInfo; 
} 
+0

Salut Craig, vous s'il vous plaît élaborer this.Means je suis nouveau dans le rapport de cristal et i également face à la même problem.where ajouter ce code et comment, s'il vous plaît . merci d'avance –

+0

@Craig. Je me suis cogné la tête contre le mur pendant un certain temps et j'espère que votre solution fonctionne pour moi. Je ne peux pas dire à partir de votre code, avez-vous mis la var et pour le code dans le CodeBehind? Ou en javascript sur la page? – davids

+0

Il est dans le code derrière. Vous devrez peut-être également parcourir les sous-rapports et définir des informations de connexion sur chacun d'eux. – Craig

1

mettre votre codage pour charger l'événement en rapport bind ne mettez pas IsPostBack = false état

exemple

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    Dim dt As New dsPrintRevisionStatus 
    Try 
     lblHeader.Text = Request.QueryString("name") 
     If lblHeader.Text = "Report- Print Revision Status" Then 
      Dim rpt As New rpt_PrintRevisionStatus 
      rpt.SetDataSource(sqlHandler.ExecuteDataTable("SELECT * FROM [Print Revision Status]")) 
      crtViewer.ReportSource = rpt 
      crtViewer.DataBind() 

     End If 
    Catch ex As Exception 
     lblError.Text = ex.Message 
    End Try 
End Sub 
2

Utilisez le tableau de données au lieu de l'ensemble de données .. Il fonctionne ..

3

Essayez de définir la propriété EnableDatabaseLogonPrompt dans la visionneuse de rapports de cristal à false;

0

J'ai eu le même problème mais j'ai trouvé une solution simple. c'est-à-dire qu'il suffit de remplacer dataset par le data table et cela fonctionnera très bien.

0

Si vous avez ajouté les informations d'ouverture de session comme suit,

 LogInfo.ConnectionInfo.ServerName = "mcqueen"; 
     LogInfo.ConnectionInfo.Password = "abc123"; 
     LogInfo.ConnectionInfo.UserID = "sa"; 
     LogInfo.ConnectionInfo.DatabaseName = "tbboss"; 

     crysViewer.LogOnInfo.Add(LogInfo); 

mettre simplement le crysViewer.LogOnInfo.Add (LogInfo); à la fin des paramètres du paramètre Crystal Viewer. Comme suit.

LogInfo.ConnectionInfo.ServerName = "mcqueen"; 
    LogInfo.ConnectionInfo.Password = "abc123"; 
    LogInfo.ConnectionInfo.UserID = "sa"; 
    LogInfo.ConnectionInfo.DatabaseName = "tbboss"; 


    int exportFormatFlags =(int)(CrystalDecisions.Shared.ViewerExportFormats.PdfFormat | CrystalDecisions.Shared.ViewerExportFormats.ExcelFormat); 
    crysViewer.AllowedExportFormats = exportFormatFlags; 
    crysViewer.ReportSource = Server.MapPath("Reports/Report1.rpt"); 
    crysViewer.ParameterFieldInfo = paramFields; 

    crysViewer.LogOnInfo.Add(LogInfo); 
0

Utilisez EnableDatabaseLogonPrompt pour voir l'erreur réelle