Proposta de Arquitetura – Parte 6 – Utilitários Básicos

A camada de utilitários básicos (CUB) é uma camada que contém classes que auxiliam em diversas tarefas da aplicação, como formatação de data, criação de strings criptografadas (usado na criação ou validação de senhas), ou qualquer coisa que pode ser usada para o tratamento de informações pelas classes da CLN.

 

Neste artigo vou apresentar uma classe que pode ser útil na conversão de um List em um DataTable, tratando os campos nulos, que não são permitidos.

Nem todos os recursos gráficos permitem o uso de listas para exibição de dados. Um deles é o ASP.NET Menu, que pode apresentar problemas com dados nulos, se eles existirem em um List. Então a conversão para DataTable, tratando estes valores pode ser útil, e a classe abaixo garante esta solução:

 

********************** ListaDT.cs **********************

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.Data;
 
namespace HLMI.Cadastro.CUB
{
    public class ListaDT
    {
        public static DataTable ConverteListParaDataTable<T>(IList<T> list)
        {
            DataTable dt = new DataTable();
 
            if (list != null)
            {
                foreach (PropertyInfo info in typeof(T).GetProperties())
                {
                    Type propType = info.PropertyType;
                    if (propType.IsGenericType && propType.GetGenericTypeDefinition() == typeof(Nullable<>))
                    {
                        propType = Nullable.GetUnderlyingType(propType);
                    }
                    dt.Columns.Add(new DataColumn(info.Name, propType));
                }
                foreach (T t in list)
                {
                    DataRow row = dt.NewRow();
                    foreach (PropertyInfo info in typeof(T).GetProperties())
                    {
                        Type propType = info.PropertyType;
                        Object obj = info.GetValue(t, null);
                        if (propType.IsGenericType && propType.GetGenericTypeDefinition() == typeof(Nullable<>))
                        {
                            if (obj == null) obj = DBNull.Value;
                        }
                        row[info.Name] = obj;
                    }
                    dt.Rows.Add(row);
                }
            }
 
            return dt;
        }
    }
}

 

********************************************************