Visual Basic para Aplicaciones - imprimir datagrid

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil

imprimir datagrid

Publicado por luis (1 intervención) el 06/03/2017 19:14:04
hola soy nuevo en el foro,
necesito imprimir un datagridview y en la impresión salgan las columnas y las filas con los margenes
este es mi código.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
yPos = topMargin + (count * printFont.GetHeight(e.Graphics))
e.Graphics.DrawString(texto, printFont, System.Drawing.Brushes.Black, 10, yPos)
' Dejamos una línea de separación
count += 2
 
While count < linesPerPage AndAlso f < DataGridView1.Rows.Count
    row = DataGridView1.Rows(f)
    texto = ""
    For Each celda As System.Windows.Forms.DataGridViewCell In row.Cells
        'Comprobamos que la celda tenga algún valor, en caso de 
        'permitir añadir filas esto es muy importante
        If celda.Value IsNot Nothing Then
            texto += vbTab + celda.Value.ToString()
        End If
    Next
    ' Calculamos la posición en la que se escribe la línea
    yPos = topMargin + (count * printFont.GetHeight(e.Graphics))
 
    ' Escribimos la línea con el objeto Graphics
    e.Graphics.DrawString(texto, printFont, System.Drawing.Brushes.Black, 10, yPos)
    ' Incrementamos los contadores
    count += 1
    f += 1
End While
 
yPos = topMargin + (count * printFont.GetHeight(e.Graphics))
e.Graphics.DrawString(texto, printFont, System.Drawing.Brushes.Black, 10, yPos)
' Dejamos una línea de separación
count += 2
'se agrego despues
Dim i As Integer = Nothing
' Recorremos las filas del DataGridView hasta que llegemos
' a las líneas que nos caben en cada página o al final del grid.
While count < linesPerPage AndAlso i < DataGridView1.Rows.Count
    row = DataGridView1.Rows(i)
    texto = ""
    For Each celda As System.Windows.Forms.DataGridViewCell In row.Cells
        ' For f As Integer = 0 To DataGridView1.RowCount - 2
 
        'Comprobamos que la celda tenga algún valor, en caso de 
        ' permitir añadir filas esto es muy importante
        If celda.Value IsNot Nothing Then
            texto += vbTab + celda.Value.ToString()
        End If
    Next
 
 
    ' Calculamos la posición en la que se escribe la línea
    yPos = topMargin + (count * printFont.GetHeight(e.Graphics))
 
    ' Escribimos la línea con el objeto Graphics
    e.Graphics.DrawString(texto, printFont, System.Drawing.Brushes.Black, 10, yPos)
    ' Incrementamos los contadores
    count += 1
    i += 1
End While
 
' Una vez fuera del bucle comprobamos si nos quedan más filas
' por imprimir, si quedan saldrán en la siguente página
If i < DataGridView1.Rows.Count Then
    e.HasMorePages = True
Else
    ' si llegamos al final, se establece HasMorePages a
    ' false para que se acabe la impresión
    e.HasMorePages = False
    ' Es necesario poner el contador a 0 porque, por ejemplo si se hace
    ' una impresión desde PrintPreviewDialog, se vuelve disparar este
    ' evento como si fuese la primera vez, y si i está con el valor de la
    ' última fila del grid no se imprime nada
    i = 0
End If

muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder