none
Impresión de datagridview

    Pregunta

  • Buenos dias.... mi consulta esl a siguiente, estoy realizando una impresion de un datagridview...

    Visualbasic express 2012...

    pero al imprimir me manda como 200 paginas de la pag 1 nada mas... en que estoy fallando...?

    Private Sub LISTABindingNavigatorSaveItem_Click(sender As Object, e As EventArgs) Handles LISTABindingNavigatorSaveItem.Click
            Me.Validate()
            Me.LISTABindingSource.EndEdit()
            Me.TableAdapterManager.UpdateAll(Me.STOCKDataSet)
    
        End Sub
    
        Private Sub Form4_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
            Me.LISTATableAdapter.Fill(Me.STOCKDataSet.LISTA)
    
        End Sub
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            PrintDocument1.Print()
        End Sub
    
        Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    
            Dim i As Integer = 0
    
            Dim printFont As System.Drawing.Font = New Font("Arial", 10)
            Dim topMargin As Double = e.MarginBounds.Top
            Dim yPos As Double = 0
            Dim linesPerPage As Double = 0
            Dim count As Integer = 0
            Dim texto As String = ""
            Dim row As System.Windows.Forms.DataGridViewRow
    
    
            linesPerPage = e.MarginBounds.Height / printFont.GetHeight(e.Graphics)
    
    
            Dim header As DataGridViewHeaderCell
            For Each column As DataGridViewColumn In LISTADataGridView.Columns
                header = column.HeaderCell
                texto += vbTab + header.FormattedValue.ToString()
            Next
    
            yPos = topMargin + (count * printFont.GetHeight(e.Graphics))
            e.Graphics.DrawString(texto, printFont, System.Drawing.Brushes.Black, 10, yPos)
    
            count += 2
    
           
            While count < linesPerPage AndAlso i < LISTADataGridView.Rows.Count
                row = LISTADataGridView.Rows(i)
                texto = ""
                For Each celda As System.Windows.Forms.DataGridViewCell In row.Cells
                 
                    If celda.Value IsNot Nothing Then
                        texto += vbTab + celda.Value.ToString()
                    End If
                Next
    
                yPos = topMargin + (count * printFont.GetHeight(e.Graphics))
    
    
                e.Graphics.DrawString(texto, printFont, System.Drawing.Brushes.Black, 10, yPos)
    
    
                count += 1
                i += 1
            End While
    
          
            If i < LISTADataGridView.Rows.Count Then
                e.HasMorePages = True
            Else
                
                e.HasMorePages = False
                
                i = 0
            End If
        End Sub
    
    
    
    
        Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
            Me.Close()
        End Sub
    
    
    End Class

    me darian una mano si no es molestia gracias

    jueves, 12 de enero de 2017 8:55

Respuestas

  •     Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
            Static i As Integer = 0
    

    el evento es invocado por Print, una vez para cada página del documento.

    Cuando i es static, el valor de la línea es preservado para el próximo llamado y entonces continuar la impresión desde allí.

    Cuando sales definitivamente, i recupera su valor de 0.

    Creo que sería mejor sacar a la variable i del bloque del evento y declararla a nivel de la clase. Sería un poco más flexible, para los casos en que quieras comenzar desde otra línea, o para resetarla.

    jueves, 12 de enero de 2017 11:25

Todas las respuestas

  •     Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
            Static i As Integer = 0
    

    el evento es invocado por Print, una vez para cada página del documento.

    Cuando i es static, el valor de la línea es preservado para el próximo llamado y entonces continuar la impresión desde allí.

    Cuando sales definitivamente, i recupera su valor de 0.

    Creo que sería mejor sacar a la variable i del bloque del evento y declararla a nivel de la clase. Sería un poco más flexible, para los casos en que quieras comenzar desde otra línea, o para resetarla.

    jueves, 12 de enero de 2017 11:25
  • excelente!!!!!!!!! muchas gracias funciono tal cual
    jueves, 12 de enero de 2017 15:07