Stampa da datagridview su base dati testo

venerdì 19 gennaio 2007 - 15.37

pieroalampi Profilo | Expert

salve ho un priccolo problema che mi tormenta da un po, si tratta di effettuare delle stampe di un datagridview che carica dati da una fonte *.txt, è anche vero che non ho esperienza di stampa con questo componente, ma credo non debba essere troppo difficile con la wizard di cristal report, in ogni caso dato che con la stessa wizard di cristal non riesco a reperire i dati da stampare come fonte dati, mi dareste una mano, grazie!

freeteo Profilo | Guru

ciao,
se decidi di stampare qualcosa con i repotr di Crystal, allora ti conviene pensare di crearti i dati che ti interessa stampare in un oggetto DataTable di ado.net.
Ovvero crei una datatable, aggiungi le colonne e aggiungi le righe inserendo per ognuna i vari valori dei campi letti da file.
Fatto questo ciclo, la passi al report con il metodo "SetDataSource" e lo dai in pasto al viewer.

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

pieroalampi Profilo | Expert

di sicuro risolverei le cose, ma per me non è importante farlo con cristal la cosa importante è farlo, e cioe stampare il datagrid.

pieroalampi Profilo | Expert

quindi non esiste altro modo per stampare un datagrid?
::::Sempre in curva::::

freeteo Profilo | Guru

ciao,
per stampare brutalmente un datagrid ci sono vari metodi "poco eleganti" che puoi tranquillamente trovare cercando su internet, tipo :
http://www.java2s.com/Code/CSharp/GUI-Windows-Form/GridPrinting.htm
http://www.c-sharpcorner.com/UploadFile/mgold/HowToPrintingFormControlsinCSharpand.NET11212005063649AM/HowToPrintingFormControlsinCSharpand.NET.aspx

ma a mio avviso per evoluzioni future ti consiglio di pensare ad un report.
Sinceramente la parte di reportistica è sempre una parte importante da mostrare a chi usa il programma, tipicamente è proprio quella a maggior impatto dato che poi produrra' una stampa cartacea
ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

pieroalampi Profilo | Expert

ma qui parliamo di c#? e se si trattasse di vb.net? dove li trovo
------------------------------------------------------
::::Sempre a manetta in curva::::
------------------------------------------------------

freeteo Profilo | Guru

ciao,
beh guarda passare il codice tra questi due linguaggi è veramente molto facile,sia che tu lo faccia a mano sia che decida di affidarti a qualche tool come questo:
http://www.kamalpatel.net/ConvertCSharp2VB.aspx

cmq in giro per la rete ce ne sono anche altri se vuoi.
ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

pieroalampi Profilo | Expert

grande mi serviva veramente ora provo
------------------------------------------------------
::::Sempre a manetta in curva::::
------------------------------------------------------

pieroalampi Profilo | Expert

no niente nneanche con quel tool sono riuscito a cambiare il codice! hai link per vb.net?
------------------------------------------------------
::::Sempre a manetta in curva::::
------------------------------------------------------

pieroalampi Profilo | Expert

non vedendo la mail di conferma sulla mia posta effettuo un altro post:


ancora non sono riuscito a risolvere il problema neanche con quel tool per la traduzione del codice che mi hai passato, non avresti anche del link per vb.net? o altre soluzioni?
------------------------------------------------------
::::Sempre a manetta in curva::::
------------------------------------------------------

freeteo Profilo | Guru

>non vedendo la mail di conferma sulla mia posta effettuo un altro
>post:
la mail è quella con l'allegato "beginhere.zip" ?
se è quello il problema è che qui stai parlando di asp e non di WindowsForm quindi la stanza è sbagliata...e in piu' è pure asp classico, e non di .net!
La cosa si complica ababstanza, e sinceramente non tratto quel tipo di applicazioni quindi non saprei nemmeno aiutarti, ed anzi ti consiglio di passare a asp.net al piu' presto!!!!!

Cmq sia ti do il sito di riferimento di Crystal dove puoi cercare qualche info:
http://support.businessobjects.com
ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

pieroalampi Profilo | Expert

ti chiedo scusa ma sono io che sicuramente non mi spiego benissimo, in ogni caso sto programmando in vb.net ho messo in un form un datagridview e non riesco a stamparlo in nessun modo, vorrei farlo dalla fonte dati ma non ci riesco dato che non è la cllassica connessione ad un db, quindi cercavo di stampare brutalmente il contenuto del componente datagridview, è su questo sto praticamente impazzendo da una settimana!

vb.net
------------------------------------------------------
::::Sempre a manetta in curva::::
------------------------------------------------------

paolo.codega Profilo | Newbie

Ciao,

per stampare il datagrid in maniera brutale ci sono vari sistemi.
Ti consiglio cmq di utilizzare crystal report.

Il ragionamento è questo:

1. Trascini sulla form il printdocument e il printpreviewdialog

2. Sulla stessa form crei un tasto che lancia la stampa

3. Nel codice scrivi:

Private Sub btn_stampa_tnt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_stampa_tnt.Click
Me.PrintDocument1.DefaultPageSettings.Landscape = False ' orientamento orizzonatale
Me.PrintPreviewDialog1.Document = Me.PrintDocument1
Me.PrintPreviewDialog1.ShowDialog() ' vedi il preview , disattivi commentandolo
'Me.PrintDocument1.Print() ' togli l'apice se vuoi lanciare direttamente la stampa
End Sub


Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage

