{"id":47,"date":"2013-12-10T00:20:05","date_gmt":"2013-12-10T03:20:05","guid":{"rendered":"http:\/\/www.hectordufau.com.br\/wp\/?p=47"},"modified":"2014-01-05T05:41:45","modified_gmt":"2014-01-05T08:41:45","slug":"proposta-de-arquitetura-parte-6-utilitarios-basicos","status":"publish","type":"post","link":"https:\/\/www.hectordufau.com.br\/wp\/?p=47","title":{"rendered":"Proposta de Arquitetura &#8211; Parte 6 &#8211; Utilit\u00e1rios B\u00e1sicos"},"content":{"rendered":"<p>A camada de utilit\u00e1rios b\u00e1sicos (CUB) \u00e9 uma camada que cont\u00e9m classes que auxiliam em diversas tarefas da aplica\u00e7\u00e3o, como formata\u00e7\u00e3o de data, cria\u00e7\u00e3o de strings criptografadas (usado na cria\u00e7\u00e3o ou valida\u00e7\u00e3o de senhas), ou qualquer coisa que pode ser usada para o tratamento de informa\u00e7\u00f5es pelas classes da CLN.<\/p>\n<p>&nbsp;<\/p>\n<p>Neste artigo vou apresentar uma classe que pode ser \u00fatil na convers\u00e3o de um List em um DataTable, tratando os campos nulos, que n\u00e3o s\u00e3o permitidos.<\/p>\n<p><!--more--><\/p>\n<p>Nem todos os recursos gr\u00e1ficos permitem o uso de listas para exibi\u00e7\u00e3o de dados. Um deles \u00e9 o ASP.NET Menu, que pode apresentar problemas com dados nulos, se eles existirem em um List. Ent\u00e3o a convers\u00e3o para DataTable, tratando estes valores pode ser \u00fatil, e a classe abaixo garante esta solu\u00e7\u00e3o:<\/p>\n<p>&nbsp;<\/p>\n<p><strong><span style=\"color: #ff0000;\">**********************\u00a0ListaDT.cs **********************<\/span><\/strong><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #000080;\">using System; <\/span><br \/>\n<span style=\"color: #000080;\">using System.Collections.Generic; <\/span><br \/>\n<span style=\"color: #000080;\">using System.Linq; <\/span><br \/>\n<span style=\"color: #000080;\">using System.Text; <\/span><br \/>\n<span style=\"color: #000080;\">using System.Reflection; <\/span><br \/>\n<span style=\"color: #000080;\">using System.Data; <\/span><br \/>\n<span style=\"color: #000080;\">\u00a0<\/span><br \/>\n<span style=\"color: #000080;\">namespace HLMI.Cadastro.CUB <\/span><br \/>\n<span style=\"color: #000080;\">{ <\/span><br \/>\n<span style=\"color: #000080;\">\u00a0\u00a0\u00a0 public class ListaDT <\/span><br \/>\n<span style=\"color: #000080;\">\u00a0\u00a0\u00a0 { <\/span><br \/>\n<span style=\"color: #000080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 public static DataTable ConverteListParaDataTable&lt;T&gt;(IList&lt;T&gt; list) <\/span><br \/>\n<span style=\"color: #000080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 { <\/span><br \/>\n<span style=\"color: #000080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DataTable dt = new DataTable(); <\/span><br \/>\n<span style=\"color: #000080;\">\u00a0<\/span><br \/>\n<span style=\"color: #000080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (list != null) <\/span><br \/>\n<span style=\"color: #000080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 { <\/span><br \/>\n<span style=\"color: #000080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 foreach (PropertyInfo info in typeof(T).GetProperties()) <\/span><br \/>\n<span style=\"color: #000080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 { <\/span><br \/>\n<span style=\"color: #000080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Type propType = info.PropertyType; <\/span><br \/>\n<span style=\"color: #000080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (propType.IsGenericType &amp;&amp; propType.GetGenericTypeDefinition() == typeof(Nullable&lt;&gt;)) <\/span><br \/>\n<span style=\"color: #000080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 { <\/span><br \/>\n<span style=\"color: #000080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 propType = Nullable.GetUnderlyingType(propType); <\/span><br \/>\n<span style=\"color: #000080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 } <\/span><br \/>\n<span style=\"color: #000080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 dt.Columns.Add(new DataColumn(info.Name, propType)); <\/span><br \/>\n<span style=\"color: #000080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 } <\/span><br \/>\n<span style=\"color: #000080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 foreach (T t in list) <\/span><br \/>\n<span style=\"color: #000080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 { <\/span><br \/>\n<span style=\"color: #000080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DataRow row = dt.NewRow(); <\/span><br \/>\n<span style=\"color: #000080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 foreach (PropertyInfo info in typeof(T).GetProperties()) <\/span><br \/>\n<span style=\"color: #000080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 { <\/span><br \/>\n<span style=\"color: #000080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Type propType = info.PropertyType; <\/span><br \/>\n<span style=\"color: #000080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Object obj = info.GetValue(t, null); <\/span><br \/>\n<span style=\"color: #000080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (propType.IsGenericType &amp;&amp; propType.GetGenericTypeDefinition() == typeof(Nullable&lt;&gt;)) <\/span><br \/>\n<span style=\"color: #000080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 { <\/span><br \/>\n<span style=\"color: #000080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (obj == null) obj = DBNull.Value; <\/span><br \/>\n<span style=\"color: #000080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 } <\/span><br \/>\n<span style=\"color: #000080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 row[info.Name] = obj; <\/span><br \/>\n<span style=\"color: #000080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 } <\/span><br \/>\n<span style=\"color: #000080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 dt.Rows.Add(row); <\/span><br \/>\n<span style=\"color: #000080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 } <\/span><br \/>\n<span style=\"color: #000080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 } <\/span><br \/>\n<span style=\"color: #000080;\">\u00a0<\/span><br \/>\n<span style=\"color: #000080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return dt; <\/span><br \/>\n<span style=\"color: #000080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 } <\/span><br \/>\n<span style=\"color: #000080;\">\u00a0\u00a0\u00a0 } <\/span><br \/>\n<span style=\"color: #000080;\">}<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><strong><span style=\"color: #ff0000;\">********************************************************<\/span><\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A camada de utilit\u00e1rios b\u00e1sicos (CUB) \u00e9 uma camada que cont\u00e9m classes que auxiliam em diversas tarefas da aplica\u00e7\u00e3o, como formata\u00e7\u00e3o de data, cria\u00e7\u00e3o de strings criptografadas (usado na cria\u00e7\u00e3o ou valida\u00e7\u00e3o de senhas), ou qualquer coisa que pode ser [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[30],"tags":[],"class_list":["post-47","post","type-post","status-publish","format-standard","hentry","category-net"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p4cTO8-L","jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.hectordufau.com.br\/wp\/index.php?rest_route=\/wp\/v2\/posts\/47","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hectordufau.com.br\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hectordufau.com.br\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hectordufau.com.br\/wp\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hectordufau.com.br\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=47"}],"version-history":[{"count":2,"href":"https:\/\/www.hectordufau.com.br\/wp\/index.php?rest_route=\/wp\/v2\/posts\/47\/revisions"}],"predecessor-version":[{"id":107,"href":"https:\/\/www.hectordufau.com.br\/wp\/index.php?rest_route=\/wp\/v2\/posts\/47\/revisions\/107"}],"wp:attachment":[{"href":"https:\/\/www.hectordufau.com.br\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=47"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hectordufau.com.br\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=47"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hectordufau.com.br\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=47"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}