Oppure

Loading
05/04/09 19:18
Nikitto46
Ciao a tutti i programmatori c# spero riuscite a darmi 1 aiuto come al solito ,
devo effettuare una stampa di dati che non sono inseriti nel db e utilizzo Crystal Report .
Quello che ho fatto è copiare dei dati in 1 file di testo separati da ";" e agganciare questo file di testo come origine dati in crystal report .
Considerate che i dati sono molti e che non posso inserirli nel db nel server perchè più utenti contemporaneamente devono poter lanciare la stampa e non posso creare una Tabella "fittizia" che utilizzo solo per popolarla al momento della stampa, per questo motivo ho utilizzato la tecnica del file di testo locale.
Però c'è un problema:
una colonna ha molti dati che sono solo numeri ed alcuni numeri con testo .. in automatico crystal report non considera quelle poche righe dove c'è numeri con testo in questa specifica colonna perchè è come se la considera 1 campo numerico.
Spero sono riuscito a spiegarmi .
Allora pensavo che ho 2 strade per risolvere questo problema :

1. Capire come poter far considerare a Crystal Report questo campo come alfanumerico e non solo numerico (e non ci sono riuscito)

2. Non utilizzare la tecnica del file di testo ma bensì creare un DataTable da passare come origine dati al report così il DataTable ha i campi con il tipo determinato. Però non riesco a capire come posso creare un DataTable che non è in alcun modo agganciato al db e popolarlo , da qui il titolo del post

Spero che qualcuno possa aiutarmi , vi ringrazio anticipatamente e se qualcuno non ha capito il mio problema (cosa probabile dato che credo di essere stato poco chiaro) rispondete che posso cercare di chiarirlo meglio
aaa
05/04/09 20:56
andrea.b89
Allora è possibilissimo creare un DataTable e lavorarci in maniera disconnessa.

Sarebbe lungo spiegare passo per passo come aggiungere righe e colonne e trattare i relativi metodi compresi gli overloading.

Mi sembri una persona capace motivo per cui ti lascio un esempio scritto appositamente per te che ti mostra come aggiungere righe, colonne e dati ad un DataTable, scritto rigorosamente in C#.

Eventualmente potrai farmi delle domande dove trovi problemi :)

using System;
using System.Collections.Generic;
using System.Data;

namespace DatatableEs
{
    class Program
    {
        static void Main(string[] args)
        {
            //creazione DataTable assegnando un nome alla tabella
            DataTable dt = new DataTable("Prova01");
            DataRow dr;
            DataColumn dc;
            //creazione di 2 colonne ID e NOME
            
            //creazione di una colonna ID

            dc = new DataColumn("ID");
            dt.Columns.Add(dc);

            //creazione di una colonna NOME

            dc = new DataColumn("NOME");
            dt.Columns.Add(dc);

            //creazione di 2 righe
            dr = dt.NewRow();
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dt.Rows.Add(dr);
            
            //inserimento valori

            for(int row = 0; row < dt.Rows.Count; row++)
                for (int col = 0; col < dt.Columns.Count; col++)
                {
                    Console.WriteLine("Inserisci il valore della colonna [{0}]", dt.Columns[col].ColumnName);
                    dt.Rows[row][col] = Console.ReadLine();
                }

            //stampa intestazioni

            for (int col = 0; col < dt.Columns.Count; col++)
                Console.Write("{0,-10}", dt.Columns[col].ColumnName);

            Console.WriteLine();

            //stampa delle righe e delle relative colonne

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                for (int j = 0; j < dt.Columns.Count; j++)
                    Console.Write("{0,-10}",dt.Rows[i][j]);
                Console.WriteLine();
            }

            Console.ReadLine();
        }
    }
}


Spero di essere stato chiaro e di aiuto :k:
aaa
06/04/09 8:04
Nikitto46
Grazie per la risposta ...
Allora nella schermata che mi visualizza il DataSet (il file .xsd) ho fatto tasto destro -> Aggiungi -> DataTable e ho creato il mio DataTable inserendo le varie colonne .. così nella progettazione del report posso agganciare questa origine dati e trascinare con il mouse facilmente i campi del DataTable nel report .
Nella form che mi gestisce la stampa ho scritto questo codice per popolare il DataTable

MioDataSet.StampaDataTable dtStampa = new MioDataSet.StampaDataTable();
dtStampa.AddStampaRow(flagColore, NumerazioneRigheInStampa, TipoRiga, DataRif, Matricola);
dtStampa.AcceptChanges();


e per avviare la stampa ho creato una form dove visualizzo l'anteprima di stampa

AnteprimaStampaDlg dlgAnteprimaStampa = new AnteprimaStampaDlg();
ProvaStampa sProvaStampa = new ProvaStampa(); // il Report
dlgAnteprimaStampa.crystalReportViewer.ReportSource = sProvaStampa;
dlgAnteprimaStampa.ShowDialog();


ma il report è vuoto !!!

effettuando il debug dopo la riga dtStampa.AddStampaRow vedo che il dtStampa.Count viene incrementato quindi effettivamente aggiungo delle righe al DataTable ma se faccio il debug nella Load della form che mi visualizza l'anteprima il dtStampa.Count è 0 .. come se non "mantiene" i dati .. ma sicuramente sono io che sto sbagliando.
Ho pure inserito l'anteprima di stampa nella stessa form pensando che era il passaggio da form a form ma il risultato è lo stesso
aaa
06/04/09 13:25
Il Totem
dlgAnteprimaStampa.crystalReportViewer.ReportSource = sProvaStampa; 

Spiegami questa riga di codice, utilizzando anche i congiuntivi.
aaa
06/04/09 15:01
Nikitto46
dlgAnteprimaStampa è la form dove ho messo il controllo crystalReportViewer che mi visualizza l'anteprima del report sProvaStampa che ho creato con CrystalReport ..

Questa riga di codice la utilizzo perchè non ho 1 unica stampa nel mio progetto e così posso cambiare il report da visualizzare in anteprima sul crystalReportViewer a runtime

Spero di essere stato chiaro , se ci sono altri dubbi ti invito a chiedere perchè è di mio interesse risolvere il problema
Grazie comunque
aaa
07/04/09 13:35
Il Totem
Ora, io non sono pratico di crystal report, ma se il suddetto report lo crei la riga prima, non dovrebbe essere giustamente vuoto? In caso contrario, non si potrebbe vedere il codice del costruttore?
aaa
07/04/09 14:52
Nikitto46
ti posso confermare che funziona perchè adesso sto utilizzato un file xml e funziona .. il report anche se è creato la riga prima è formato da campi che sono collegati all'orige dati (nel mio caso il file xml che vorrei sostituire con 1 DataTable non collegato al db)
aaa