Dim drawFont As New Font("Verdana", 12, FontStyle.Regular) ' imposti il carattere
Dim i, x As Integer
Dim distanza As Integer = 30 ' distanza fissa righe

i = Me.dgw_spedizione.Rows.Count - 1 'conto il numero di righe del datagrid

for x=0 to i 'il datagrid contiene 3 colonne (nella parentesi dopo item vengono indicati il numero della colonna, la riga che scorre con x)
e.Graphics.DrawString(Me.NOME_DATAGRID.Item(0, x).Value, drawFont, Brushes.Black, 30, 10 + (x * distanza))
e.Graphics.DrawString(Me.NOME_DATAGRID.Item(1, x).Value, drawFont, Brushes.Black, 150, 10 + (x * distanza))
e.Graphics.DrawString(Me.NOME_DATATGRID.Item(2, x).Value, drawFont, Brushes.Black, 400, 10 + (x * distanza))
next x
End Sub

L'ho usato un pò di volte e ha sempre funzionato .
L'ho scritto a memoria quindi se non funziona ci sono errorini di codice , postameli che li correggiamo.
Poi se ti serve stampare la griglia e le righe t do i comandi.

Aspetto una tua risposta....
CIAO
PAOLO

pieroalampi Profilo | Expert

cavolo quasi quasi mi ero rassegnato, sai che nessuno è riuscito ad aiutarmi!
in ogni caso ho fatto come hai detto tu e mi si blocca con il seguente errore:

nel print preview mi si blocca deopo aver scritto la prima riga

Cast non valido dal tipo 'DBNull' al tipo 'String' sulla riga:

e.Graphics.DrawString(Me.DataGridView1.Item(0, x).Value, drawFont, Brushes.Black, 30, 10 + (x * distanza))


che sarà?



qui sotto tutto il codice:
Private Sub btnPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrint.Click
Me.PrintDocument.DefaultPageSettings.Landscape = False ' orientamento orizzonatale
Me.PrintPreviewDialog1.Document = Me.PrintDocument
Me.PrintPreviewDialog1.ShowDialog() ' vedi il preview , disattivi commentandolo
'Me.PrintDocument1.Print() ' togli l'apice se vuoi lanciare direttamente la stampa
End Sub

Private Sub PrintDocument_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument.PrintPage
Dim drawFont As New Font("Verdana", 12, FontStyle.Regular) ' imposti il carattere
Dim i, x As Integer
Dim distanza As Integer = 30 ' distanza fissa righe

i = Me.DataGridView1.Rows.Count - 1 'conto il numero di righe del datagrid

For x = 0 To i 'il datagrid contiene 3 colonne (nella parentesi dopo item vengono indicati il numero della colonna, la riga che scorre con x)
e.Graphics.DrawString(Me.DataGridView1.Item(0, x).Value, drawFont, Brushes.Black, 30, 10 + (x * distanza))
e.Graphics.DrawString(Me.DataGridView1.Item(1, x).Value, drawFont, Brushes.Black, 150, 10 + (x * distanza))
e.Graphics.DrawString(Me.DataGridView1.Item(2, x).Value, drawFont, Brushes.Black, 400, 10 + (x * distanza))

Next x

End Sub
End Class

Se potessi stampare anche la griglia e le righe sarebbe grandioso!
ovviamente il datagrid è gia popolato!
vb.net
------------------------------------------------------
::::Sempre a manetta in curva::::
------------------------------------------------------

paolo.codega Profilo | Newbie

Ciao,
per caso nel datagrid ci sono campi vuoti?

Come popoli il datagrid?
Paolo

pieroalampi Profilo | Expert

si è possibile che ci siano delle celle vuote, il datagrid lo popolo con un fill, ti posto la parte di connessione selezione e popolamento:

nn2.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Me.txtConfig.Text + ";Extended Properties='Text;HDR=No;FMT=Delimited'"
Dim cm As New System.Data.OleDb.OleDbCommand
cm.Connection = cnn2
cm.CommandText = "SELECT PROGRESSIVO,DESCRIZIONE_CLIENTE,FORMATO FROM [" + datVerFile + "] ORDER BY DESCRIZIONE_CLIENTE"
cnn2.Open()
Dim da As New System.Data.OleDb.OleDbDataAdapter
da.SelectCommand = cm
da.SelectCommand.Connection = cnn2
tableName2 = datVerFile.Substring(0, datVerFile.LastIndexOf("."))
da.Fill(DataSet1, tableName2)
DataGridView1.DataSource = DataSet1
DataGridView1.DataMember = tableName2
vb.net
------------------------------------------------------
::::Sempre a manetta in curva::::
------------------------------------------------------

paolo.codega Profilo | Newbie

hai msn messenger, che proviamo a controllare l'errore in real time?

poi postiamo la soluzione.

p.codega@virgilio.it
Paolo

pieroalampi Profilo | Expert

ok
ti ho aggiunto alla lista
grazie
vb.net
------------------------------------------------------
::::Sempre a manetta in curva::::
------------------------------------------------------

pieroalampi Profilo | Expert

hai news, io ancora non mriesco anche perche il tutto si blocca anche se trova celle vuote
vb.net 2005
------------------------------------------------------
::::Sempre a manetta in curva::::
------------------------------------------------------
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5