VB.NET e Crystal Report 2008

martedì 19 aprile 2011 - 14.45
Tag Elenco Tags  VB.NET  |  .NET 3.0  |  Windows 7  |  Visual Studio 2008

matpez Profilo | Newbie

Ciao a tutti, sto convertendo il lancio della mia applicazione dal Crystal 9 (VB6) al Crystal 2008 (.NET)

Tendenzialmente ho due bottoni, uno per l'anteprima e uno per la stampa diretta. Per fare la stampa diretta in precedenza usavo la dll CRAXDRT e ora invece utilizzo il namespace ReportDocument.

Qui salta fuori il problema: una volta si poteva fare venire fuori la PrintDialog (gestita dalla CRAXDRT) dove si sceglieva la stampante e si imposta tutti i parametri... c'è ancora possibilità di farlo?

Siccome ho sbattuto un po' la testa e non ho trovato nulla, mi son detto: "Perchè non uso la PrintDialog di VB.NET ???" Così funziona ma nn riesco assolutamente e leggere alcuni valori settati nella PrintDialog, per esempio l'opzione che dice di stampare N pagine per foglio.

Non so se sto utilizzando il metodo corretto, io faccio così:

Dim crdReport As New ReportDocument crdReport.Load("C:\prova.rpt") Dim Res As DialogResult = DialogResult.OK Dim Copies As Short =1 Dim Collated As Boolean = False Dim FromPage As Integer = 0 Dim ToPage As Integer = 0 If m_Print.PrinterSetup = True Then Dim dlgPrint As New PrintDialog dlgPrint.AllowSomePages = True dlgPrint.UseEXDialog = True Res = dlgPrint.ShowDialog(m_Print.OwnerForm) If Res = Windows.Forms.DialogResult.OK Then With dlgPrint.PrinterSettings Copies = .Copies Collated = .Collate FromPage = .FromPage ToPage = .ToPage crdReport.PrintOptions.PrinterName = .PrinterName End With End If End If If Res = Windows.Forms.DialogResult.OK Then crdReport.PrintToPrinter(Copies, Collated, FromPage, ToPage) End If

freeteo Profilo | Guru

Ciao,
il codice che hai scritto sembra corretto, l'unica cosa che non ho mai usato è
dlgPrint.ShowDialog(m_Print.OwnerForm)

ovvero passare la form per renderla modale rispetto a quella...tipicamente uso l'overload senza parametri del metodo ShowDialog() e poi riesco ad avere accesso alle impostazioni che l'utente mette in quella maschera.
Hai provato a fare anche questa modalità?

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

matpez Profilo | Newbie

Si si ho provato, ho deciso di farlo modale per evitare che se qlc preme sulla form che chiama la stampa, la dialog passi in secondo piano.

Il problema è che usando la dialog, a parte quei 4 valori che pesco, non so come fare con gli altri. Cioè, se una volta che apro la dialog di stampa, vado nella proprietà di stampa e dico che mi stampi 2 pagine per foglio, quando do conferma il report viene stampanto su 1 pagina per foglio.


In VB6, mi appoggiavo alla CRAXDRT di Crystal 9 e loro giù mettevano a disposizione un dialog per selezionare una stampante (senza usare quella di VB) e faceva tutto lei.
Esiste ancora che tu sappia? O se stampo diretto senza passare dall'anteprima, devo fare tutto il giro descritto nel codice del post precedente?????

Grazie

freeteo Profilo | Guru

>In VB6, mi appoggiavo alla CRAXDRT di Crystal 9 e loro giù mettevano
>a disposizione un dialog per selezionare una stampante (senza
>usare quella di VB) e faceva tutto lei.
puoi postare un pezzo del codice che usavi?


>Esiste ancora che tu sappia? O se stampo diretto senza passare
>dall'anteprima, devo fare tutto il giro descritto nel codice
>del post precedente?????
mah sai, quelle impostazioni sono "standard", ossia di fatto supportate da qualsiasi stampante...la possibilità di stampare 2 su un foglio non ce l'hanno tutte le stampanti, mi sa che è qualcosa relativo alla tua, perciò non credo sia possibile...ma non ho esperienza diretta in merito.

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

matpez Profilo | Newbie

In VB6 con Crystal Report 9 facevo così:
Dim crxApplication As CRAXDRT.Application Dim crxReport As CRAXDRT.Report Dim lRet As Long Set crxApplication = New CRAXDRT.Application Set crxReport = crxApplication.OpenReport(m_PathReport) With crxReport lRet = .PrinterSetupEx() If lRet = 0 Then Call .PrintOutEx(False, v1) End If End With


Tu hai ragione, quella è una funzionalità che dipende dai drivers della stapante. Mi sono ostinato a cercare di risolvere il problema perchè se il report passa dall'anteprima con il viewer e faccio stampa, esce la dialog per la selezione di stampa, se li vado nelle proprietà della stampante e dico 2 fogli per pagina lo prende correttamente. Quindi mi sono detto, se quelli di crystal lo fanno, perchè nn hanno rilasciato un modo per farlo anche se vai in stampa diretta?!?!?!? bha...

freeteo Profilo | Guru

>Quindi mi sono detto, se quelli di crystal
>lo fanno, perchè nn hanno rilasciato un modo per farlo anche
>se vai in stampa diretta?!?!?!? bha...
secondo me è il problema è che essendo della stampante quando si apre la maschera di impostazioni propria la stampante viene settata per fare in quel modo tramite il driver e poi crystal un attimo dopo stampa su quell'impostazione e quindi di fatto fa quello che hai impostato.
Ma effettivamente non è crystal a farlo, è il driver appunto appena impostato in quel modo tramite la sua maschera.

Se stampi direttamente non riesci perchè lui la butta fuori dritta, e il driver di default è impostato in maniera normale...potresti vedere se puoi farti un'ulteriore stampante magari che usi solo tu da programma con le impostazioni che ti interessano in modo da stampare sempre diretto da crystal, ma su un settaggio "preconfigurato" su come vuoi tu...

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5