Visual Basic.NET - Imprimir datagrid

 
Vista:

Imprimir datagrid

Publicado por Edgar (23 intervenciones) el 20/06/2007 16:33:26
Hola amigos del foro como estan, espero me puedan ayudar con esto, necesito o deseo imprimir el conteniigo de un datagrid, garcias de antemano

saludos desde Lima Peru
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

RE:Imprimir datagrid

Publicado por Harold V (411 intervenciones) el 20/06/2007 22:03:37
Hola, tambien soy de Lima pero no vivo en Peru ahora, es un placer poder ayudarte, espero sea asiiiiiiiiii........

Este sencillo ejemplo utiliza:

DataGridView llamado datagvDatos
Boton llamado cmdPrint
PrintPreviewDialog1
PrintDocument1

Este ejemplo obtiene los datos de un datagridview el cual lo puedes imprimir
para este ejemplo utilizo una consulta con 3 columna de una tabla, para hacerlo mas sencillo.....

Este codigo pegalo en un form en blanco, modifica la cadena sql de conexion.
Existe un Sub llamado Rellenar, que hace????, rellena con espacios en blanco, dependiendo de la cantidad que hayas dado en la variable digito.

Si por ejemplo el 1er valor de la columna tiene 4 caracteres y le pasas a digito 6
entonces insertara 2 caracteres en blanco. esto es para darle formato en la salida en la impresion, de esta manera todos los datos estan alineados.

Importante, debes insertar las columnas que desees en el Sub Rellenar (dentro del select si deseas mas de 3 columnas que son las que soporta este ejemplo)


Imports System.Data.SqlClient

Public Class Form1

Private printFont As Font
Dim ncadena As String
Dim count As Integer = 0

Dim dst As DataSet
Dim da As New SqlDataAdapter
Dim conectar As New SqlConnection


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

conectar.ConnectionString = "Data Source=127.0.0.1;DataBase=ISAliments;Integrated Security=SSPI"

Dim cmd As New SqlCommand
conectar.Open()
cmd.Connection = conectar
cmd.CommandText = "Select IdCliente,NombreCliente,NumeroIdentidad from Clientes"
cmd.CommandType = CommandType.Text
cmd.ExecuteNonQuery()

da.SelectCommand = cmd
dst = New DataSet
da.Fill(dst, "Clientes")

Me.datagvDatos.DataSource = dst.Tables(0)

PrintPreviewDialog1.Document = PrintDocument1
End Sub

Sub RellenarEsp(ByVal str As String, ByVal columna As Int32)
Dim r As Int32
Dim cad As String = ""
Dim digito As Int32
ncadena = ""
Dim numcif As Int32 = str.Length

Select Case columna ' Obtiene los valores de 3 columnas
Case 0 : digito = 10 'espacios q contendra la 1era columna en la hoja
Case 1 : digito = 36 'espacios q contendra la 2da columna en la hoja
Case 2 : digito = 12 'espacios q contendra la 3era columna en la hoja
End Select
If numcif > digito Then
ncadena = Mid(str, 1, digito)
Else
For r = 1 To (digito - numcif)
cad = " "
ncadena = ncadena & cad
Next
ncadena = str & ncadena
End If

End Sub

Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
Dim linesPerPage As Single = 0
Dim yPos As Single = 0
Dim leftMargin As Single = 30
Dim topMargin As Single = e.MarginBounds.Top - 50
Dim line As String = Nothing
linesPerPage = e.MarginBounds.Height / printFont.GetHeight(e.Graphics)

Dim Fil, Col As Int32
Dim LString As String = ""
LString = LString & "Documento interno del almacén " & vbCrLf & vbCrLf & vbCrLf & vbCrLf
LString = LString & " INFORMACION DE CLIENTES " & vbCrLf & vbCrLf & vbCrLf & vbCrLf
LString = LString & " Fecha:" & Today & vbCrLf & vbCrLf & vbCrLf
LString = LString & "IdCliente Nombre DNI " & vbCrLf & _
"------------------------------------------------------------------------------------------------" & vbCrLf & vbCrLf
count = 0
For Fil = 0 To datagvDatos.Rows.Count - 1
For Col = 0 To datagvDatos.Columns.Count - 1
Call RellenarEsp(datagvDatos.Item(Col, Fil).Value.ToString, Col)
LString = LString & ncadena & Space(3)
Next
count += 1
LString = LString & vbCrLf
Next
yPos = topMargin + (count * printFont.GetHeight(e.Graphics))
e.Graphics.DrawString(LString, printFont, Brushes.Black, leftMargin, yPos, New StringFormat())
If Not (line Is Nothing) Then
e.HasMorePages = True
Else
e.HasMorePages = False
End If
End Sub

Private Sub cmdPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdPrint.Click
If datagvDatos.Rows.Count > 0 Then
Try
printFont = New Font("Courier new", 9)

'Con la linea siguiente puedes imprimir obviando mostrar la vista previa
'para eso debes deshabilitar las 2 lineas que le preceden
'PrintDocument1.Print()

'Vemos una vista previa de nuestra impresion sin imprimir.
PrintPreviewDialog1.Width = 600
PrintPreviewDialog1.ShowDialog()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End If
End Sub

End Class
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Olvide esto

Publicado por Harold V (411 intervenciones) el 20/06/2007 22:14:09
Olvidaba un detalle!!!!!!!!

Cuando le pasamos al datasource del datagridview el dataset, por defecto nos inserta una fila al final, y cuando el procedimiento recorre las filas para obtener los datos de ldatagridview salta un error porque hay una fila sin datos.

Entonces para corregir esto le damos este valor a la propiedad AllowUserToAddRows

datagvDatos.AllowUserToAddRows =False

De esta manera el datagridview no insertara la fila en blanco al final y el procedimiento para obtener los datos recorrera las filas que contiene tu dataset solamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Imprimir datagrid

Publicado por Edgar (23 intervenciones) el 20/06/2007 22:31:59
Amigo muchas gracias por tu ayuda, pero hay algo que me olvide decir, estoy usando un web form y no form y creo que tu ejemplo no se aplica a lo que necesito, mas se aplica a un form creo yo, he investigado en internet y he encontrado tu mismo ejemplo, pero creo q en un web form no puedes hacer referencia al PrintDocument, si me equivoco ayudame, soy un poco nuevo en esto

gracias de todos modos y nuevamente
saludos desde Lima Peru
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Imprimir datagrid

Publicado por Marlon Gámez (1 intervención) el 26/08/2019 02:49:58
Muchas gracias por el dato. Una consulta. ¿Como hago para agregar mas datos debajo del datagrid que me muestra en el ticket? como por ejemplo poner, el subtotal, cambio, iva, y el pie de pagina. ¿Como calcular la distancia que hay del datagrid hacia abajo?
Gracias.
Por cierto hice un cambio, use e.graphic en vez del LString para definir manualmente las posiciones.
solamente la tabla la deje con el LString, pero ahora quiero colocar debajo otros datos.
Saludos desde Nicaragua.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar