2012-06-28 58 views
5

Creé un Crystal Report y lo conecté a un archivo XML al C:\SomeDir\Data.xml.Cambiando fuente de datos XML de Crystal Report

En tiempo de ejecución, puedo necesitar poner los datos en C:\SomeOtherDir\Data.xml.

El código que tengo hasta ahora es así:

ReportDocument report = new ReportDocument(); 
report.Load("Report.rpt"); 
PrinterSettings printerSettings = new PrinterSettings(); 
PageSettings pageSettings = printerSettings.DefaultPageSettings; 
report.PrintToPrinter(printerSettings, pageSettings, false); 

que imprimirá el informe con los datos a C:\SomeDir\Data.xml. Quiero que imprima los datos en C:\SomeOtherDir\Data.xml.

¿Cómo puedo hacer esto?

+0

Podría usted por favor enviar el código para cargar el informe de XML? – Urik

+0

@Urik: no hay código. El informe está vinculado al archivo XML. –

+0

¿Pero no está usando algo como rpt.Database.Tables [0] .SetDataSource (ds_xml); ? – Urik

Respuesta

0

En Java, si deseo sustituir un nuevo conjunto de datos en tiempo de ejecución, generalmente cargaré esos datos (ya sea un conjunto de resultados de un archivo db o xml o lo que sea) y los ingresaré a través de rpt.Database.Tables .setDataSource pasa el 'alias de tabla' de los datos originales para que CR sepa qué sobrescribir. Es probable que sea similar en C#. Es posible que desee repasarlo, probarlo y luego volver con más preguntas.

1
ReportDocument report = new ReportDocument(); 
report.Load("Report.rpt"); 

DataSet reportData = new DataSet(); 
reportData.ReadXml(@"C:\SomeOtherDir\Data.xml"); 
report.SetDataSource(reportData); 

PrinterSettings printerSettings = new PrinterSettings(); 
PageSettings pageSettings = printerSettings.DefaultPageSettings; 
report.PrintToPrinter(printerSettings, pageSettings, false); 

Si el esquema de los cambios XML, tendrá que abrir el informe en el editor de CR y "verificar la base de datos" para actualizar el esquema que está obligado a, o se va a tirar la misteriosa "inicio de sesión fallidos" error.

0
Imports CrystalDecisions.Shared 
Imports CrystalDecisions.CrystalReports.Engine 
Imports BL 

Public Class frmRptViewer 
    Dim strReportName As String 
    Dim ds As New DataSet 
    Public bl As New BL.InvoiceBL 
    Private Sub configureCrystalReports() 
     Dim strReportName As String 
     Try 
      strReportName = "Inv" 
      ds = bl.FillHDDT(TrnCode) 
      Dim strReportPath As String = Application.StartupPath & "\Reports\" & strReportName & ".rpt" 
      Dim rptDocument As New CrystalDecisions.CrystalReports.Engine.ReportDocument 
      ds.WriteXml(Application.StartupPath & "\xmlFiles\INVOICE.xml", XmlWriteMode.WriteSchema) 
      rptDocument.Load(strReportPath) 

      Dim crpConnectionInfo As New CrystalDecisions.Shared.ConnectionInfo 
      With crpConnectionInfo 
       .ServerName = Application.StartupPath & "\xmlFiles\INVOICE.xml" 
       .DatabaseName = "NewDataset" 
       .UserID = "" 
       .Password = "" 
      End With 

      Dim tblCurrent As Table 
      Dim crpTableLogOnInfo As New CrystalDecisions.Shared.TableLogOnInfo() 
      For Each tblCurrent In rptDocument.Database.Tables 
       tblCurrent.LogOnInfo.ConnectionInfo.ServerName = Application.StartupPath & "\xmlFiles\INVOICE.xml" 
       tblCurrent.LogOnInfo.ConnectionInfo.DatabaseName = "NewDataset" 
       tblCurrent.LogOnInfo.ConnectionInfo.UserID = "" 
       tblCurrent.LogOnInfo.ConnectionInfo.Password = "" 
       tblCurrent.LogOnInfo.ConnectionInfo.Type = CrystalDecisions.Shared.ConnectionInfoType.MetaData 
      Next 
      rptDocument.Database.Tables(0).SetDataSource(ds.Tables("Table")) 
      rptDocument.Database.Tables(1).SetDataSource(ds.Tables("Table1")) 

      crptViewer.ShowRefreshButton = False 
      crptViewer.ShowCloseButton = False 
      crptViewer.ShowGroupTreeButton = False 
      crptViewer.ReportSource = rptDocument 
     Catch ex As Exception 
     End Try 
    End Sub 
+0

hace esto? – deltu100

0

Si usted necesita de inicio, consideran necesita datos DataGridView de impresión muestran en Crystelreport utilizando XML

**(This is very helpful if you not using any database)** 
  1. En primer lugar hacer la tabla de datos
  2. A continuación, agregar datos a la tabla de datos (aquí Añadir de DataGridview)
  3. Crear archivo XML
  4. Ejecutar informe

Aquí código de ejemplo

DataTable dt = new DataTable(); 
dt.Columns.Add("Item_Id", typeof(string)); 
dt.Columns.Add("Categry", typeof(string)); 
dt.Columns.Add("Item_Name", typeof(string)); 
dt.Columns.Add("Unit_Price", typeof(double)); 
dt.Columns.Add("Quantity", typeof(int)); 
dt.Columns.Add("Discount", typeof(string)); 
dt.Columns.Add("Total_Payable", typeof(double)); 
    foreach (DataGridViewRow dgr in DGVsell.Rows) 
{ 
    dt.Rows.Add(dgr.Cells[0].Value, dgr.Cells[1].Value, dgr.Cells[2].Value, dgr.Cells[3].Value, dgr.Cells[4].Value, dgr.Cells[5].Value, dgr.Cells[6].Value); 
} 
ds.Tables.Add(dt); 
ds.WriteXmlSchema("Bill.xml"); 

nota Si la fabricación de error tenido el cambio de archivo XML App.config como sigue

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    </startup>--> 
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> 
    </startup> 
</configuration> 

Después Maqued archivo XML, puede llamar a la Informe de Crystel

frmreport obj = new frmreport(); //load report viwer form 
obj.ShowDialog(); 

en el informe viwer

crBill cr = new crBill(); 
cr.SetDataSource(frmSell.ds); 
crystalReportViewer1.ReportSource = cr; 
crystalReportViewer1.RefreshReport(); 
crystalReportViewer1.Refresh(); 
Cuestiones relacionadas