Ho 2 SUB: il Load e la fase di stampa,
tuttavia non funziona, ovvero l'anteprima di stampa non rispetta gli stili che vedo assegnati al datagrid, ed è proprio in fase di stampa che mi interessano
Sub Form_Elenco_Contribuenti_Load
PrintDocument1.DefaultPageSettings.Landscape = True
Me.PrintPreviewDialog1.WindowState = FormWindowState.Maximized
Me.PrintPreviewDialog1.PrintPreviewControl.Zoom = 1
Me.PrintPreviewDialog1.ShowDialog(Me)
Dim CodiceStyle As New DataGridTextBoxColumn
CodiceStyle.MappingName = "COD_CONTRIB"
CodiceStyle.HeaderText = "CODICE"
CodiceStyle.Width = 50
gridStyle.GridColumnStyles.Add(CodiceStyle)
Dim CognomeStyle As New DataGridTextBoxColumn
CognomeStyle.MappingName = "COGNOME_CONTRIB"
CognomeStyle.HeaderText = "COGNOME"
CognomeStyle.Width = 180
gridStyle.GridColumnStyles.Add(CognomeStyle)
Dim NomeStyle As New DataGridTextBoxColumn
NomeStyle.MappingName = "NOME_CONTRIB"
NomeStyle.HeaderText = "NOME"
NomeStyle.Width = 180
gridStyle.GridColumnStyles.Add(NomeStyle)
Dim CodFisStyle As New DataGridTextBoxColumn
CodFisStyle.MappingName = "COD_FIS_CONTRIB"
CodFisStyle.HeaderText = "CODICE FISCALE"
CodFisStyle.Width = 180
gridStyle.GridColumnStyles.Add(CodFisStyle)
Dim PIVAStyle As New DataGridTextBoxColumn
PIVAStyle.MappingName = "PART_IVA_CONTRIB"
PIVAStyle.HeaderText = "PARTITA IVA"
PIVAStyle.Width = 100
gridStyle.GridColumnStyles.Add(PIVAStyle)
Dim PFPGStyle As New DataGridTextBoxColumn
PFPGStyle.MappingName = "SW_PF_PG_CONTRIB"
PFPGStyle.HeaderText = "PERSONA F./G."
PFPGStyle.Width = 100
gridStyle.GridColumnStyles.Add(PFPGStyle)
DataGridElenco.TableStyles.Add(gridStyle)
PrintDocument1_PrintPage
Try
Dim SQLstring As String = ""
Dim conn As MySQLDriverCS.MySQLConnection = Stringaconnessione
conn.Open()
SQLstring = "SELECT *,DATE_FORMAT(DAT_NAS_CONTRIB,""%d-%m-%Y"") as DATA_ITA FROM contribuenti"
Dim data_set As New DataSet("Contribuenti")
Dim da As New MySQLDriverCS.MySQLDataAdapter(SQLstring, conn)
da.Fill(data_set, "Contribuenti")
DataGridElenco.DataSource = data_set
'DataGridElenco.DataMember = data_set.Tables(0).TableName
DataGridElenco.DataMember = "Contribuenti"
Static RigheStampate As Integer
Static PagineStampate As Integer
Dim Ds As DataSet = CType(DataGridElenco.DataSource, DataSet)
Dim Table2 As DataTable = Ds.Tables(0)
Dim RigheTotali As Integer = Table2.Rows.Count
Dim ControllaPagine As Boolean = True
'Crea l'intestazione
Dim Rect As Rectangle
Dim ColCorrente As Integer = 0 'Indica la colonna corrente
Dim Top = e.MarginBounds.Top 'Top = Margine superiore
Dim Left = e.MarginBounds.Left 'Left = Margine sinistro
Dim Height As Integer = 25
'Quante righe posso stampare su un foglio?
Dim MaxRighe As Integer = e.MarginBounds.Height / Height
'In totale quante pagine
Dim MaxPagine As Integer = Table2.Rows.Count / MaxRighe
Dim BrHeader As SolidBrush = New SolidBrush(Color.LightGray)
Dim HFont As Font = New Font("Verdana", 8)
Dim Gt As DataColumn
For Each Gt In Table2.Columns
'Testo dell'Header
Dim ColText As String = Gt.ColumnName
'Rettangolo dell'Header corrente
Rect = New Rectangle(Left, Top, 50, Height)
'Colora l'Header
e.Graphics.FillRectangle(BrHeader, Rect)
'Linee dell'Intestazione
e.Graphics.DrawRectangle(New Pen(Color.Gray, 1), Rect)
'Disegna il testo dell'Header
e.Graphics.DrawString(ColText, HFont, Brushes.Black, Left, _
Top + (e.Graphics.MeasureString(ColText, HFont).Height / 2))
'Calcola la prossima coordinata Left
Left += 50
Next
'Stampa la righe
Dim Dc As DataColumn
Dim Dr As DataRow
Dim BrRow As SolidBrush = New SolidBrush(Color.White) 'New SolidBrush(DG.TableStyles(0).BackColor)
Dim PnRow As Pen = New Pen(Color.Gray) ' New Pen(DG.TableStyles(0).GridLineColor)
Dim RigaCorrente As Integer = 0
For RigaCorrente = RigheStampate To RigheStampate + MaxRighe
Left = e.MarginBounds.Left
Top += Height
For Each Gt In Table2.Columns 'DG.TableStyles(0).GridColumnStyles
'Testo della cella
Dim CelText As String = _
Table2.Rows(RigaCorrente)(Gt.ColumnName).ToString
'Rettangolo dell'Intestazione corrente
Rect = New Rectangle(Left, Top, 50, Height)
'Colora lo sfondo della cella
e.Graphics.FillRectangle(BrRow, Rect)
'Disegna le linee del rettangolo della cella
e.Graphics.DrawRectangle(PnRow, Rect)
'Disegna il testo della cella
e.Graphics.DrawString(CelText, DataGridElenco.Font, Brushes.Black, Left, _
Top + (e.Graphics.MeasureString(CelText, DataGridElenco.Font).Height / 2))
'Calcola la prossima coordinata Left
Left += 50 'Gt.Width
Next
'Incrementa il contatore delle righe stampate
RigheStampate += 1
'Ci sono altre righe?
If RigheStampate >= Table2.Rows.Count Then
ControllaPagine = False
e.HasMorePages = False
'Azzera le variabili Static per un successivo utilizzo
RigheStampate = 0
PagineStampate = 0
Exit For
End If
Next RigaCorrente
'Devo controllare le pagine se non ho ancora terminato il numero di righe da
'Stampare
If ControllaPagine Then
'Incrementea il contatore delle pagine stampate
PagineStampate += 1
'Controlla se ci sono altre pagine da stampare...
If PagineStampate < MaxPagine Then
'Ci sono altre pagine
e.HasMorePages = True
Else
'Fine delle pagine
e.HasMorePages = False
'Azzera le variabili Static per un successivo utilizzo
RigheStampate = 0
PagineStampate = 0
End If
End If
'Distrugge gli oggetti
BrHeader.Dispose()
BrRow.Dispose()
PnRow.Dispose()
conn.Close()
Catch Ex As Exception
'E' stata sollevata un eccezione...
MessageBox.Show(Ex.Message, Ex.Source, MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
GRAZIE