¿Quien no ha tenido en algun momento que, en su cotidiano quehacer, traspasar los datos de objetos de cierta clase (encapulados en propiedades) a un Datatable? Es algo que siempre hacemos (o haciamos algunos), y sorteamos del siguiente modo:

  • Creamos un Datatable, y añadimos tantas columnas como propiedades tenga la clase.
  • Iterando objeto por objeto (si es un listado) 
  • Finalmente, por cada objeto, pasamos su valor a la columna correspondiente.

Bueno, si lo tienes en un Typed Dataset, no habria problemas (mas he oido comentarios referidos al bajo desempeño de esto; empero, en distintos escenarios, las cosas pueden cambiar), mas si creas algun DataTable para realizarlo, te quitara tiempo. Por ello ofrezco a continuacion lineas de codigo en VB .Net que hara mas sencilla esta tarea. Enjoy it!

 

Imports System.Data

Imports System.Reflection

 

Public Module UtilDatos

 

‘ Clona las propiedades de una entidad y las traspasa como columnas a un DataTable

‘ Tipo es el tipo (clase) al que se le clonarán las propiedades

‘ Retorna un DataTable que tiene como columnas las propiedades del tipo especificado

‘ OJO: Las propiedades indexadas no son consideradas

Public Function ClonarPropiedades(ByVal Tipo As Type) As DataTable

    Dim dtbTablaClonadora As New DataTable

        For Each objPropiedad As PropertyInfo In Tipo.GetProperties

            If objPropiedad.GetIndexParameters.Length = 0 Then

                Dim objColumna As New DataColumn

                objColumna.Caption = objPropiedad.Name

                objColumna.ColumnName = objPropiedad.Name

                objColumna.DataType = objPropiedad.PropertyType

                dtbTablaClonadora.Columns.Add(objColumna)

            End If

        Next

        Return dtbTablaClonadora

End Function

Conectados a .Net 

‘ Traspasa los datos que tengan los objetos del listado a un DataTable

Public Function ClonarDatos(ByVal Objetos As IList) As DataTable

        If Objetos.Count > 0 Then

            Dim dtbMatrizElementos As Data.DataTable

            dtbMatrizElementos = UtilDatos.ClonarPropiedades(Objetos(0).GetType)

            For Each objElemento As Object In Objetos

                Dim drwElemento As Data.DataRow = dtbMatrizElementos.NewRow

                For Each dtcCabecera As Data.DataColumn In tbMatrizElementos.Columns

                    drwElemento(dtcCabecera.ColumnName) = _

                        objElemento.GetType.GetProperty(dtcCabecera.ColumnName) _

                            .GetValue(objElemento, New Object() {})

                Next

                dtbMatrizElementos.Rows.Add(drwElemento)

            Next

            Return dtbMatrizElementos

        End If

        Return Nothing

End Function

 

End Module

 

Una respuesta a “Traspasar las propiedades de una clase a un DataTable”

  1. Jurahack dijo:

    Exelente :) gracias,

Escribe un comentario