2012-06-28 13 views
5

Ich erstellte einen Crystal Report und verband ihn mit einer XML-Datei unter C:\SomeDir\Data.xml.Ändern der XML-Datenquelle von Crystal Report

Zur Laufzeit muss ich möglicherweise die Daten in C:\SomeOtherDir\Data.xml setzen.

Der Code, den ich bisher haben sieht wie folgt aus:

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

, dass der Bericht mit den Daten bei C:\SomeDir\Data.xml gedruckt werden. Ich möchte, dass die Daten unter C:\SomeOtherDir\Data.xml gedruckt werden.

Wie kann ich das tun?

+0

Könnten Sie bitte den Code zum Laden des Berichts von xml posten? – Urik

+0

@Urik: Es gibt keinen Code. Der Bericht ist an die XML-Datei gebunden. –

+0

Aber verwenden Sie nicht etwas wie rpt.Database.Tables [0] .SetDataSource (ds_xml); ? – Urik

Antwort

0

In Java, wenn ich eine neue Reihe von Daten zur Laufzeit ersetzen möchte, werde ich in der Regel diese Daten laden (sei es ein Ergebnis von einer db oder xml oder was auch immer) und schieben Sie es über Rpt.Database.Tables .setDataSource übergibt den 'Tabellenalias' der Originaldaten, sodass CR weiß, was überschrieben werden soll. Es wird wahrscheinlich in C# ähnlich sein. Vielleicht möchten Sie das auffrischen, es ausprobieren und dann mit weiteren Fragen zurückkommen.

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); 

Wenn das Schema der XML-Änderungen, müssen Sie den Bericht in dem CR-Editor öffnen und „Datenbank überprüfen“ das Schema zu aktualisieren es gebunden ist, oder es wird die geheimnisvolle „Fehler bei der Anmeldung“ werfen 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

funktioniert das? – deltu100

0

Wenn Sie von Anfang benötigen, betrachten Sie drucken Datagridview-Daten zeigen, in Crystelreport müssen unter Verwendung von XML

**(This is very helpful if you not using any database)** 
  1. Erste make Datentabelle
  2. Dann werden die Daten In den Datentabelle (hier hinzufügen von DataGridview)
  3. XML-Datei erstellen
  4. Bericht ausführen

Hier Beispielcode

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"); 

note Wenn hatte Fehler Xml Änderung App.config Datei machen als

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

Nach maked XML-Datei folgen, können Sie auf den Aufruf Crystel Bericht

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

in Bericht viwer

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