Domanda

Devo creare report in un'app Windows C # .NET. Ho un database SQL Server 2005, Visual Studio 2005 e sono abbastanza d'accordo con la creazione di stored procedure e set di dati.

Qualcuno può indicarmi la giusta direzione per la creazione di rapporti? Non riesco proprio a risolverlo. Alcuni esempi potrebbero essere un buon inizio, o un semplice tutorial How-to ... tutto ciò che è un po 'meglio spiegato rispetto ai documenti MSDN.

Sto usando il controllo CrystalDecisions.Windows.Forms.CrystalReportViewer per visualizzare i rapporti, presumo che sia corretto.

Se sto per intraprendere un lungo e complesso viaggio, qual è il modo più semplice per creare e visualizzare report che possono anche essere stampati?

È stato utile?

Soluzione

Sono riuscito a farlo funzionare ora.

Breve panoramica

Funziona avendo una 'classe di dati' che è solo una normale classe C # contenente variabili e nessun codice. Questo viene quindi istanziato e riempito di dati e quindi inserito in una ArrayList. ArrayList è associato al visualizzatore di report, insieme al nome del report da caricare. Nel report designer vengono utilizzati ".Net Objects", anziché comunicare con il database.

Spiegazione

Ho creato una classe per conservare i dati per il mio rapporto. Questa classe viene compilata manualmente da me recuperando manualmente i dati dal database. Come lo fai non importa, ma ecco un esempio:

DataSet ds = GeneratePickingNoteDataSet(id);
foreach (DataRow row in ds.Tables[0].Rows) {
    CPickingNoteData pickingNoteData = new CPickingNoteData();

    pickingNoteData.delivery_date = (DateTime)row["delivery_date"];
    pickingNoteData.cust_po = (int)row["CustomerPONumber"];
    pickingNoteData.address = row["CustomerAddress"].ToString();
    // ... and so on ...

    rptData.Add(pickingNoteData);
}

La classe viene quindi inserita in una ArrayList. Ogni elemento nell'arraylist corrisponde a una "riga" nel rapporto finito.

Il primo elemento nell'elenco può contenere anche i dati dell'intestazione del report e l'ultimo elemento nell'elenco può contenere i dati del piè di pagina del report. E poiché questa è una ArrayList, è possibile utilizzare il normale accesso alla matrice per accedervi:

((CPickingNoteData)rptData[0]).header_date = DateTime.Now;
((CPickingNoteData)rptData[rptData.Count-1]).footer_serial = GenerateSerialNumber();

Una volta che hai un arraylist pieno di dati, collegalo al tuo visualizzatore di report in questo modo, dove 'rptData' è di tipo 'ArrayList'

ReportDocument reportDoc = new ReportDocument();
reportDoc.Load(reportPath);
reportDoc.SetDataSource(rptData);
crystalReportViewer.ReportSource = reportDoc;

Ora dovrai associare la tua classe di dati al rapporto stesso. Lo fai all'interno del designer:

  1. Apri la scheda Esplora campi (che potrebbe trovarsi nel menu "Visualizza") e fai clic con il pulsante destro del mouse su " Campi database "
  2. Fai clic su "Dati progetto"
  3. Fai clic su "Oggetti .NET"
  4. Scorri l'elenco verso il basso per trovare il tuo classe di dati (se non è presente, compila la tua domanda)
  5. Premi '> >' e poi OK
  6. Ora puoi trascinare i membri della classe sul rapporto e disporli come vuoi.

Altri suggerimenti

Crystal è un'opzione possibile per la creazione di report. È passato molto tempo e a molte persone sembra piacere.

Potresti dare un'occhiata ai servizi di reportistica SQL. Ho usato entrambi ma preferisco i servizi di reportistica SQL. È abbastanza ben integrato in studio e funziona in modo simile agli altri progetti Microsoft. È anche gratuito con sql express ecc.

Questo è un buon articolo sull'inizio dei servizi di segnalazione: http : //www.simple-talk.com/sql/learn-sql-server/beginning-sql-server-2005-reporting-services-part-1/

È possibile utilizzare il visualizzatore di report con i report lato client integrati in vs.net (controllo ReportBuilder / ReportViewer). È possibile creare report nello stesso modo in cui si fa per i servizi di reporting sql, tranne per il fatto che non è necessario il server sql (né asp.net). Inoltre hai il controllo completo su di loro (come ti presenti, come raccogli i dati, in quale livello vengono generati, cosa fai con loro dopo la generazione, come spedirli, inviarli a ftp, ecc.). Puoi anche esportare come PDF ed Excel.

