Una pregunta rápida antes de entrar al tema. Como tomo el valor de la celda a la que le hice click en un datagridviw? Vi algo de e.RowIndex e.ColumnIndex pero no me funcionan.
Bueno ahora si recién uso este control por lo cual el código que les mostraré lo encontré por Internet y lo que mas o menos entendí lo modifiqué a mi gusto.
Código vb:
Ver originalSub 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
Case 0 : digito = 12
Case 1 : digito = 12
Case 2 : digito = 12
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
Sub RellenarEsp2(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
Case 0 : digito = 12
Case 1 : digito = 12
Case 2 : digito = 12
Case 3 : digito = 12
Case 4 : digito = 12
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 System.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 & "Contabilidad Mensual " & vbCrLf & vbCrLf & vbCrLf
LString = LString & "Fecha de impresión: " & Today & vbCrLf & vbCrLf & vbCrLf & _
"------------------------------------------------------------------------------------------------" & vbCrLf & vbCrLf & vbCrLf
LString = LString & "Estadías: " & ComboBox2.Text & "" & vbCrLf & vbCrLf & vbCrLf
LString = LString & "Tipo Habitación Total" & vbCrLf & vbCrLf
count = 0
For Fil = 0 To DataGridView2.Rows.Count - 1
For Col = 0 To DataGridView2.Columns.Count - 1
Call RellenarEsp(DataGridView2.Item(Col, Fil).Value.ToString, Col)
LString = LString & ncadena & Space(3)
Next
count += 1
LString = LString & vbCrLf
Next
LString = LString & "" & vbCrLf
LString = LString & "Total: " & TextBox3.Text & "" & vbCrLf & vbCrLf & vbCrLf & _
"------------------------------------------------------------------------------------------------" & vbCrLf & vbCrLf & vbCrLf
LString = LString & "Reservas: " & ComboBox3.Text & "" & vbCrLf & vbCrLf & vbCrLf
LString = LString & "Tipo Habitación Depósito Efectivo Total" & vbCrLf & vbCrLf
count = 0
For Fil = 0 To DataGridView1.Rows.Count - 1
For Col = 0 To DataGridView1.Columns.Count - 1
Call RellenarEsp2(DataGridView1.Item(Col, Fil).Value.ToString, Col)
LString = LString & ncadena & Space(3)
Next
count += 1
LString = LString & vbCrLf
Next
LString = LString & "" & vbCrLf
LString = LString & "Depósitos: " & TextBox1.Text & "" & vbCrLf
LString = LString & "Efectivo: " & TextBox2.Text & "" & vbCrLf
LString = LString & "Total: " & TextBox4.Text & ""
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 Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If DataGridView2.Rows.Count > 0 And DataGridView1.Rows.Count > 0 Then
Try
printFont = New Font("Courier new", 11)
PrintPreviewDialog1.StartPosition = FormStartPosition.CenterParent
PrintPreviewDialog1.Width = 600
PrintPreviewDialog1.Height = 700
PrintPreviewDialog1.ShowDialog()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End If
End Sub
A lo que hago click en el botón se muestra la vista previa. Para probarlo por completo puse varios datos a ver si mostraba mas hojas pero solo me muestra una sin terminar.
Aquí una imagen para que entiendan mejor.
Espero puedan ayudarme para que la hoja se corte a la misma altura de arriba y continúe en la siguiente hoja aunque la altura en la parte de arriba de la hoja cuando se corta es mucha pero con poco datos se ve bien. Y por si acaso hay forma de poner una imagen en la esquina superior derecha y una en la esquina superior izquierda? Hay forma? Aunque si no se puede no hay problema solo sería para diseño.
Gracias por su atención.
Saludos.