2013-10-15 1 views
2

J'ai mentionné quelques articles sur ce site pour le rendu .rdlc .PDF sortie en utilisant application.Am nouvelle console C# .net construit une application pour le même que celui ci-dessous donne une erreur disant : !> Rdclrender.exe Rdclrender.Program.Main (string [] args = {string [0]}) ligne 28 Ma classe est donnée ci-dessous:rendu RDLC à l'application pdf de la console de sortie

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using Microsoft.Reporting.WinForms; 


namespace Rdclrender 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      // Variables 
      Warning[] warnings; 
      string[] streamIds; 
      string mimeType = string.Empty; 
      string encoding = string.Empty; 
      string extension = string.Empty; 


      // Setup the report viewer object and get the array of bytes 
      ReportViewer viewer = new ReportViewer(); 
      viewer.ProcessingMode = ProcessingMode.Local; 
      viewer.LocalReport.ReportPath = "Report.rdlc"; 


      byte[] bytes = viewer.LocalReport.Render("PDF", null, out mimeType, out encoding, out extension, out streamIds, out warnings); 

      using (System.IO.FileStream fs = new System.IO.FileStream("output.pdf", System.IO.FileMode.Create)) 
      { 
       fs.Write(bytes, 0, bytes.Length); 
      } 
      // Now that you have all the bytes representing the PDF report, buffer it and send it to the client. 
      /* Response.Buffer = true; 
       Response.Clear(); 
       Response.ContentType = mimeType; 
       Response.AddHeader("content-disposition", "attachment; filename=" + fileName + "." + extension); 
       Response.BinaryWrite(bytes); // create the file 
       Response.Flush(); // send it to the client to download*/ 
     } 
    } 
} 

est-ce le moyen de créer de pdf .rdl ? J'avais renommé mon .rdl en .rdlc manuellement un élément .rdlc ajouté au projet.

+0

Oui, je l'ai fait de la même manière dans mon projet WinForms, nous utilisons également des rapports sur les clients. – Dannydust

+0

@Dannydust Pouvez-vous préciser quelle est l'erreur que j'ai mentionnée? Je veux enregistrer le rapport localement sur le disque. Ne pas afficher à l'aide de la visionneuse de rapports. Ce devrait être un processus d'arrière-plan. – flute

+0

Vous ne pouvez pas déboguer votre application? C'est vraiment difficile de dire ce qui ne va pas. Ce serait bien si vous pouviez poster une exception. Mais 2 questions: Avez-vous un fichier de rapport existant avec le nom: "Report.rdlc"? Et si oui pouvez-vous mettre le chemin complet là f. e. viewer.LocalReport.ReportPath = @ "c: \ myfolder \ Report.rdlc"; – Dannydust

Répondre

3

D'accord pour le faire programatically la solution est simple:

Remplir un DataTable avec les données pour le rapport et le nom du DATATABLE « Sales » (comme le nom de DataSource dans votre rapport

S'il vous plaît noter cela. est un code pseudo qui ne fonctionnera pas, mais devrait vous donner une idée

var myDataSet = new DataSet(); 
var da = new SqlDataAdapter("Select * from Sales", "yourConnectionstring"); 

da.Fill(myDataSet); 
DataTable table = myDataSet.Tables[0]; 
table.TableName = "Sales"; 

Ajouter DataTable comme source de données à votre rapport.

viewer.LocalReport.DataSources.Add(table); 
+0

L'a obtenu mais une erreur inhabituelle apparaît: erreur rsInvalidReportDefinition: La définition du rapport n'est pas valide. Détails: La définition de rapport comporte un espace de noms cible non valide 'http://schemas.microsoft.com/sqlserver/reporting/2010/01/reportdefinition' qui ne peut pas être mis à niveau. – flute

+0

Alors maintenant, vous avez une erreur différente. Cette erreur signifie que votre moteur de rendu ne correspond pas à la version de votre rapport. Assurez-vous que vos rapports Dll correspondent à la version de votre rapport. – Dannydust

+0

Par exemple, nous utilisons les rapports Dll version 10.0.0.0 et l'espace de noms pour nos rapports est: http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition – Dannydust

Questions connexes