E nel tuo caso la creazione di un report dai dati e dall'input dell'utente, questo potrebbe funzionare alla grande in quanto puoi creare la tua origine dati e i tuoi dati man mano che procedi. Una volta che i tuoi dati sono pronti per essere segnalati, associali al tuo rapporto.

I report possono essere facilmente creati in Visual Studio 2005 (Aggiungi un report al progetto) e visualizzati in un'app Winforms usando il controllo ReportViewer.

Ecco un ottimo libro che consiglio a tutti di vedere se sono interessati ai rapporti sul lato client. Fornisce molte informazioni straordinarie e molti scenari e modi diversi per utilizzare i rapporti lato client.

http://www.apress.com/book/view/9781590598542

Secondo la raccomandazione di alex di esaminare i servizi di reporting sql: se si dispone di una licenza per sviluppatori sql, probabilmente si dispone già di servizi di reporting

Non mi piacciono i report di cristallo, troppa noia nel designer (modifica delle espressioni continuamente) troppi problemi di distribuzione del server (controlla quei file di licenza!)

Uso Crystal. Descriverò brevemente il mio metodo, ma sappi che sono un negozio unico e potrebbe non tradursi nel tuo ambiente.

Innanzitutto, crea un modulo con un visualizzatore CR. Poi:

1) Scopri quali dati ti servono e crea una vista che recupera le colonne desiderate. 2) Creare un nuovo report Crystal utilizzando la procedura guidata che fornisce la vista come origine dei dati. 3) Trascina, rilascia, inserisci, elimina e tutto il resto per dare forma al tuo rapporto. Sì, è noioso. 4) Creare il pulsante necessario fare clic o qualsiasi altra cosa e creare la funzione in cui generare il rapporto. 5) Recupera i dati in una DataTable (probabilmente in un DataSet). Non è necessario utilizzare la vista. 6) Creare l'oggetto report. Impostare DataTable come DataSource. Assegnare l'oggetto report al Visualizzatore CR. Questa è una parte per la quale ci sono esempi.

Commenti:

Se perdi la finestra con i campi del database, ecc. (Esplora campi), vai a Visualizza / Contorno documento. (È la mia fantasia avere Bill Gates su un palco e chiedergli di trovarlo.)

Il motivo per impostare la vista è che se si desidera aggiungere una colonna, si modifica la vista e Field Explorer si aggiornerà automaticamente. Ho avuto molti problemi a farlo in altri modi. Questo metodo è anche una soluzione per un bug che richiede la scansione di tutte le tabelle per ripristinare la tabella a cui puntano. Vuoi consegnare a Crystal un solo tavolo. Non vuoi provare a far sì che Crystal si unisca ai tavoli, ecc. Non dico che non funziona; Dico che è più difficile.

Esiste (o era) documentazione per l'implementazione VS di Crystal sul sito Web Business Objects, ma credo che sia scomparso dietro una schermata di registrazione / accesso. (Potrei avere maggiori informazioni su questo io.)

Ho avuto problemi a far sì che Crystal interrompesse la pagina quando volevo e non interrompere la pagina quando non volevo, ecc. È tutt'altro che il miglior autore di report che abbia mai usato e non capisco perché sembra di aver messo così tanti altri fuori dal mercato. Inoltre, le loro politiche di licenza sono molto difficili da gestire in un'organizzazione piccola e fluida.

Modificato per aggiungere un esempio:

AcctStatement oRpt = new AcctStatement() ;
oRpt.Database.Tables[0].SetDataSource(dsRpt.Tables[0]);
oRpt.SetParameterValue("plan_title",sPlanName) ;
crViewer.ReportSource = oRpt ;

Ho trovato i seguenti siti Web risolti i miei problemi. Incluso qui per riferimento futuro.

Tutorial sul modello di oggetti CrystalReportViewer per il tutorial su come far funzionare tutto. E anche Impostazione di un progetto per l'utilizzo di Crystal Reports e in particolare preparando il modulo e aggiunta del controllo

Consiglio vivamente di provare una soluzione di reportistica alternativa: ho molta esperienza con Crystal e sono riuscito a fare cose funky con esso in .Net, ma onestamente l'integrazione di Crystal e .Net è un maiale assoluto per tutt'altro che i casi più semplici.

Ho provato RS. Sto convertendo da RS a Crystal. RS è troppo pesante e lento (o qualcosa del genere). Non c'è motivo di dover attendere 30 secondi affinché un report venga visualizzato sia RS quando Crystal lo fa in meno di un secondo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top