Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [VB.NET] Non stampa ultima riga di un DataGridView

    Scusate per il crossing posting ma non ho trovato niente di utile in masterdrive:

    Ciao a tutti,

    quando cerco di stampare una pagina non mi stampa l'ultima riga, ecco il mio codice:

    codice:
            Dim posX As Integer
    
            Dim posY As Integer = e.MarginBounds.Top
    
            Dim Rettangolo As Rectangle
    
            Dim Altezza As Integer = francesco.RowTemplate.Height
    
            Dim NormalFont As Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, FontStyle.Regular)
    
            Dim BoldFont As Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, FontStyle.Bold)
    
            Static righeStampate As Integer = 0
    
            Static pagineStampate As Integer = 0
    
            Dim righeTotali As Integer = francesco.Rows.Count
    
            Dim righePerPagina As Integer = CType(e.MarginBounds.Height / Altezza, Integer)
    
            Dim nPagine As Integer
    
            If righeTotali Mod righePerPagina > 0 Then
    
                nPagine = (righeTotali \ righePerPagina) + 1
    
            Else
    
                nPagine = (righeTotali \ righePerPagina)
    
            End If
    
            posX = CType((e.MarginBounds.Width - 360) / 2 + e.MarginBounds.Left, Integer)
    
            Dim dimensioneCella As System.Drawing.SizeF
    
            Dim incremento As Integer
    
            For Each colonna As DataGridViewColumn In francesco.Columns
    
                dimensioneCella = e.Graphics.MeasureString(colonna.HeaderText.ToString, NormalFont)
                incremento = CType((colonna.Width - dimensioneCella.Width) / 2, Integer)
    
                Rettangolo = New Rectangle(posX, posY, colonna.Width, Altezza)
    
                e.Graphics.DrawRectangle(Pens.Black, Rettangolo)
    
                e.Graphics.DrawString(colonna.HeaderText, BoldFont, Brushes.Black, posX + incremento, posY + 5)
                posX += colonna.Width
    
            Next
    
            posY += Altezza
    
            Dim testo As String
    
            For i As Integer = righeStampate To righeStampate + righePerPagina - 2
    
                posX = CType((e.MarginBounds.Width - 360) / 2 + e.MarginBounds.Left, Integer)
    
                If i = righeTotali - 1 Then
    
                    e.HasMorePages = False
                    Exit For
    
                End If
    
                For Each colonna As DataGridViewColumn In francesco.Columns
                    If francesco.Rows(i).Cells(colonna.Name).Value Is Nothing Then
                        testo = " "
                    Else
                        testo = francesco.Rows(i).Cells(colonna.Name).Value.ToString
                    End If
                    dimensioneCella = e.Graphics.MeasureString(testo.ToString, NormalFont)
                    incremento = CType((colonna.Width - dimensioneCella.Width) / 2, Integer)
                    Rettangolo = New Rectangle(posX, posY, colonna.Width, Altezza)
    
                    e.Graphics.DrawRectangle(Pens.Black, Rettangolo)
    
                    e.Graphics.DrawString(testo, NormalFont, Brushes.Black, posX + incremento, posY + 5)
                    posX += colonna.Width
    
                Next
    
                righeStampate += 1
                posY += Altezza
    
            Next
    
            pagineStampate += 1
    
            If pagineStampate < nPagine Then
    
                e.HasMorePages = True
                posY = e.MarginBounds.Top
    
            Else
    
                e.HasMorePages = False
                righeStampate = 0
                pagineStampate = 0
    
            End If
    Datagridview da applicazione: https://ibb.co/n1sJydv

    Pre-view della stampa: https://ibb.co/dfy1sCp

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Quasi certamente avrai un problema legato ai valori che usi nel ciclo, che fanno sì che questo si interrompa prima di raggiungere l'ultima riga da stampare.

    Se esegui il tuo programma facendo debugging, analizzando il valore delle tue variabili e come cambiano nel tempo man mano che la procedura viene eseguita, sicuramente il problema ti salterà all'occhio istantaneamente.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Non ho ancora capito il problema...

    Potrebbe essere la formattazione delle celle della datagridview?

  4. #4
    Quote Originariamente inviata da Manu2020 Visualizza il messaggio
    Non ho ancora capito il problema...

    Potrebbe essere la formattazione delle celle della datagridview?
    No,
    decisamente improbabile secondo comune logica
    anche solo leggendo il solo titolo del thread
    ( .....che è la sola cosa letta)
    Ultima modifica di sspintux; 10-09-2020 a 22:09

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Come ti è stato detto su masterdrive già c'è stato un problema simile
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Quote Originariamente inviata da Manu2020 Visualizza il messaggio
    Scusate per il crossing posting ma non ho trovato niente di utile in masterdrive:

    Ciao a tutti,

    quando cerco di stampare una pagina non mi stampa l'ultima riga, ecco il mio codice:
    ....
    ... sembra codice preso da qui , eventualmente controlla se corrisponde
    http://forum.masterdrive.it/visual-b...ridview-25705/

  7. #7
    Ho risolto, con il codice indicato qui sopra nin mi stampa l'ultima riga.

    Allora per provare ho fatto:

    codice:
    Dim righeTotali As Integer = francesco.Rows.Count - 1
    Il risultato è che non stampa l'ultima righa vuota.

    Allora ho messo:
    codice:
    Dim righeTotali As Integer = francesco.Rows.Count + 1
    e ha funzionato.

    ecco il codice completo:

    codice:
     Dim posX As Integer
    
            Dim posY As Integer = e.MarginBounds.Top
    
            Dim Rettangolo As Rectangle
    
            Dim Altezza As Integer = francesco.RowTemplate.Height
    
            Dim NormalFont As Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, FontStyle.Regular)
    
            Dim BoldFont As Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, FontStyle.Bold)
    
            Static righeStampate As Integer = 0
    
            Static pagineStampate As Integer = 0
    
            Dim righeTotali As Integer = francesco.Rows.Count + 1
    
            Dim righePerPagina As Integer = CType(e.MarginBounds.Height / Altezza, Integer)
    
            Dim nPagine As Integer
    
            If righeTotali Mod righePerPagina > 0 Then
    
                nPagine = (righeTotali \ righePerPagina) + 1
    
            Else
    
                nPagine = (righeTotali \ righePerPagina)
    
            End If
    
            posX = CType((e.MarginBounds.Width - 360) / 2 + e.MarginBounds.Left, Integer)
    
            Dim dimensioneCella As System.Drawing.SizeF
    
            Dim incremento As Integer
    
            For Each colonna As DataGridViewColumn In francesco.Columns
    
                dimensioneCella = e.Graphics.MeasureString(colonna.HeaderText.ToString, NormalFont)
                incremento = CType((colonna.Width - dimensioneCella.Width) / 2, Integer)
    
                Rettangolo = New Rectangle(posX, posY, colonna.Width, Altezza)
    
                e.Graphics.DrawRectangle(Pens.Black, Rettangolo)
    
                e.Graphics.DrawString(colonna.HeaderText, BoldFont, Brushes.Black, posX + incremento, posY + 5)
                posX += colonna.Width
    
            Next
    
            posY += Altezza
    
            Dim testo As String
    
            For i As Integer = righeStampate To righeStampate + righePerPagina - 2
    
                posX = CType((e.MarginBounds.Width - 360) / 2 + e.MarginBounds.Left, Integer)
    
                If i = righeTotali - 1 Then
    
                    e.HasMorePages = False
                    Exit For
    
                End If
    
                For Each colonna As DataGridViewColumn In francesco.Columns
                    If francesco.Rows(i).Cells(colonna.Name).Value Is Nothing Then
                        testo = " "
                    Else
                        testo = francesco.Rows(i).Cells(colonna.Name).Value.ToString
                    End If
                    dimensioneCella = e.Graphics.MeasureString(testo.ToString, NormalFont)
                    incremento = CType((colonna.Width - dimensioneCella.Width) / 2, Integer)
                    Rettangolo = New Rectangle(posX, posY, colonna.Width, Altezza)
    
                    e.Graphics.DrawRectangle(Pens.Black, Rettangolo)
    
                    e.Graphics.DrawString(testo, NormalFont, Brushes.Black, posX + incremento, posY + 5)
                    posX += colonna.Width
    
                Next
    
                righeStampate += 1
                posY += Altezza
    
            Next
    
            pagineStampate += 1
    
            If pagineStampate < nPagine Then
    
                e.HasMorePages = True
                posY = e.MarginBounds.Top
    
            Else
    
                e.HasMorePages = False
                righeStampate = 0
                pagineStampate = 0
    
            End If
    probabilmente questa serie di "Stampare datagridview" finirà ����

  8. #8
    Quote Originariamente inviata da Manu2020 Visualizza il messaggio
    ...

    Il risultato è che non stampa l'ultima righa vuota.
    ...
    ma dici quella con l'asterisco ?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.