Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    473

    ASP.NET report con piu datatable

    Ciao a tutti!
    Dovrei fare il report di una fattura, stampando l'intestazione che si trova su una tabella ed il dettaglio fattura che si trova in un'altra tabella.

    ho provato diverse strade ma non ci sono ancora riuscito, se provo a stampare i dati solo dell'intestazione della fattura e solo del dettaglio funziona, mentre provo a passare i dati al mio data set di entrambe le tabelle non visualizzo nulla.

    ho provato 2 soluzioni:
    1) nel file dataset1.xsd ho creato 2 datatable, 1 per l'intestazione della fattura e l'altro per il dettaglio della fattura.
    ho creato il report associato impostando come orinine dei dati i due datatable e mi sono personalizzato il report con i miei campi.
    poi mi sono creato la mia pagina asp.net vb con il seguente codice:
    codice:
    Imports System.Data
    Imports System.Configuration
    Imports System.Data.SqlClient
    Imports CrystalDecisions.CrystalReports.Engine
    
    
    Partial Class cism_Report_fattura_acquisto
        Inherits System.Web.UI.Page
    
        Dim sql As String
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    
    
            Dim crystalReport As New ReportDocument()
            crystalReport.Load(Server.MapPath("~/APP/report/fattura_vendita.rpt"))
            Dim dsIntestazione As DataSet1 = GetData(sql)
    
            sql = "SELECT CONTROPARTITE.contropartita1 AS descr, DETTAGLIO_FATTURE.imponibile, CODICI_IVA.iva " & _
            "FROM DETTAGLIO_FATTURE INNER JOIN CONTROPARTITE ON DETTAGLIO_FATTURE.n_dettaglio = CONTROPARTITE.id INNER JOIN CODICI_IVA ON DETTAGLIO_FATTURE.n_aliquota = CODICI_IVA.id " & _
            "WHERE DETTAGLIO_FATTURE.id_fattura=47291"
            Dim dsDettaglio As DataSet1 = GetData2(sql)
    
            crystalReport.Database.Tables(0).SetDataSource(dsIntestazione)
            crystalReport.Database.Tables(1).SetDataSource(dsDettaglio)
    
            CrystalReportViewer1.ReportSource = crystalReport
    
        End Sub
    
        Private Function GetData(ByVal query As String) As DataSet1
            Dim conString As String = ConfigurationManager.ConnectionStrings("dbConnectionString").ConnectionString
            Dim cmd As New SqlCommand(query)
            Using con As New SqlConnection(conString)
                Using sda As New SqlDataAdapter()
                    cmd.Connection = con
                    sda.SelectCommand = cmd
                    Using dsCustomers As New DataSet1()
                        sda.Fill(dsCustomers, "Fatture_vendita")
                        Return dsCustomers
                    End Using
                End Using
            End Using
        End Function
    
        Private Function GetData2(ByVal query As String) As DataSet1
            Dim conString As String = ConfigurationManager.ConnectionStrings("dbConnectionString").ConnectionString
            Dim cmd As New SqlCommand(query)
            Using con As New SqlConnection(conString)
                Using sda As New SqlDataAdapter()
                    cmd.Connection = con
                    sda.SelectCommand = cmd
                    Using dsCustomers2 As New DataSet1()
                        sda.Fill(dsCustomers2, "dettaglio_fatt")
                        Return dsCustomers2
                    End Using
                End Using
            End Using
        End Function
    End Class
    visualizzo il report vuoto, se invece cancello un datatable nel report e eseguo il codice popolando solo un datatable i dati si vedono.

    2) ho provato un'altra strada ma sono bloccato alla fine, mi spiego...
    Nel file dataset1.xsd mi sono creato un tableadapter selezionando il mio db sql e o praticamente creato la query con le due tabella interessate impostando la relazione tra di loro.
    ho creato il report selezionato come origine dati il tabledapter, ma non so in che modo implementare il mio codice asp.net per richiamare il report ed eventualmente passargli id della fattura.


    ho provato a trovare una guida ma purtroppo non sono riuscita a trovarla in vb ma solo in C#.
    Io o bisogno di stampare un report contenente due tabelle, poi se uso un datatable per recuperare i dati manualmente impostandomi una query oppure usare un tableadapter che prende i dati passando solo il paramentro del id non importa, basta che qualcuno mi spieghi come posso fare, va bene anche una guida e stanotte me la studio.

    Graziee


  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Visto che hai provato varie soluzioni, ti propongo la mia.

    Prima di tutto non uso CrystalReport.

    Secondo. Creo una pagina html adeguatamente formattata per la stampa con foglio di stile oppurtuno, riempita di dati di prova.
    Quando ho raggiungo il risultato voluto prendo l'html risultante e lo replico in una pagina aspx con dati veri.

    Leggo da database la fattura in un DataTable. Recuperato l'id_fattura, leggo i dettagli in un altro DataTable. Nota che il DataSet non serve.

    Adesso che ho i dati in due DataTable, creo una StringBuilder leggendo i dati prima dal primo DataTable, poi dal secondo DataTable.

    La spiegazione può anche non essere chiara, ma ti assicuro che funziona. E funziona pure se devi produrre il report in un pdf. Alla fine dei conti, quello che chiami report, non è altro che html formattato adeguatamente.


    • ps. il c# è molto simile al vb.net. Basta una minima conoscenza per utilizzare tutto quello che si trova in rete.
    Pietro

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    473
    Ciao,
    grazie per il consiglio, ieri notte ho troato una soluzione abbastanza ovvia....
    Ho continuato la soluzione 1 e mi sono creato un unico datatable con le colonne dell'intestazione e del dettaglio, eseguo una sola query e popolo un solo datatable, risolvendo il mio problema di non riuscire a popolare i due datatable.

    Ciaoo

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.