Tuesday, November 8, 2011

List Of a datatable

Cómo convertir una lista genérica de objetos a una datatable. vb.NET. ASP.NET

Lo cierto es que este tema me ha interesado, aquí te va un poco más de Reflection. Por si alguna vez precisas realizar una conversión de un List Of Tu Clase a un DataTable.

Nota.- La clase a utilizar en este ejemplo, es la clase Persona, la misma que se utilizó en el post anterior.

Primero, agrego mis objetos de tipo Persona a mi List Of. Luego que la lista está llenada, la traspaso a un datatable. Recorro las propiedades de mi clase para que los nombres de éstas sean los nombres de las columnas del datatable. Acto seguido, por cada ítem de la lista, recorro cada propiedad para agregar cada valor como fila del datatable. Bueno, lo demás ya es obvio.

Imports System.Collections.Generic
Imports System.Data
Imports System.Reflection
Imports ClassLibrary3

Partial Class _Default
    Inherits System.Web.UI.Page


    Private lstPersonas As New List(Of clsPersona)

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Me.prcCrearPersona()
        Dim dt As DataTable = ConvertToDataTable(lstPersonas)
    End Sub

    Private objPersona As clsPersona

    Public Sub prcCrearPersona()
        For i As Integer = 0 To 4
            objPersona = New clsPersona
            objPersona.pNombre = "Lizzy" & i
            objPersona.pApellido = "Mendivil" & i
            Me.lstPersonas.Add(objPersona)
        Next
    End Sub

    Public Shared Function ConvertToDataTable(Of T)(ByVal list As IList(Of T)) As DataTable
        Dim dt As New DataTable()
        Dim propiedades As PropertyInfo() = GetType(T).GetProperties
        For Each p As PropertyInfo In propiedades
            dt.Columns.Add(p.Name, p.PropertyType)
        Next
        For Each item As T In list
            Dim row As DataRow = dt.NewRow
            For Each p As PropertyInfo In propiedades
                row(p.Name) = p.GetValue(item, Nothing)
            Next
            dt.Rows.Add(row)
        Next
        Return dt
    End Function

End Class


Como resultado, tendrías que tener una vista similar a esta: (claro, según tu clase)


HaPPy Coding =)

Monday, November 7, 2011

System.reflection


Qué es Reflection? Para qué sirve? En qué me es útil? Cuándo usar? Bueno, si te has hecho estas preguntas vas bien, yo también me las hice, jejeje.

Empezemos por la definición:

Reflection proporciona objetos (de tipo Type) que encapsulan ensamblados, módulos y tipos. Se puede utilizar la reflexión para crear dinámicamente una instancia de un tipo, enlazar el tipo a un objeto existente u obtener el tipo a partir de un objeto existente, e invocar sus métodos o tener acceso a sus campos y propiedades.

Reflection es una “tecnica” para poder extraer la metadata de nuestras estructuras de datos dentro de una assembly.

Reflection es la habilidad que tiene un código para revisar su propia estructura, es decir, podemos revisar la metadata que está en el assembly y manipularla a nuestro antojo.

Utilidades

Nos ayuda a consultar qué propiedades o métodos tiene un objeto en TIEMPO DE EJECUCIÓN.

Podemos diseñar un formulario dinámicamente.

Empezando a utilizar Reflection. HowTo

Hay dos formas: usando typeof() o GetType(). Ambas formas retornan un objeto tipo Type, ese es el que nos otorga a información que queremos.

Entre los principales métodos de Type están:

GetField() Obtiene el campo según el nombre.

GetMethod() Obtiene un método, y si éste tiene sobre cargas, al igual que el constructor, hay que pasarle el tipo correspondiente de la sobre carga.

GetProperty() Obtiene la propiedad según el nombre.

Nota: aparte de los métodos anteriores existen los mismos en plural, es decir que en vez de obtener un miembro, obtienes un arreglo con los resultados según los parámetros que le indiques. Ejm: GetProperty() tienes: GetProperties() el cual puedes llamar sin parámetros para obtener un PropertyInfo[] con todas las propiedades.

Let's do it. Ejemplo.

A continuación un ejemplo para fines académicos, dada una clase persona, usando reflection asignaré valores a sus propiedades. Primero lleno un diccionario cuya Key es el nombre de la propiedad de la clase y su Value obviamente el nombre que le quiero asignar a esa propiedad. Luego, recorro el diccionario para extraer sus propiedades y asignarles  un valor.

Imports System.Reflection
Imports System.Collections.Generic

Module Module1
    Sub Main()
        Dim atributosPersona As New Dictionary(Of String, String)
        atributosPersona.Add("pNombre", "Lizzy")
        atributosPersona.Add("pApellido", "Mendivil")

        Dim p As New clsPersona
        For Each atributo In atributosPersona
            Dim pf As PropertyInfo = p.GetType.GetProperty(atributo.Key)
            pf.SetValue(p, atributo.Value, Nothing)
        Next

        Console.WriteLine("Nombre: {0}", p.pNombre)
        Console.WriteLine("Apelllido: {0}", p.pApellido)
    End Sub

    Public Class clsPersona
        Private strNombre As String
        Private strApellido As String

        Public Property pNombre() As String
            Get
                Return strNombre
            End Get
            Set(ByVal value As String)
                strNombre = value
            End Set
        End Property

        Public Property pApellido() As String
            Get
                Return strApellido
            End Get
            Set(ByVal value As String)
                strApellido = value
            End Set
        End Property
    End Class
End Module

HaPPy Coding =)

Sunday, November 6, 2011

Web site vs web application

