Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/02/2013, 00:40
Allan2904
 
Fecha de Ingreso: enero-2013
Ubicación: Guayaquil - Ecuador
Mensajes: 17
Antigüedad: 11 años, 2 meses
Puntos: 0
Pregunta Imprimir mas de una hoja

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 original
  1. Sub RellenarEsp(ByVal str As String, ByVal columna As Int32)
  2.         Dim r As Int32
  3.         Dim cad As String = ""
  4.         Dim digito As Int32
  5.         ncadena = ""
  6.         Dim numcif As Int32 = str.Length
  7.  
  8.         Select Case columna
  9.             Case 0 : digito = 12
  10.             Case 1 : digito = 12
  11.             Case 2 : digito = 12
  12.         End Select
  13.         If numcif > digito Then
  14.             ncadena = Mid(str, 1, digito)
  15.         Else
  16.             For r = 1 To (digito - numcif)
  17.                 cad = " "
  18.                 ncadena = ncadena & cad
  19.             Next
  20.             ncadena = str & ncadena
  21.         End If
  22.     End Sub
  23.  
  24.     Sub RellenarEsp2(ByVal str As String, ByVal columna As Int32)
  25.         Dim r As Int32
  26.         Dim cad As String = ""
  27.         Dim digito As Int32
  28.         ncadena = ""
  29.         Dim numcif As Int32 = str.Length
  30.  
  31.         Select Case columna
  32.             Case 0 : digito = 12
  33.             Case 1 : digito = 12
  34.             Case 2 : digito = 12
  35.             Case 3 : digito = 12
  36.             Case 4 : digito = 12
  37.         End Select
  38.         If numcif > digito Then
  39.             ncadena = Mid(str, 1, digito)
  40.         Else
  41.             For r = 1 To (digito - numcif)
  42.                 cad = " "
  43.                 ncadena = ncadena & cad
  44.             Next
  45.             ncadena = str & ncadena
  46.         End If
  47.     End Sub
  48.  
  49.     Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
  50.         Dim linesPerPage As Single = 0
  51.         Dim yPos As Single = 0
  52.         Dim leftMargin As Single = 30
  53.         Dim topMargin As Single = e.MarginBounds.Top - 50
  54.         Dim line As String = Nothing
  55.         linesPerPage = e.MarginBounds.Height / printFont.GetHeight(e.Graphics)
  56.  
  57.         Dim Fil, Col As Int32
  58.         Dim LString As String = ""
  59.         LString = LString & "Contabilidad Mensual " & vbCrLf & vbCrLf & vbCrLf
  60.         LString = LString & "Fecha de impresión: " & Today & vbCrLf & vbCrLf & vbCrLf & _
  61.         "------------------------------------------------------------------------------------------------" & vbCrLf & vbCrLf & vbCrLf
  62.         LString = LString & "Estadías: " & ComboBox2.Text & "" & vbCrLf & vbCrLf & vbCrLf
  63.         LString = LString & "Tipo           Habitación     Total" & vbCrLf & vbCrLf
  64.         count = 0
  65.         For Fil = 0 To DataGridView2.Rows.Count - 1
  66.             For Col = 0 To DataGridView2.Columns.Count - 1
  67.                 Call RellenarEsp(DataGridView2.Item(Col, Fil).Value.ToString, Col)
  68.                 LString = LString & ncadena & Space(3)
  69.             Next
  70.             count += 1
  71.             LString = LString & vbCrLf
  72.         Next
  73.         LString = LString & "" & vbCrLf
  74.         LString = LString & "Total:     " & TextBox3.Text & "" & vbCrLf & vbCrLf & vbCrLf & _
  75.         "------------------------------------------------------------------------------------------------" & vbCrLf & vbCrLf & vbCrLf
  76.         LString = LString & "Reservas: " & ComboBox3.Text & "" & vbCrLf & vbCrLf & vbCrLf
  77.         LString = LString & "Tipo           Habitación     Depósito       Efectivo       Total" & vbCrLf & vbCrLf
  78.         count = 0
  79.         For Fil = 0 To DataGridView1.Rows.Count - 1
  80.             For Col = 0 To DataGridView1.Columns.Count - 1
  81.                 Call RellenarEsp2(DataGridView1.Item(Col, Fil).Value.ToString, Col)
  82.                 LString = LString & ncadena & Space(3)
  83.             Next
  84.             count += 1
  85.             LString = LString & vbCrLf
  86.         Next
  87.         LString = LString & "" & vbCrLf
  88.         LString = LString & "Depósitos: " & TextBox1.Text & "" & vbCrLf
  89.         LString = LString & "Efectivo:  " & TextBox2.Text & "" & vbCrLf
  90.         LString = LString & "Total:     " & TextBox4.Text & ""
  91.         yPos = topMargin + (count * printFont.GetHeight(e.Graphics))
  92.         e.Graphics.DrawString(LString, printFont, Brushes.Black, leftMargin, yPos, New StringFormat())
  93.         If Not (line Is Nothing) Then
  94.             e.HasMorePages = True
  95.         Else
  96.             e.HasMorePages = False
  97.         End If
  98.     End Sub
  99.  
  100. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  101.         If DataGridView2.Rows.Count > 0 And DataGridView1.Rows.Count > 0 Then
  102.             Try
  103.                 printFont = New Font("Courier new", 11)
  104.                 PrintPreviewDialog1.StartPosition = FormStartPosition.CenterParent
  105.                 PrintPreviewDialog1.Width = 600
  106.                 PrintPreviewDialog1.Height = 700
  107.                 PrintPreviewDialog1.ShowDialog()
  108.             Catch ex As Exception
  109.                 MessageBox.Show(ex.Message)
  110.             End Try
  111.         End If
  112.     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.

Última edición por Allan2904; 01/02/2013 a las 03:45