2012-06-28 8 views
5

Utworzono Crystal Report i połączyłem go z plikiem XML pod numerem C:\SomeDir\Data.xml.Zmiana źródła danych XML Crystal Report

W czasie wykonywania może być konieczne umieszczenie danych w C:\SomeOtherDir\Data.xml.

Kod mam dotąd wygląda następująco:

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

To spowoduje wydrukowanie raportu z danymi na C:\SomeDir\Data.xml. Chcę, aby wydrukował dane pod numerem C:\SomeOtherDir\Data.xml.

Jak mogę to zrobić?

+0

mógłbyś pisać kod ładuje raport z XML? – Urik

+0

@Urik: Nie ma kodu. Raport jest powiązany z plikiem XML. –

+0

Ale czy nie używasz czegoś takiego jak rpt.Database.Tables [0] .SetDataSource (ds_xml); ? – Urik

Odpowiedz

0

W języku Java, jeśli chcę zamienić nowy zestaw danych w czasie wykonywania, zazwyczaj będę ładował dane (np. Zestaw wyników z db lub xml lub cokolwiek innego) i wepchnę to za pomocą rpt.Database.Tables .setDataSource przekazuje "alias tabeli" oryginalnych danych, więc CR wie, co zastąpić. Prawdopodobnie będzie podobny w C#. Możesz odświeżyć to, wypróbować i wrócić do kolejnych pytań.

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

Jeśli schemat zmian XML, trzeba będzie otworzyć raport w edytorze CR i „sprawdzenie bazy danych”, aby zaktualizować schemat jest związany, czy będzie to rzucić tajemnicza „Logowanie nie powiodło się” błąd.

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

to działa? – deltu100

0

Jeśli trzeba od początku, rozważyć trzeba dane DataGridView drukowania pokazać w Crystelreport pomocą XML

**(This is very helpful if you not using any database)** 
  1. najpierw dokonać tabeli danych
  2. Następnie dodać dane do tabeli danych (tutaj dodać z DataGridview)
  3. Utworzenie pliku XML
  4. Raport o uruchomieniu

Oto Przykładowy kod

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

uwaga W przypadku dokonania zmiany XML miał błąd app.config jak plik śledzić

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

Po Maked pliku xml, możesz zadzwonić do Raport Crystel

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

w raporcie viwer

crBill cr = new crBill(); 
cr.SetDataSource(frmSell.ds); 
crystalReportViewer1.ReportSource = cr; 
crystalReportViewer1.RefreshReport(); 
crystalReportViewer1.Refresh(); 
Powiązane problemy