Si sos desarrollador .NET verás que tenés 2 opciones para crear proyectos web. Te has preguntado alguna vez cuál de los dos usarás? O... si hay 2 opciones, cuál es la mejor?

Veamos las diferencias que saltan a primera vista. Cheka la imagen siguiente:




Para empezar, el Web Site se agrega directamente con clic derecho sobre la solución. En cambio el Web Application hay que agregarlo desde la ventana dialog tal como se agrega un Class Library por ejemplo.

1.-

En Web Site, el código de diseño de la página se esconde completamente al desarrollador y se genera dinámicamente en tiempo de compilación.

En Web Application ese código está disponible y se llama igual que la página agregándose lo siguiente "designer.vb" (tal como lo podés ver en la imagen)

(A mi parecer esto está por demás ya que de nada sirve que lo tengás visible pues no vas a programar nada allí, es más, ni deberías tocarlo)

2.-

En los proyectos Web Site al precompilar la aplicación se genera una DLL por cada página o control de la aplicación, las cuales van dentro del directorio Bin.

En los proyectos de tipo Web Application se genera una única DLL que contiene el código completo de la aplicación, la cual se debe cargar en memoria sea necesario todo el código o no.

3.-

En Web Site podés editar el código de tus webforms en tiempo de ejecución.

Mientras que en los Web Applicacion esta opción no está habilitada. Tendrías que parar la ejecución, editar, y volver a ejecutar. o_O Esto realmente no me agrada (pero uno se acostumbra jejeje)

4.-

En Web Site no podés agregar una Class.vb en cualquier parte, sólo es posible dentro de la carpeta App_Data

En Web Application podés agregar una Class.vb en cualquier parte. Sin embargo esta opción no es de la gran importancia ya que quien es ordenado no agrega sus clases en "cualquier parte".

5.-

Cuando le das clic derecho sobre tu proyecto Sitio Web, no encontrás la opción "Properties" o "Propiedades"

Sin embargo, en los proyectos tipo Web Application sí tenemos esa opción. Esto llega a ser una gran ventaja ya que se tiene mayor control sobre su configuración.

En este link (en inglés) encontrás una ayuda de cuándo usar web site y cuándo web application.

En la Web encontrarás muchas más diferencias y más consejos a la hora de cuál de las dos opciones elegir.

Have a good choice! =)

Monday, October 17, 2011

Baterias. Notebooks. No cargar mientras se esta trabajando

La pregunta del mishón, al menos para mi. La verdad que yo creía que no había problema alguno en conectar la portátil a la corriente mientras se la está usando. De hecho, casi siempre lo hago/lo hice. De agora en adelante sha no (hasta que mi hna. me dijo que su batería se había dañado por nada más y x eso decidí buscar más info en la web). Cheken por qué.

No conviene utilizar la notebook mientras la batería se está cargando. ¿Por qué? Las baterías de litio ion son enemigas del calor. Durante la carga se produce temperatura, la cual se incrementa además al estar utilizando el equipo. Entonces, mejor, cargarla y usarla, por separado.

Las fabricantes recomiendan quitar la batería si el usuario no va a utilizar el equipo durante un tiempo. En este caso, la carga de la pila conviene que esté cerca del 40% ya que las baterías de litio ion tampoco son amigas de quedarse en cero.

Aquí te van algunos buenos consejos para alargar el tiempo a la batería de tu notebook:

1- Apague las transmisiones inalámbricas: los infrarrojos (IrDA), Bluetooth y Wi-Fi son verdaderos vampiros de la electricidad, siendo equivalentes a mantener un celular en uso todo el tiempo. Apaga estas funciones cuando no sean necesarias.

2- Evite usar la unidad de CD o DVD: el gasto no sólo corre por cuenta del láser, sino también del motor que hace girar el disco. Y mejor ni hablar de las grabadoras.

3- Reduzca el brillo de la pantalla: algunos equipos lo hacen en forma automática ya que entre menos luz generen, menos energía demandarán.

4- Retire tarjetas de memoria o llaves USB: no deje que sus dimensiones reducidas lo engañen, pues energizarlas requiere un flujo adicional de electricidad. Esto es especialmente válido para dispositivos pequeños, como teléfonos o PDAs.

5- Evite usar aplicaciones de audio: aún con auriculares, la generación de sonido requiere un gasto constante de energía. Peor todavía si se alimentan parlantes externos.

Fuente: http://www.sobrenotebooks.com.ar

Saturday, October 15, 2011

Microsoft outlook 2010: poner firma

Cómo colocarle o poner firma a tu correo en Microsoft Outlook 2010.

Primero debes darle clic sobre la barra del menú principal en NUEVO MENSAJE DE CORREO ELECTRÓNICO.


Luego, en la ventana que se te abrió, dale clic sobre la barra del menú en FIRMA.


En seguida se te abrirá una ventanita que se llama FIRMAS Y PLANTILLA. Le das clic en NUEVA y te levantara un popup en el cual debes colocarle el nombre distintivo que se llamara tu firma (Recuerda que podes tener mas de una). En el recuadro EDITAR FIRMA, escribe tu firma y formateala. En la parte derecha superior hay tres combos en el cual debes elegir tu correo electrónico asociado a la firma, y que firma asociaras para los nuevos mensajes, para las respuestas y para los reenvios.


Cuando hayas terminado, le das clic en GUARDAR Y ACEPTAR. Pero si queres, en el tab siguiente que se llama DISENO DE FONDO PERSONAL, podes colocarle un tema o fuente. Mi tema favorito es el ECO y el HIELO.

Fácil, no?