none
itextsharp problema RRS feed

  • Pregunta

  • Estimados buenas noches , estoy usando el itextsharp para generar un pdf de unas tablas de una bd access , el temas es asi:

    Tengo 2 datagridview cuando la consulta me muestra el resultado en el data gridview2 y eso es lo que quiero imprimir aca tengo el codigo pero no me funciona y no veo en lo que me equivoco. Me dice referencia al objecto no establecida.

    Imports System.IO
    Imports System.Data.OleDb
    Imports System
    Imports System.Collections
    Imports System.Configuration
    Imports System.Data
    Imports iTextSharp.text
    Imports iTextSharp.text.pdf
    Public Class Reporte
      Public Sub print()
    
        Try
    
    
    
          Dim doc As New Document(PageSize.A4.Rotate(), 10, 10, 10, 10)
    
          Dim filename As String = "DataGridViewTest.pdf"
    
    
    
    
          Dim file As New FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite)
    
          PdfWriter.GetInstance(doc, file)
    
          doc.Open()
    
          GenerarDocumento(doc)
    
          doc.Close()
    
    
          Process.Start(filename)
    
        Catch ex As Exception
    
    
    
          MessageBox.Show(ex.Message)
        End Try
    
      End Sub
      'Función que genera el documento Pdf
    
      Public Sub GenerarDocumento(ByVal document As Document)
    
    
        'se crea un objeto PdfTable con el numero de columnas del
    
        'dataGridView
    
        Dim datatable As New PdfPTable(Consulta.DataGridView2.ColumnCount)
    
        'asignamos algunas propiedades para el diseño del pdf
        datatable.DefaultCell.Padding = 3
    
        Dim headerwidths As Single() = GetTamañoColumnas(Consulta.DataGridView1)
    
        datatable.SetWidths(headerwidths)
    
        datatable.WidthPercentage = 100
    
        datatable.DefaultCell.BorderWidth = 2
    
        datatable.DefaultCell.HorizontalAlignment = Element.ALIGN_CENTER
    
    
        'SE GENERA EL ENCABEZADO DE LA TABLA EN EL PDF
    
        For i As Integer = 0 To Consulta.DataGridView2.ColumnCount - 1
    
    
    
          datatable.AddCell(Consulta.DataGridView2.Columns(i).HeaderText)
        Next
    
    
        datatable.HeaderRows = 1
    
        datatable.DefaultCell.BorderWidth = 1
    
    
        'SE GENERA EL CUERPO DEL PDF
    
        For i As Integer = 0 To Consulta.DataGridView2.RowCount - 1
    
    
          For j As Integer = 0 To Consulta.DataGridView1.ColumnCount - 1
    
    
    
            datatable.AddCell(Consulta.DataGridView2(j, i).Value.ToString)
          Next
    
    
          datatable.CompleteRow()
        Next
    
    
        'SE AGREGAR LA PDFPTABLE AL DOCUMENTO
    
        document.Add(datatable)
    
      End Sub
    
    
    
      'Función que obtiene los tamaños de las columnas del grid
    
      Public Function GetTamañoColumnas(ByVal dg As DataGridView) As Single()
    
    
        Dim values As Single() = New Single(dg.ColumnCount - 1) {}
    
        For i As Integer = 0 To dg.ColumnCount - 1
    
    
    
          values(i) = CSng(dg.Columns(i).Width)
        Next
    
        Return values
    
      End Function
    
    
      
    
    
    End Class


    Federico Cambres
    lunes, 24 de enero de 2011 1:39

Respuestas

  • hola

    si estas usando este codigo

     For i As Integer = 0 To Consulta.DataGridView2 .RowCount - 1


      For j As Integer = 0 To Consulta.DataGridView1 .ColumnCount - 1



        datatable.AddCell(Consulta.DataGridView2(j, i).Value.ToString)
      Next


      datatable.CompleteRow()
    Next

    veras marcado en negrita que recorrer las filas y columnas  en distintos controles

    alli deberia ser o eldatagriodview 1 o el 2, pero uno solo

     

    ademas no usas un for, usa un ForEach, como esto:

     

    For row As DataGridViewRow In .DataGridView2.Rows

        For col As DataGridViewColumn  In Consulta.DataGridView1.Columns
       
            datatable.AddCell(row.Cells(col.Index).Value.ToString)

        Next

    Next

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 24 de enero de 2011 20:39

Todas las respuestas

  • hola

    cuando falla la aplciacion no marca la linea en que se produce el problema

    no llego a ver en el codigo algo que indique el problemas

    pero si hay algunos puntos con dudas, por ejemplo, este

    For i As Integer = 0 To Consulta.DataGridView2.ColumnCount - 1

    all veo que usas Consulta.DataGridView2, imagino que Consulta es otro formulario, pero esa instancia de donde sale ?

    podrias poner un brekpoint en el codigo he ir paso a paso para ver dodne  se produce el problema

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 24 de enero de 2011 12:56
  • -- Federico dice:

    Tengo 2 datagridview cuando la consulta me muestra el resultado en el data gridview2 y eso es lo que quiero imprimir aca tengo el codigo pero no me funciona y no veo en lo que me equivoco. Me dice referencia al objecto no establecida.

    Este error se produce cuando dentro de la pila de llamada no se encuentra el objecto al que se hace referencia(no se vez).

    Corre la aplicacion en modo debug el cual te dara la fila que se encuentra el objecto que esta causando el problena .

    Si esta trabajando etre formulario verificate a ver que halla agregado o pasado este objecto al otro fotmulario 

    Si esta en el mismo formulario verificate que este objecto no se encuentre dentro de la coleccion de otro objecto


    Angel R. Jimenez G.
    Software Development
    Santo Domingo
    Republica Dominicana
    lunes, 24 de enero de 2011 15:25
  • Estimados estuve viendo la aplicacion y me da error aca:

    referencia al objecto no establecida .

          datatable.AddCell(DataGridView2(j, i).Value.ToString)

     

    El datagridview se encuentra en el mismo formulario.

    Si le pongo datagridview1 me anda perfecto ahora si lo cambio a datagridview2 no me anda aparece el error antes mensionado.


    Federico Cambres
    lunes, 24 de enero de 2011 20:27
  • hola

    si estas usando este codigo

     For i As Integer = 0 To Consulta.DataGridView2 .RowCount - 1


      For j As Integer = 0 To Consulta.DataGridView1 .ColumnCount - 1



        datatable.AddCell(Consulta.DataGridView2(j, i).Value.ToString)
      Next


      datatable.CompleteRow()
    Next

    veras marcado en negrita que recorrer las filas y columnas  en distintos controles

    alli deberia ser o eldatagriodview 1 o el 2, pero uno solo

     

    ademas no usas un for, usa un ForEach, como esto:

     

    For row As DataGridViewRow In .DataGridView2.Rows

        For col As DataGridViewColumn  In Consulta.DataGridView1.Columns
       
            datatable.AddCell(row.Cells(col.Index).Value.ToString)

        Next

    Next

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 24 de enero de 2011 20:39