Visual Studio 2019 vb.net Stampa DataGridView

lunedì 16 marzo 2020 - 11.42

Pacifico Profilo | Newbie

ho una DataGridView con tre colonne di cui una con la data ridotta.
Ho inserito la funzione stampa inserendo il codice di Hidden al PrintDocument che funziona.
Gradirei sapere se è possibile avere due modifiche:
> Inserire la data ridotta possibilmente a destra;
> avere al centro del foglio il DataGridView
Reinserisco il codice di Hidden:

Try
Static RigheStampate As Integer
Static PagineStampate As Integer
Static MiePagine As Integer

Dim RigheTotali As Integer = DataGridView1.Rows.Count
Dim ControllaPagine As Boolean = True

Dim Rect As Rectangle
Dim RectQuality As Rectangle
Dim ColCorrente As Integer = 0

Dim Top As Integer = 25 ' e.MarginBounds.Top
Dim Left As Integer = 25 ' e.MarginBounds.Left
Dim Height As Integer = DataGridView1.RowTemplate.Height

Dim MaxRighe As Integer = e.MarginBounds.Height / Height
Dim MaxPagine As Integer = DataGridView1.Rows.Count / MaxRighe
Dim MPX As Integer = (DataGridView1.Rows.Count \ MaxRighe) + 1

Dim BrHeader As SolidBrush = New SolidBrush(Color.Azure)
' .Gray)
Dim Hfont As Font = DataGridView1.Font
Dim Fc As String
Dim Fr As String

For Each col As DataGridViewColumn In DataGridView1.Columns
Fc = ""
Dim ColText As String = col.HeaderText
Dim Sz As System.Drawing.SizeF = e.Graphics.MeasureString(ColText, Hfont)

Dim dataStampa As String, oraCorrente As String

While Sz.Width > col.Width
ColText = ColText.Remove(ColText.Length - 1, 1)
Sz = e.Graphics.MeasureString(ColText + "...", Hfont)
Fc = "..."
End While
Rect = New Rectangle(Left, Top, col.Width, Height)

dataStampa = Date.Today.ToString
oraCorrente = FormatDateTime(Now, DateFormat.ShortTime)

e.Graphics.DrawString(ColText + Fc, Hfont, Brushes.Black, Left, Top + (e.Graphics.MeasureString(ColText, Hfont).Height / 2))
Left += col.Width
If Left > e.PageBounds.Right - 25 Then
MsgBox("Attenzione i campi da stampare sono troppi e la stampa non sarà effettuata correttamente" + Chr(13) + Chr(13) + "Possibili Soluzioni:" + Chr(13) + " .Impostare la stampa in modo Orizzontale" + Chr(13) + " .Selezionare un foglio di dimensioni maggiori" + Chr(13) + " .Ridurre il numero di campi da stampare", MsgBoxStyle.Information)
Exit For
End If
Next

Dim BrRow As SolidBrush = New SolidBrush(Color.Transparent)
Dim PnRow As Pen = New Pen(Color.Black)
Dim RigaCorrente As Integer = 0

For RigaCorrente = RigheStampate To RigheStampate + MaxRighe
Left = 25 ' e.MarginBounds.Left
Top += Height
For Each col As DataGridViewColumn In DataGridView1.Columns
Fr = ""
Dim CelText As String = DataGridView1.Rows(RigaCorrente).Cells(col.Name).Value.ToString
Dim Sz As System.Drawing.SizeF = e.Graphics.MeasureString(CelText, Hfont)
While Sz.Width > col.Width
CelText = CelText.Remove(CelText.Length - 1, 1)
Sz = e.Graphics.MeasureString(CelText + "...", Hfont)
Fr = "..."
End While
Rect = New Rectangle(Left, Top, col.Width, Height)
e.Graphics.FillRectangle(BrRow, Rect)
e.Graphics.DrawRectangle(PnRow, Rect)
e.Graphics.DrawString(CelText + Fr, Hfont, Brushes.Black, Left, Top + (e.Graphics.MeasureString(CelText, Hfont).Height / 2))
Left += col.Width
Next
RigheStampate += 1

MiePagine = PagineStampate + 1
If RigheStampate >= DataGridView1.Rows.Count Then
ControllaPagine = False
e.HasMorePages = False
RigheStampate = 0
PagineStampate = 0
Exit For
End If
Next RigaCorrente

If ControllaPagine Then
PagineStampate += 1

If PagineStampate < MaxPagine Then
e.HasMorePages = True
Else
e.HasMorePages = False
RigheStampate = 0
PagineStampate = 0
End If
End If

BrHeader.Dispose()
BrRow.Dispose()
PnRow.Dispose()

Catch ex As Exception
MessageBox.Show(ex.Message, ex.Source, MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub

Anticipatamente ringrazio, saluto.
Domenico.
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-2022
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5