<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6953053</id><updated>2011-11-27T21:43:00.520-02:00</updated><category term='mvc'/><category term='arquitetura'/><category term='firefox'/><category term='microsoft'/><category term='.net'/><category term='winforms'/><category term='carreira'/><category term='banco de dados'/><category term='oo'/><category term='reporting-viewer'/><category term='ie'/><title type='text'>Brandão, dotNET Developer</title><subtitle type='html'>"Come to the .NET side of the Force!"
Pequenos desafios do dia a dia de um desenvolvedor .Net
Dicas de .Net, OOP, Winforms, Design Patterns, Arquitetura</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://egomesbrandao.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6953053/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://egomesbrandao.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Brandão</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>15</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6953053.post-3852437699763815270</id><published>2009-06-23T18:58:00.002-03:00</published><updated>2009-06-23T19:02:48.909-03:00</updated><title type='text'>Mudando de endereço</title><content type='html'>Pessoal,&lt;br /&gt;&lt;br /&gt;Agora tenho um domínio registrado! Então vou continuar a escrever por lá...&lt;br /&gt;O projeto do ABC vai continuar e dessa vez pretendo manter uma certa frequência...&lt;br /&gt;&lt;br /&gt;Vejo vocês lá! &lt;a href="http://blog.egomesbrandao.net"&gt;blog.egomesbrandao.net&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6953053-3852437699763815270?l=egomesbrandao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://egomesbrandao.blogspot.com/feeds/3852437699763815270/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6953053&amp;postID=3852437699763815270' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6953053/posts/default/3852437699763815270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6953053/posts/default/3852437699763815270'/><link rel='alternate' type='text/html' href='http://egomesbrandao.blogspot.com/2009/06/mudando-de-endereco.html' title='Mudando de endereço'/><author><name>Brandão</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6953053.post-9175910935586842835</id><published>2009-05-20T14:53:00.001-03:00</published><updated>2009-05-20T14:53:00.342-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reporting-viewer'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='winforms'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><title type='text'>Usando relatórios Embedded Resource com o Reporting Viewer</title><content type='html'>&lt;p&gt;Primeira vez que eu uso o Reporting Viewer, ou MS Reporting para WinForms, antes eu criava relatórios com o Crystal Reports.&amp;#160; &lt;br /&gt;Só para explicar o por que dessa mudança: não uso DataSet’s (!), trabalho com o objetos &lt;a href="http://en.wikipedia.org/wiki/Plain_Old_CLR_Object"&gt;POCO&lt;/a&gt;, mais explicações siga os posts deste blog sobre a montagem do sistema ABC (que eu promote que vai recomeçar em breve), e o Crystal tem uma limitação para trabalhar para usar uma fonte de dados como a seguinte:&lt;/p&gt;  &lt;div style="border-bottom: #d0d0d0 1px solid; border-left: #d0d0d0 1px solid; background-color: #f0f0f0; font-family: monospace; color: #006; border-top: #d0d0d0 1px solid; border-right: #d0d0d0 1px solid" class="csharp"&gt;   &lt;ol&gt;     &lt;li style="font: 130% &amp;#39;Courier New&amp;#39;, courier, monospace; color: #003030; vertical-align: top"&gt;       &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #0600ff"&gt;public&lt;/span&gt; &lt;span style="color: #ff0000"&gt;class&lt;/span&gt; CtaPagar &lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;/div&gt;     &lt;/li&gt;      &lt;li style="font: 130% &amp;#39;Courier New&amp;#39;, courier, monospace; color: #003030; vertical-align: top"&gt;       &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&lt;/div&gt;     &lt;/li&gt;      &lt;li style="font: 130% &amp;#39;Courier New&amp;#39;, courier, monospace; color: #003030; vertical-align: top"&gt;       &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff"&gt;public&lt;/span&gt; &lt;span style="color: #0600ff"&gt;virtual&lt;/span&gt; &lt;span style="color: #ff0000"&gt;int&lt;/span&gt; CdCtaPagar &lt;span style="color: #000000"&gt;{&lt;/span&gt; get&lt;span style="color: #008000"&gt;;&lt;/span&gt; set&lt;span style="color: #008000"&gt;;&lt;/span&gt; &lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;/div&gt;     &lt;/li&gt;      &lt;li style="font: 130% &amp;#39;Courier New&amp;#39;, courier, monospace; color: #003030; vertical-align: top"&gt;       &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff"&gt;public&lt;/span&gt; &lt;span style="color: #0600ff"&gt;virtual&lt;/span&gt; DateTime&lt;span style="color: #008000"&gt;?&lt;/span&gt; DtCadastro &lt;span style="color: #000000"&gt;{&lt;/span&gt; get&lt;span style="color: #008000"&gt;;&lt;/span&gt; set&lt;span style="color: #008000"&gt;;&lt;/span&gt; &lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;/div&gt;     &lt;/li&gt;      &lt;li style="color: #006060; vertical-align: top; font-weight: bold"&gt;       &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff"&gt;public&lt;/span&gt; &lt;span style="color: #0600ff"&gt;virtual&lt;/span&gt; DateTime DtAlteracao &lt;span style="color: #000000"&gt;{&lt;/span&gt; get&lt;span style="color: #008000"&gt;;&lt;/span&gt; set&lt;span style="color: #008000"&gt;;&lt;/span&gt; &lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;/div&gt;     &lt;/li&gt;      &lt;li style="font: 130% &amp;#39;Courier New&amp;#39;, courier, monospace; color: #003030; vertical-align: top"&gt;       &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff"&gt;public&lt;/span&gt; &lt;span style="color: #0600ff"&gt;virtual&lt;/span&gt; Empresa Credor &lt;span style="color: #000000"&gt;{&lt;/span&gt; get&lt;span style="color: #008000"&gt;;&lt;/span&gt; set&lt;span style="color: #008000"&gt;;&lt;/span&gt; &lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;/div&gt;     &lt;/li&gt;      &lt;li style="font: 130% &amp;#39;Courier New&amp;#39;, courier, monospace; color: #003030; vertical-align: top"&gt;       &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff"&gt;public&lt;/span&gt; &lt;span style="color: #0600ff"&gt;virtual&lt;/span&gt; &lt;span style="color: #ff0000"&gt;string&lt;/span&gt; Descricao &lt;span style="color: #000000"&gt;{&lt;/span&gt; get&lt;span style="color: #008000"&gt;;&lt;/span&gt; set&lt;span style="color: #008000"&gt;;&lt;/span&gt; &lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;/div&gt;     &lt;/li&gt;      &lt;li style="font: 130% &amp;#39;Courier New&amp;#39;, courier, monospace; color: #003030; vertical-align: top"&gt;       &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0600ff"&gt;public&lt;/span&gt; &lt;span style="color: #0600ff"&gt;virtual&lt;/span&gt; &lt;span style="color: #ff0000"&gt;decimal&lt;/span&gt; VlTotalPagar &lt;span style="color: #000000"&gt;{&lt;/span&gt; get&lt;span style="color: #008000"&gt;;&lt;/span&gt; set&lt;span style="color: #008000"&gt;;&lt;/span&gt; &lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;/div&gt;     &lt;/li&gt;      &lt;li style="font: 130% &amp;#39;Courier New&amp;#39;, courier, monospace; color: #003030; vertical-align: top"&gt;       &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&lt;/div&gt;     &lt;/li&gt;      &lt;li style="color: #006060; vertical-align: top; font-weight: bold"&gt;       &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="font-style: italic; color: #008080"&gt;//métodos ...&lt;/span&gt;&lt;/div&gt;     &lt;/li&gt;      &lt;li style="font: 130% &amp;#39;Courier New&amp;#39;, courier, monospace; color: #003030; vertical-align: top"&gt;       &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;/div&gt;     &lt;/li&gt;   &lt;/ol&gt; &lt;/div&gt;  &lt;p&gt;Como Credor é um objeto o Crystal Reports não consegue usar as propriedades do objeto (até a versão que acompanha o VS.Net 2005 Professional), então tive que criar DataSet’s para converter esses meus objetos, isso é ruim, pois é mais um processo dentro do software, mais um código que fica espalhado e eu tenho que manter. Portanto resolvi testar o Reporting Viewer, e ele aceita objetos complexos na minha fonte de dados.&lt;/p&gt;  &lt;p&gt;Como estou estudando &lt;a href="http://dddstepbystep.com/"&gt;DDD&lt;/a&gt; e já estou aplicando os conceitos me surgiu uma dúvida, onde colocar o relatório? Bom… Não vou discutir esse assunto, o fato é que o relatório ficou próximo a minha camada Model, e daí surgiu o problema de que o Reporting Viewer não funciona como o CR (Crystal Reports), onde o relatório é apenas uma classe e ao instâcia-la eu passo para o visualizador e ele cria o relatório.&amp;#160; O RV (Reporting Viewer) é o componente de visualização do relatório e o relatório é um arquivo RDLC.&lt;/p&gt;  &lt;p&gt;Nota: Um arquivo RDLC é básicamente um XML, a MS criou essa linguagem para servir como uma linguagem comum de relatórios, você pode baixar essa especificação &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=2A20C7AF-52E8-4882-BD24-9479B3C7517D&amp;amp;displaylang=en"&gt;aqui&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Agora vamos ao ponto, se eu tenho um arquivo RLDC em um assembly, como Embedded Resource (distribuir em arquivos separados eu particularmente acho ruim pois o arquivo fica sujeito a modificações) como fazer para passar para outra “camada” da aplicação?&lt;/p&gt;  &lt;p&gt;Vamos por partes…&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;Lendo um Embedded Resource&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;O arquivo esta dentro do assembly, então você não poderá acessá-lo diretamente, para isso você vai ter que ler o assembly, achar o arquivo e pegá-lo. Então será necessário o uso de Reflection, veja o código abaixo:&lt;/p&gt;  &lt;div style="border-bottom: #d0d0d0 1px solid; border-left: #d0d0d0 1px solid; background-color: #f0f0f0; font-family: monospace; color: #006; border-top: #d0d0d0 1px solid; border-right: #d0d0d0 1px solid" class="csharp"&gt;   &lt;ol&gt;     &lt;li style="font: 130% &amp;#39;Courier New&amp;#39;, courier, monospace; color: #003030; vertical-align: top"&gt;       &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;Assembly a &lt;span style="color: #008000"&gt;=&lt;/span&gt; Assembly.&lt;span style="color: #0000ff"&gt;GetExecutingAssembly&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;&lt;/div&gt;     &lt;/li&gt;      &lt;li style="font: 130% &amp;#39;Courier New&amp;#39;, courier, monospace; color: #003030; vertical-align: top"&gt;       &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&lt;/div&gt;     &lt;/li&gt;      &lt;li style="font: 130% &amp;#39;Courier New&amp;#39;, courier, monospace; color: #003030; vertical-align: top"&gt;       &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;Stream rptStream &lt;span style="color: #008000"&gt;=&lt;/span&gt; a.&lt;span style="color: #0000ff"&gt;GetManifestResourceStream&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #666666"&gt;&amp;quot;Financeiro.Model.Reports.rptCtaPagar.rdlc&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;&lt;/div&gt;     &lt;/li&gt;      &lt;li style="font: 130% &amp;#39;Courier New&amp;#39;, courier, monospace; color: #003030; vertical-align: top"&gt;       &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&lt;/div&gt;     &lt;/li&gt;      &lt;li style="color: #006060; vertical-align: top; font-weight: bold"&gt;       &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #0600ff"&gt;return&lt;/span&gt; rptStream&lt;span style="color: #008000"&gt;;&lt;/span&gt;&lt;/div&gt;     &lt;/li&gt;   &lt;/ol&gt; &lt;/div&gt;  &lt;p&gt;A classe Assembly esta no namespace System.Reflection, na linha 1, o método retorna o assembly que esta rodando o código no momento, o meu arquivo de relatório esta nele.    &lt;br /&gt;O componente de visualização RV recebe o relatório como string, mas para ler o arquivo temos que criar um Stream, o método da linha 3, lê um arquivo do tipo Resource no assembly, note que eu passei o nome do relatório com o seu namespace completo, sem isso ele não irá achar o arquivo.&lt;/p&gt;  &lt;p&gt;Tendo esse Stream eu posso passar ele para a camada de Visualização do meu software, que é onde o componente RV esta. Veja abaixo:&lt;/p&gt;  &lt;div style="border-bottom: #d0d0d0 1px solid; border-left: #d0d0d0 1px solid; background-color: #f0f0f0; font-family: monospace; color: #006; border-top: #d0d0d0 1px solid; border-right: #d0d0d0 1px solid" class="csharp"&gt;   &lt;ol&gt;     &lt;li style="font: 130% &amp;#39;Courier New&amp;#39;, courier, monospace; color: #003030; vertical-align: top"&gt;       &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #0600ff"&gt;public&lt;/span&gt; frmReportViewer&lt;span style="color: #000000"&gt;(&lt;/span&gt;Stream rptStrem, ReportDataSource&lt;span style="color: #000000"&gt;[&lt;/span&gt;&lt;span style="color: #000000"&gt;]&lt;/span&gt; rptDataSources, ReportParameter&lt;span style="color: #000000"&gt;[&lt;/span&gt;&lt;span style="color: #000000"&gt;]&lt;/span&gt; rptParams&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;/div&gt;     &lt;/li&gt;      &lt;li style="font: 130% &amp;#39;Courier New&amp;#39;, courier, monospace; color: #003030; vertical-align: top"&gt;       &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #008000"&gt;:&lt;/span&gt; &lt;span style="color: #0600ff"&gt;this&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt; &lt;span style="color: #000000"&gt;{&lt;/span&gt;&lt;/div&gt;     &lt;/li&gt;      &lt;li style="font: 130% &amp;#39;Courier New&amp;#39;, courier, monospace; color: #003030; vertical-align: top"&gt;       &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&lt;/div&gt;     &lt;/li&gt;      &lt;li style="font: 130% &amp;#39;Courier New&amp;#39;, courier, monospace; color: #003030; vertical-align: top"&gt;       &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;Array.&lt;span style="color: #0600ff"&gt;ForEach&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;rptDataSources, &lt;span style="color: #0600ff"&gt;this&lt;/span&gt;.&lt;span style="color: #0000ff"&gt;reportViewer&lt;/span&gt;.&lt;span style="color: #0000ff"&gt;LocalReport&lt;/span&gt;.&lt;span style="color: #0000ff"&gt;DataSources&lt;/span&gt;.&lt;span style="color: #0000ff"&gt;Add&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;&lt;/div&gt;     &lt;/li&gt;      &lt;li style="color: #006060; vertical-align: top; font-weight: bold"&gt;       &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&lt;/div&gt;     &lt;/li&gt;      &lt;li style="font: 130% &amp;#39;Courier New&amp;#39;, courier, monospace; color: #003030; vertical-align: top"&gt;       &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #0600ff"&gt;this&lt;/span&gt;.&lt;span style="color: #0000ff"&gt;reportViewer&lt;/span&gt;.&lt;span style="color: #0000ff"&gt;LocalReport&lt;/span&gt;.&lt;span style="color: #0000ff"&gt;LoadReportDefinition&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;rptStrem&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;&lt;/div&gt;     &lt;/li&gt;      &lt;li style="font: 130% &amp;#39;Courier New&amp;#39;, courier, monospace; color: #003030; vertical-align: top"&gt;       &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&lt;/div&gt;     &lt;/li&gt;      &lt;li style="font: 130% &amp;#39;Courier New&amp;#39;, courier, monospace; color: #003030; vertical-align: top"&gt;       &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #0600ff"&gt;this&lt;/span&gt;.&lt;span style="color: #0000ff"&gt;reportViewer&lt;/span&gt;.&lt;span style="color: #0000ff"&gt;LocalReport&lt;/span&gt;.&lt;span style="color: #0000ff"&gt;SetParameters&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;rptParams&lt;span style="color: #000000"&gt;)&lt;/span&gt;&lt;span style="color: #008000"&gt;;&lt;/span&gt;&lt;/div&gt;     &lt;/li&gt;      &lt;li style="font: 130% &amp;#39;Courier New&amp;#39;, courier, monospace; color: #003030; vertical-align: top"&gt;       &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&amp;#160;&lt;/div&gt;     &lt;/li&gt;      &lt;li style="color: #006060; vertical-align: top; font-weight: bold"&gt;       &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"&gt;&lt;span style="color: #000000"&gt;}&lt;/span&gt;&lt;/div&gt;     &lt;/li&gt;   &lt;/ol&gt; &lt;/div&gt;  &lt;p&gt;Este é um construtor de um Form genérico que eu tenho para visualizar relatórios, nele eu recebo um Stream com o relatório, um array de fonte de dados (ou seja posso ter mais de uma fonte de dados) e um array de parâmetros, os dois arrays foram montados antes.   &lt;br /&gt;Agora ficou fácil, só preciso dizer para o RV as minhas fontes de dados, linha 4, a definição do relatório, linha 6, e os parâmetros, linha 8, e vóila… ele renderiza o relatório.&lt;/p&gt;  &lt;p&gt;Esta é apenas uma sugestão de como fazer uma arquitetura que os relatórios possam ser distribuídos em assemblys, ou seja dentro de dll’s, e o RV não precisa conhecer os relatórios previamente, como sempre é mostrado, através do code snnipt Choose Report do componente RV em modo Design.&lt;/p&gt;  &lt;p&gt;Qual a sua maneira?&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6953053-9175910935586842835?l=egomesbrandao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://egomesbrandao.blogspot.com/feeds/9175910935586842835/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6953053&amp;postID=9175910935586842835' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6953053/posts/default/9175910935586842835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6953053/posts/default/9175910935586842835'/><link rel='alternate' type='text/html' href='http://egomesbrandao.blogspot.com/2009/05/usando-relatorios-embedded-resource-com.html' title='Usando relatórios Embedded Resource com o Reporting Viewer'/><author><name>Brandão</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6953053.post-8011173859875249273</id><published>2009-05-20T12:56:00.000-03:00</published><updated>2009-05-20T13:13:51.603-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='carreira'/><title type='text'>Comentário sobre: Não sabemos contratar</title><content type='html'>&lt;p&gt;Comentando o poste do &lt;a href="http://unplugged.giggio.net/"&gt;Giovanni Bassi&lt;/a&gt;: &lt;a href="http://unplugged.giggio.net/unplugged/post/Nao-sabemos-contratar.aspx"&gt;Não sabemos contratar&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Muitas empresas quando são questionadas sobre a forma arcaica com que trabalham dizem que &amp;quot;lá a coisa é séria, não é baderna&amp;quot;. Mas existe uma grande diferença em liberdade e anarquia, cobrança por resultados e pressão desnecessária, e a lista segue. Mesmo indústrias mudaram os seus conceitos, algumas viram à anos que a mudança só traria benefícios.    &lt;br /&gt;Dois livros muito interessantes para ler sobre isso são do Ricardo Semler, dono da SEMCO, que mudou sua fábrica muito mais que muita empresa de software que diz trabalhar com alta tecnologia (&lt;a href="http://www.submarino.com.br/produto/1/1672779/voce+esta+louco!:+uma+vida+administrada+de+outra+forma"&gt;Você Está Louco!: uma Vida Administrada de Outra Forma&lt;/a&gt; e &lt;a href="http://www.submarino.com.br/produto/1/168336/virando+a+propria+mesa"&gt;Virando a Própria Mesa&lt;/a&gt;, para líderes de equipe já é uma literatura bem interessante).     &lt;br /&gt;O salário muitas vezes não é a coisa mais importante, eu tenho um amigo que ganhava muito bem, mas saiu da empresa pois o trabalho dele sub aproveitava a capacidade dele, e ele achava que não valia a pena. Acho que o que é importante deve ser exigido, mas qual a diferença para a empresa se o cara esta produzindo de calça ou bermuda? Até mesmo quando os clientes visitam a empresa, qual o problema? Se o cara produz muito, não atrasa o time, esta sempre em contato, não existe dependências com as tarefas dele, por que ele precisa preencher tabela e estar sempre naquele horário lá na empresa? O cara vai pegar trânsito, vai se estressar, tem dias que ele não vai mesmo estar de bom humor, e por aí vai...     &lt;br /&gt;Em uma entrevista o Ricardo Semler disse que estamos preparados para trabalhar a noite e fins de semanas inteiros se possível, mas não estamos preparados para terça-feira depois do almoço irmos para uma sessão de cinema... alguém já fez isso? Hehe... Eu consegui uma vez, e não me senti culpado!     &lt;br /&gt;&lt;a href="http://www.google.com.br/search?hl=pt-BR&amp;amp;q=domenico+de+massi&amp;amp;meta=&amp;amp;rlz=1I7GGLL_pt-BR"&gt;Domenico Di Masi&lt;/a&gt; prega o ócio criativo, hoje as pessoas envolvidas em desenvolvimento ágil dizem que o desenvolvimento de um software é mais uma atividades de humanas que exatas, por que medimos as pessoas como computadores, onde elas são apenas recursos que entregam horas de trabalho?&lt;/p&gt;  &lt;p&gt;Eu posso comprometer uma parte do meu salário para poder ter satisfação no meu trabalho, já recusei propostas que não iriam me sentir empolgado, com vontade realmente de trabalhar, mesmo que fossem para ganhar um pouco mais. Eu quero sentir prazer em fazer algo, em ver o software crescer, ir para o mercado. Quero sentir prazer em acordar cedo de manhã, por que eu quero, pegar um trânsito, e colocar em prática algo que eu estudei e pode acelerar o desenvolvimento de um software, pode trazer mais qualidade. Infelizmente raras são as empresas brasileiras que pensam no seu maior ativo: a pessoa sentada atrás da máquina.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6953053-8011173859875249273?l=egomesbrandao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://egomesbrandao.blogspot.com/feeds/8011173859875249273/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6953053&amp;postID=8011173859875249273' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6953053/posts/default/8011173859875249273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6953053/posts/default/8011173859875249273'/><link rel='alternate' type='text/html' href='http://egomesbrandao.blogspot.com/2009/05/comentario-sobre-nao-sabemos-contratar.html' title='Comentário sobre: Não sabemos contratar'/><author><name>Brandão</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6953053.post-6829056752417886401</id><published>2008-12-24T21:33:00.001-02:00</published><updated>2008-12-24T21:33:27.363-02:00</updated><title type='text'>Teste de formatação de código</title><content type='html'>&lt;pre class="csharp" name="code"&gt;&lt;p&gt;namespace ABCMVC2008.Model&lt;br /&gt;  &lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; class Customer&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private int _CustomerId;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public int CustomerId { get { return _CustomerId; } set { _CustomerId = value; } }&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public string FirstName { get; set; }&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public string LastName { get; set; }&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public string CompanyName { get; set; }&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public string eMailAddress { get; set; }&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public string PhoneNumber { get; set; }&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public string ModifiedDate { get; set; }&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;}&lt;/p&gt;&lt;/pre&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6953053-6829056752417886401?l=egomesbrandao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://egomesbrandao.blogspot.com/feeds/6829056752417886401/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6953053&amp;postID=6829056752417886401' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6953053/posts/default/6829056752417886401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6953053/posts/default/6829056752417886401'/><link rel='alternate' type='text/html' href='http://egomesbrandao.blogspot.com/2008/12/teste-de-formatao-de-cdigo.html' title='Teste de formatação de código'/><author><name>Brandão</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6953053.post-5492605524187057102</id><published>2008-07-28T21:41:00.003-03:00</published><updated>2008-07-28T22:27:26.958-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='mvc'/><category scheme='http://www.blogger.com/atom/ns#' term='banco de dados'/><category scheme='http://www.blogger.com/atom/ns#' term='oo'/><category scheme='http://www.blogger.com/atom/ns#' term='arquitetura'/><title type='text'>ABC MVC 2008 - parte 0.75</title><content type='html'>Não, não estou enrolando... Hehehe...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Eu esqueci que faremos acesso a base de dados, mas não vou ficar criando banco de dados por que não é o foco. Por isso resolvi usar um banco de dados pronto e não vai ser o antigo NorthWind!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Já que estamos usando o &lt;a href="http://www.microsoft.com/sql"&gt;MS SLQ Server&lt;/a&gt; 2005 usaremos o novo banco de dados AdventureWorks.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Quem baixou o &lt;a href="http://www.microsoft.com/express/sql/default.aspx"&gt;MS SQL Server 2005 Express&lt;/a&gt; percebeu que não vem bancos de dados de exemplo. O banco AdventureWorks tem que ser instalado a parte!&lt;br /&gt;O projeto foi movido para o &lt;a href="http://www.codeplex.com/"&gt;CodePlex&lt;/a&gt; e encontra-se disponível &lt;a href="http://www.codeplex.com/MSFTDBProdSamples"&gt;aqui&lt;/a&gt;, página do projeto.&lt;br /&gt;Especificamente os bancos para a versão 2005 estão &lt;a href="http://www.codeplex.com/MSFTDBProdSamples/Release/ProjectReleases.aspx?ReleaseId=4004"&gt;aqui&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Baixe o arquivo "AdventureWorksLT.msi" que é uma versão &lt;em&gt;light&lt;/em&gt; banco. A versão completa é a "AdventureWorksDB.msi", baixe ela também um dia poderá ser útil.&lt;br /&gt;&lt;br /&gt;Se você esta usando uma máquina 64bits, o seu SQL Server deverá ser a versão para 64bits e os bancos de dados de exemplo tem tem que ser dessa versão também!&lt;br /&gt;&lt;br /&gt;A instalação é simples, o famoso &lt;em&gt;"Next...Next...Finish"&lt;/em&gt;, ele coloca os arquivos .MDF e .LDF no pasta padrão &lt;strong&gt;"c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data".&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;Depois é só ir no Management Studio, e fazer o Attach do banco, clicando com o botão direito do mouse em cima de Databases, escolha a opção Attach, procure pelo banco na pasta indicada acima e... voilá! Esta no ar!&lt;br /&gt;&lt;br /&gt;DICA:&lt;br /&gt;Para terminar, vou deixar essa dica, para quem tem dificuldade em modelagem de banco de dados ou quer algum pronto para servir de base para a criação de algum projeto e o AdventureWork não tem o que precisa a Microsoft disponibiliza 10 bancos de dados de exemplo &lt;a href="http://www.microsoft.com/sql/editions/express/starterschemas.mspx"&gt;SQL Server 2005 Express Database Schemas&lt;/a&gt;, tem desde banco de Gerenciamento de contatos até e-Commerce, passando por Catálogo de Produtos.&lt;br /&gt;&lt;br /&gt;O próximo post será a parte 01, e vamos começar a aplicação ABC MVC!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6953053-5492605524187057102?l=egomesbrandao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://egomesbrandao.blogspot.com/feeds/5492605524187057102/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6953053&amp;postID=5492605524187057102' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6953053/posts/default/5492605524187057102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6953053/posts/default/5492605524187057102'/><link rel='alternate' type='text/html' href='http://egomesbrandao.blogspot.com/2008/07/abc-mvc-2008-parte-075.html' title='ABC MVC 2008 - parte 0.75'/><author><name>Brandão</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6953053.post-1362193430353619674</id><published>2008-07-28T10:00:00.003-03:00</published><updated>2008-07-28T22:27:26.959-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='mvc'/><category scheme='http://www.blogger.com/atom/ns#' term='oo'/><category scheme='http://www.blogger.com/atom/ns#' term='arquitetura'/><title type='text'>ABC MVC 2008 - parte 0.5</title><content type='html'>O código fonte deste projeto esta hospedado no &lt;a href="http://www.codeplex.com/"&gt;CodePlex&lt;/a&gt;, e como o projeto é para quem também esta iniciando vamos usar o &lt;a href="http://tortoisesvn.net/"&gt;TortoiseSVN&lt;/a&gt; que esta na versão 1.5.0, é só baixar o arquivo MSI e instalar. Não é necessária a instalação do &lt;a href="http://subversion.tigris.org/"&gt;Subversion&lt;/a&gt;, ele é um server, e nós precisamos só do client que é o Tortoise. Eu tenho instalado o &lt;a href="http://www.visualsvn.com/"&gt;VisualSVN&lt;/a&gt;, que para Windows parece ser a versão mais simples e fácil de ser instalada.&lt;br /&gt;&lt;br /&gt;Para conectar com o servidor do CodePlex, que usa o Team Foudation Server, usando o Tortoise deve-se usar o &lt;a href="http://www.codeplex.com/SvnBridge"&gt;SvnBridge&lt;/a&gt;, desenvolvido pela equipe do site.&lt;br /&gt;&lt;br /&gt;Eu criei o projeto na pasta Projects que o VS.Net cria dentro da pasta Documentos do Usuário.&lt;br /&gt;&lt;br /&gt;É possível baixar em qualquer lugar o projeto, basta clicar com o botão direito do mouse dentro de uma pasta vazia, e escolher a opção &lt;strong&gt;"SVN Checkout" &lt;/strong&gt;do menu de contexto.&lt;br /&gt;&lt;br /&gt;Conforme o projeto for evoluíndo é só atualizar o fonte, para isso clique com o botão direito do mouse dentro da pasta e escolha &lt;strong&gt;"SVN Update".&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;Quem tem uma licença do VS.Net, pode baixar &lt;a href="http://www.codeplex.com/CodePlex/Wiki/View.aspx?title=Obtaining%20the%20Team%20Explorer%20Client"&gt;aqui&lt;/a&gt; o Team Explorer, ele não vai funcionar com as versões Express, infelizmente!&lt;br /&gt;&lt;br /&gt;Qualquer dúvida entre em contato.&lt;br /&gt;Para quem quer saber mais sobre o Subversion e Tortoise saiu uma matéria na edição 07 de Fevereiro/Março da Mundo.Net, e &lt;a href="http://svnbook.red-bean.com/"&gt;aqui&lt;/a&gt; você pode baixar um livro sobre o Subversion.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6953053-1362193430353619674?l=egomesbrandao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://egomesbrandao.blogspot.com/feeds/1362193430353619674/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6953053&amp;postID=1362193430353619674' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6953053/posts/default/1362193430353619674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6953053/posts/default/1362193430353619674'/><link rel='alternate' type='text/html' href='http://egomesbrandao.blogspot.com/2008/07/abc-mvc-2008-parte-05-12.html' title='ABC MVC 2008 - parte 0.5'/><author><name>Brandão</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6953053.post-8121185658918661025</id><published>2008-07-25T11:51:00.003-03:00</published><updated>2008-07-28T22:33:24.420-03:00</updated><title type='text'>Ajude a sustentar a Wikipédia e outros projetos, sem colocar a mão no bolso, e concorra a um Eee PC!</title><content type='html'>&lt;div style="TEXT-ALIGN: justify"&gt;&lt;br /&gt;&lt;b&gt;Ajude a sustentar a Wikipédia e outros projetos, sem colocar a mão no bolso, e concorra a um Eee PC!&lt;/b&gt;&lt;br /&gt;…e também a pen drives, card drives, camisetas geeks, livros e mais! O &lt;a href="http://br-linux.org/"&gt;BR-Linux&lt;/a&gt; e o &lt;a href="http://efetividade.net/"&gt;Efetividade&lt;/a&gt; lançaram uma &lt;a href="http://br-linux.org/2008/campanha-wikipedia/"&gt;campanha&lt;/a&gt; para ajudar a Wikimedia Foundation e outros mantenedores de projetos que usamos no dia-a-dia on-line. Se você puder doar diretamente, ou contribuir de outra forma, são sempre melhores opções. Mas se não puder, veja as regras da promoção e &lt;a href="http://br-linux.org/2008/campanha-wikipedia/"&gt;participe&lt;/a&gt; - quanto mais divulgação, maior será a doação do BR-Linux e do Efetividade, e você ainda concorre a diversos brindes!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://br-linux.org/2008/campanha-wikipedia/trackback/"&gt;Por que estou participando &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Deixei de ser xiita à muito tempo, hoje eu uso Windows Vista, .Net, SQL Server. Porém amanhã eu não sei! Já tentei algumas vezes instalar o GNU/Linux, mas não me acostumei, sim, simplesmente isso, eu não me acostumei! Hoje acho mais interessante para mim o Windows. Mas vivo lendo sobre isso, e estou tentando subir uma VM com Ubuntu já faz alguns meses! :D&lt;br /&gt;Então estou participando pois acho que projetos do tipo da &lt;a href="http://pt.wikipedia.org/wiki/P%C3%A1gina_principal"&gt;Wikipedia&lt;/a&gt;, distros GNU/Linux, &lt;a href="http://code.google.com/android/"&gt;Android&lt;/a&gt;, são muito interessantes socialmente e até comercialmente! O avanço dos sistemas operacionais, banco de dados, linguagens de programação open source levou empresas privadas a melhorar seus produtos, então todo mundo ganha.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6953053-8121185658918661025?l=egomesbrandao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://egomesbrandao.blogspot.com/feeds/8121185658918661025/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6953053&amp;postID=8121185658918661025' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6953053/posts/default/8121185658918661025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6953053/posts/default/8121185658918661025'/><link rel='alternate' type='text/html' href='http://egomesbrandao.blogspot.com/2008/07/ajude-sustentar-wikipdia-e-outros.html' title='Ajude a sustentar a Wikipédia e outros projetos, sem colocar a mão no bolso, e concorra a um Eee PC!'/><author><name>Brandão</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6953053.post-4442996949404127859</id><published>2008-07-23T13:42:00.005-03:00</published><updated>2008-07-28T22:27:26.960-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='mvc'/><category scheme='http://www.blogger.com/atom/ns#' term='oo'/><title type='text'>ABC MVC 2008 - parte 0</title><content type='html'>Continuando o post anterior, vou iniciar um projeto voltado para exemplificação do padrão &lt;a href="http://pt.wikipedia.org/wiki/MVC"&gt;MVC&lt;/a&gt; e fazendo uso de &lt;a href="http://en.wikipedia.org/wiki/Plain_Old_CLR_Object"&gt;POCO&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Alerta: Não sou um especialista em MVC, OO, .Net, etc... Sou apenas um desenvolvedor e por ter muita curiosidade e vontade de melhorar o meu trabalho tenho estudado sobre os assuntos que vou escrever a partir de agora. Quaisquer críticas (positivas e negativas), sugestões, cometários serão bem recebidas, e tentarei responder a todas. Se cometer algum erro por favor entre em contato, continuo aprendendo e querendo aprender!&lt;/span&gt;&lt;br /&gt;Vamos lá!&lt;br /&gt;&lt;br /&gt;Esse post é apenas uma preparação, vou apenas colocar o que vou usar no desenvolvimento, tipo os utensílios e ingredientes de uma receita de bolo!&lt;br /&gt;&lt;br /&gt;Utensílios:&lt;br /&gt;&lt;br /&gt;- Vou usar o &lt;a href="http://www.microsoft.com/Express/Download/"&gt;MS Visual C# Express 2008 Edition&lt;/a&gt;, no fim da página do link você pode baixar uma imagem ISO com a instalação do VB.Net, C#, C++, Web Developer, e o MS SQL Express 2005. Inicialmente só é necessário o C#. E pode baixar a versão com o SP1 Beta, estou rodando ela sem problemas, mas não é para uso profissional.&lt;br /&gt;&lt;br /&gt;- Para a parte de acesso a dados vou usar a &lt;a href="http://msdn.microsoft.com/en-us/library/cc512464.aspx"&gt;MS Enterprise Library&lt;/a&gt; (atualmente uso a &lt;a href="http://msdn.microsoft.com/en-us/library/aa480453.aspx"&gt;versão 3.1&lt;/a&gt;, mas para este exemplo vou testar a 4.1 que já é para o FrameWork 3.5). Sei que existem soluções interessantes de O/R M, como &lt;a href="http://www.hibernate.org/343.html"&gt;NHinernate&lt;/a&gt; ou o &lt;a href="http://msdn.microsoft.com/en-us/library/bb425822.aspx"&gt;Linq To SQL&lt;/a&gt; no 3.5 e até o &lt;a href="http://msdn.microsoft.com/en-us/library/aa697427%28VS.80%29.aspx"&gt;Entity Framework&lt;/a&gt; já disponível no SP1 Beta, que merece um post a parte; porém no momento vai ser na mão mesmo, assim que não conhece ADO.Net vai conhecer um pouco, já que a Enterprise Library abstrai muita coisa.&lt;br /&gt;&lt;br /&gt;Os fontes do projeto como disse vou hospedar na web, para isso escolhi o &lt;a href="http://www.codeplex.com/"&gt;CodePlex&lt;/a&gt;, para quem não conhece é um site da Microsoft para hospedar projetos Open Source no estilo do &lt;a href="https://sourceforge.net/"&gt;SourceForge.Net&lt;/a&gt;. O legal é que se você tiver uma licença do &lt;a href="http://www.microsoft.com/brasil/msdn/visualstudio/default.mspx"&gt;Visual Studio .Net&lt;/a&gt; você pode baixar o Team Explorer para acessar o Team Foudation, que também é um produto da MS, e é o que hospeda os projetos do CodePlex.&lt;br /&gt;Porém como a idéia é possibilitar que não tem o VS.Net participar, vou usar:&lt;br /&gt;&lt;br /&gt;- &lt;a href="http://tortoisesvn.tigris.org/"&gt;TortoiseSVN&lt;/a&gt;, que tem integração com o Team Foudation.&lt;br /&gt;&lt;br /&gt;Vou fazer um post, chamarei de "parte 0.5", explicando um pouco sobre como instalar o Tortoise, comunicar com o CodePlex, etc...&lt;br /&gt;&lt;br /&gt;Para quem já conhece o Tortoise já pode baixar o projeto que esta aqui: &lt;a href="http://www.codeplex.com/abcmvc2008"&gt;ABC MVC 2008&lt;/a&gt;.&lt;br /&gt;Só tem o arquivo Solution do .Net, mas daí já fica pronto para quando eu atualizar!&lt;br /&gt;&lt;br /&gt;Até!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6953053-4442996949404127859?l=egomesbrandao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://egomesbrandao.blogspot.com/feeds/4442996949404127859/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6953053&amp;postID=4442996949404127859' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6953053/posts/default/4442996949404127859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6953053/posts/default/4442996949404127859'/><link rel='alternate' type='text/html' href='http://egomesbrandao.blogspot.com/2008/07/abc-mvc-2008-parte-0.html' title='ABC MVC 2008 - parte 0'/><author><name>Brandão</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6953053.post-8363968606872416582</id><published>2008-07-21T10:00:00.001-03:00</published><updated>2008-07-28T22:27:55.653-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='mvc'/><category scheme='http://www.blogger.com/atom/ns#' term='oo'/><category scheme='http://www.blogger.com/atom/ns#' term='arquitetura'/><title type='text'>Arquitetura MVC &lt;&gt; Camadas</title><content type='html'>Estou desenvolvendo um novo sistema baseado na arquitetura MVC, ou melhor, pensei que estava.&lt;br /&gt;&lt;div&gt;Ano passado participei da integração de um sistema legado ASP.Net com SAP que estava sendo implantado. O sistema já estava construído e basicamente deveríamos integrá-lo ao SAP usando Web Services disponibilizados através do serviço XI da SAP. Ou seja, ao invés de continuar buscando os dados no banco Oracle, iríamos agora buscar no SAP, através de Web Services.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;O sistema usava a arquitetura MVC. Usava? Bom, eu tinha uma DLL onde ficavam as classes Model, outra de Controller, tinha a interface gráfica em ASP.Net, mas eram somente camadas... Opa, mas MVC não são camadas?&lt;br /&gt;&lt;br /&gt;Esse foi o meu primeiro contato com MVC e a partir daí comecei a estudar mais sobre padrões e arquitetura, e lógico vi que era hora de me aprofundar em Orientação a Objetos... Sim isso mesmo, aprofundar.&lt;br /&gt;&lt;br /&gt;Eu vim do VB6 (por favor, VB6 é sim uma linguagem de gente grande!), quando comecei o ADO.Net estava sendo lançado, praticamente, logo em seguida tive contato com a arquitetura Win DNA (&lt;a href="http://en.wikipedia.org/wiki/Windows_DNA"&gt;Windows Distributed interNet Applications Architecture&lt;/a&gt;), como o link diz é um nome marketeiro para tecnologias que já existiam mas foram agrupadas em uma arquitetura (COM, COM+, antigo MTS; ADO, ActiveX, ASP). Na época a minha bíblia era o livro &lt;a href="http://www.submarino.com.br/books_productdetails.asp?ProdTypeId=1&amp;amp;ProdId=87125&amp;amp;St=WL126213"&gt;Mary Kirtland&lt;/a&gt;, posteriormente li também o livro do &lt;a href="http://www.submarino.com.br/books_productdetails.asp?Query=ProductPage&amp;amp;ProdTypeId=1&amp;amp;ProdId=175540&amp;amp;ST=SR"&gt;Fábio Câmara&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;E foi ai que surgiu para mim o conceito de camadas, dividir para conquistar, já que na época tínhamos o &lt;a href="http://www.google.com/url?sa=t&amp;amp;ct=res&amp;amp;cd=3&amp;amp;url=http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FDLL_hell&amp;amp;ei=v4KESPWgG5eY9QSh6fjXCw&amp;amp;usg=AFQjCNGciKUK58PY7jcONulFc5rO0WkCmg&amp;amp;sig2=22y6FMKMgwwjEfDaN-RKaw"&gt;DLL Hell&lt;/a&gt;, era muito bom você criar pequenos componentes que sofreriam manutenção em separado, e nada melhor do que juntar esses componentes por funcionalidades! Assim os componentes usados para a interface gráfica ficavam juntos, o de acesso a dados ficavam em outro, o que diminuía a possibilidade de dar um problemão quando algo coisa sofria manutenção, eu disse diminuía...&lt;br /&gt;&lt;br /&gt;Daí pra frente eu só desenvolvia em camadas, camadas lógicas, pois na verdade o software ficava instalado todo na máquina cliente, ou seja, eram instaladas várias DLL's, mas todas no mesmo lugar. Algum projeto saiu usando o COM+, aí tinhamos Tiers, componentes usados em interface gráfica ficava na máquina cliente e compoentes de negócio e banco de dados ficavam no servidor.&lt;br /&gt;&lt;br /&gt;Mas onde entra o MVC (&lt;a href="http://pt.wikipedia.org/wiki/MVC"&gt;http://pt.wikipedia.org/wiki/MVC&lt;/a&gt;) aí? Aí é que está... Não entra!! O MVC não é sinônimo de desenvolvimento em camadas! Nem em tiers! O MVC é um padrão de arquitetura, e ele é baseado no comportamento dos objetos. Sim comportamento!!&lt;br /&gt;Muitos de nós, principalmente que viemos do VB6, Win DNA, ...; começamos desenvolvendo em OO criando classes que tem os atributos como os RecordSets do ADO, ou seja somente dados! Mas um objeto por definição possui comportamento. Então não adianta criar uma classe de dados, como se fosse um RecordSet, uma classe de serviço como se fosse uma classe do VB6 (que sim, antes que alguém fale, não é orientado a objeto, porém chegava perto...), e ficar passeando pelas camadas, que isso é MVC. Aliás nem OO é, pois você não estará usando comportamentos dos objetos.&lt;br /&gt;&lt;br /&gt;Não vou chover no molhado explicando isso aqui, o &lt;a href="http://blog.fragmental.com.br/"&gt;Phillip Calçado Shoes&lt;/a&gt; já escreveu um artigo muito bom sobre isso, então usando um dos princípio de OO que é a reusabilidade leia os artigos &lt;a href="http://www.fragmental.com.br/wiki/index.php/MVC_e_Camadas"&gt;MVC e Camadas&lt;/a&gt; e &lt;a href="http://www.fragmental.com.br/wiki/index.php/Evitando_VOs_e_BOs"&gt;Evitando VO's e BO's&lt;/a&gt;, leia também as referências e acompanhe o blog dele! :D&lt;br /&gt;&lt;br /&gt;Na edição 46 da &lt;a href="http://www.devmedia.com.br/"&gt;.Net Magazine&lt;/a&gt; o Rodrigo Sendin escreveu um artigo sobre MVC, porém quem leu o artigo e ler os artigos do Phillip Calçado vai entender que a crítica do Rodrigo esta errada quanto ao padrão MVC.&lt;br /&gt;&lt;br /&gt;Bom se eu não vou explicar o que é MVC, nem camadas, nem BO ou VO, então pra que este post? Como eu disse estava desenvolvendo um projeto pensando estar usando MVC, no momento na versão 1.0 ele irá sair usando BO's, trafegando pelas camadas, etc... Mas estou monstando a arquitetura da versão 2.0 em MVC, não vou usar nenhum framework, pelo menos por enquanto.&lt;br /&gt;&lt;br /&gt;No próximo post vou começar uma série de artigos compartilhando minha experiência, principalmente com uso de objetos &lt;a href="http://en.wikipedia.org/wiki/Plain_Old_CLR_Object"&gt;POCO&lt;/a&gt;, pois percebo que no Brasil o uso de DataSet's é abusivo, logicamente para pequenos projetos é uma boa solução mas para projetos médios, ou com muitos acessos ao banco de dados o peso começa aumentar. E também vou dar um foco no acesso a dados. Vou publicar o código acho que no &lt;a href="http://www.codeplex.com/"&gt;CodePlex&lt;/a&gt; ou no &lt;a href="http://code.msdn.microsoft.com/"&gt;MSDN Code Gallery&lt;/a&gt;, ainda não sei qual é o mais indicado, daí é só baixar o código para estudar ou começar outro projeto em cima. Quem quiser se unir a empreitada é só entrar em contato.&lt;br /&gt;&lt;br /&gt;Espero que acompanhem, comentem, entrem em contato para trocarmos idéias.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6953053-8363968606872416582?l=egomesbrandao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://egomesbrandao.blogspot.com/feeds/8363968606872416582/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6953053&amp;postID=8363968606872416582' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6953053/posts/default/8363968606872416582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6953053/posts/default/8363968606872416582'/><link rel='alternate' type='text/html' href='http://egomesbrandao.blogspot.com/2008/02/arquitetura-mvc-camadas.html' title='Arquitetura MVC &lt;&gt; Camadas'/><author><name>Brandão</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6953053.post-1369395505097268370</id><published>2008-03-06T10:47:00.002-03:00</published><updated>2008-03-06T10:59:58.168-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='arquitetura'/><title type='text'>Ouça sempre o seu usuário</title><content type='html'>&lt;span style="font-family:verdana;font-size:85%;"&gt;Na aplicação desktop que estou desenvolvendo resolvi que o usuário poderia navegar pelos registros nas telas usando os famosos botões de Próximo, Último, Primeiro e Anterior.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Porém para isso tive que desenvolver um complexo sistema de Paginação já que peguei esse sistema já iniciado e não fazendo uso de nenhum framework. Em uma tabela de Itens de Estoque se eu tivesse 100.000 registros ou eu teria que trazer todas para a memória ou ir paginando.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Quando a navegação estava quase ficando madura, o Usuário pergunta: "Por que o sistema sempre traz o último registro e normalmente não é esse que eu quero?"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Homer Simpson: Doh! (Acho que é assim...)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;É verdade, nos desenvolvedores sempre temos o costume de bolar soluções mirabolantes para talvez poder aplicar aquela técnica nova que você leu a respeito ou aquela tecnologia que você nunca usou, aquela classe obscura do .Net Framework... mas no fim o usuário não precisa disso.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Agora quando o usuário entra na tela ela esta em branco, ele pode digitar o código do registro que quer ou chamar a Pesquisa. Talvez eu reaproveite o modelo de Paginação na Pesquisa, no futuro publico aqui. E talvez no futuro seja melhor ouvir o Usuário antes...&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6953053-1369395505097268370?l=egomesbrandao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://egomesbrandao.blogspot.com/feeds/1369395505097268370/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6953053&amp;postID=1369395505097268370' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6953053/posts/default/1369395505097268370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6953053/posts/default/1369395505097268370'/><link rel='alternate' type='text/html' href='http://egomesbrandao.blogspot.com/2008/03/oua-sempre-o-seu-usurio.html' title='Ouça sempre o seu usuário'/><author><name>Brandão</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6953053.post-4661048805033920348</id><published>2008-02-13T09:45:00.006-02:00</published><updated>2008-07-28T22:33:43.648-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='oo'/><title type='text'>Mudando Equals com Nullable Type</title><content type='html'>Quando queremos comparar dois objetos usamos o &lt;strong&gt;Equals&lt;/strong&gt; herdado de &lt;strong&gt;Object&lt;/strong&gt;, mas a comparação é feita comparando-se o tipo do objeto, não o seu conteúdo. Quando queremos comparar os conteúdos para saber se os objetos são iguais temos que sobreescrever o Equals, comparando os conteúdos. Pequeno ex.:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Public Class Item&lt;br /&gt;&lt;br /&gt;Private _ItemId As Integer&lt;br /&gt;Private _ReservaId As Integer&lt;br /&gt;&lt;br /&gt;Public Property ItemId() As Integer&lt;br /&gt;Get&lt;br /&gt;Return _ItemId&lt;br /&gt;End Get&lt;br /&gt;Set(ByVal value As Integer)&lt;br /&gt;_ItemId = value&lt;br /&gt;End Set&lt;br /&gt;End Property&lt;br /&gt;Public Property ReservaId() As Integer&lt;br /&gt;Get&lt;br /&gt;Return _ReservaId&lt;br /&gt;End Get&lt;br /&gt;Set(ByVal value As Integer)&lt;br /&gt;_ReservaId = value&lt;br /&gt;End Set&lt;br /&gt;End Property&lt;br /&gt;&lt;br /&gt;Public Overloads Function Equals(ByVal obj As Object) As Boolean&lt;br /&gt;Dim o As Item = CType(obj, Item)&lt;br /&gt;&lt;br /&gt;Return (Not (o Is Nothing) _&lt;br /&gt;AndAlso Me._ItemId = o._ItemId _&lt;br /&gt;AndAlso Me._ReservaId = o._ReservaId _&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;End Class&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Mas e se estivermos usando Nullable Types, ou tipos nulos, como mostrado abaixo?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Public Class Item&lt;br /&gt;&lt;br /&gt;Private _ItemId As Integer&lt;br /&gt;Private _ReservaId As Nullable (Of Integer)&lt;br /&gt;(...)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Quando tentamos ler a propriedade &lt;strong&gt;Value&lt;/strong&gt; de um tipo nulo e ele é "nulo" é lançada uma exceção, por isso temos que conferir antes se ele tem um valor na propriedade &lt;strong&gt;HasValue&lt;/strong&gt;.&lt;br /&gt;Poderíamos colocar um monte de If e tratar as &lt;strong&gt;Exceptions &lt;/strong&gt;com o bloco Try...Catch, porém a solução mais elegante é continuar usando a lógica &lt;a href="http://en.wikipedia.org/wiki/Boolean_algebra_%28introduction%29"&gt;Booleana&lt;/a&gt; em estado puro, veja abaixo:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Public Class Item &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Private _ItemId As Integer &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Private _ReservaId As Nullable (Of Integer)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    (...)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    Public Overloads Function Equals(ByVal obj As Object) As Boolean &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    Dim o As Item = CType(obj, Item) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    Return (Not (o Is Nothing) _ &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    AndAlso Me._ItemId = o._ItemId _ &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    AndAlso (Not Me._ReservaItemId.HasValue Xor o._ReservaItemId.HasValue) OrElse&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    Me._ReservaItemId.Value = o._ReservaItemId.Value) _&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;    )&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    End Function&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;End Class&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:0;"&gt;&lt;/span&gt;&lt;br /&gt;Quando as duas expressões de entrada do &lt;strong&gt;Xor&lt;/strong&gt; forem iguais a saída será &lt;strong&gt;False&lt;/strong&gt;, quando uma for diferente da outra será &lt;strong&gt;True&lt;/strong&gt;; por isso eu inverto o resultado com Not. O &lt;strong&gt;OrElse&lt;/strong&gt; é o conhecido &lt;strong&gt;Or&lt;/strong&gt; "curto-circuito", no caso ele irá avaliar a primeira expressão sendo ela verdadeira nem olha a segunda, o que aconteceria no caso do &lt;strong&gt;Or&lt;/strong&gt; simples.&lt;br /&gt;&lt;br /&gt;Fazendo o &lt;strong&gt;Xor&lt;/strong&gt; eu verifico se os dois tem valores &lt;strong&gt;Nulos&lt;/strong&gt; ou não, se eles tiverem valores nulos eu não posso verificar o valor, na propriedade &lt;strong&gt;Value&lt;/strong&gt;, pois não existe; mas isso não quer dizer que eles não sejam iguais quando os dois são nulos, simplesmente eles são &lt;strong&gt;Nulos&lt;/strong&gt;! :D&lt;br /&gt;&lt;br /&gt;O pulo do gato então é sendo os dois &lt;strong&gt;Nulos&lt;/strong&gt; é retornado &lt;strong&gt;True&lt;/strong&gt; com o &lt;strong&gt;Xor&lt;/strong&gt;, e o &lt;strong&gt;OrElse&lt;/strong&gt; não verifica a segunda expressão, ou no caso de um deles ter valor e o outro não o curto-circuito impede de verificar a segunda expressão, nos dois casos não é lançada uma &lt;strong&gt;Exception&lt;/strong&gt;. Boole puro!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6953053-4661048805033920348?l=egomesbrandao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://egomesbrandao.blogspot.com/feeds/4661048805033920348/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6953053&amp;postID=4661048805033920348' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6953053/posts/default/4661048805033920348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6953053/posts/default/4661048805033920348'/><link rel='alternate' type='text/html' href='http://egomesbrandao.blogspot.com/2008/02/mudando-equals-com-nullable-type.html' title='Mudando Equals com Nullable Type'/><author><name>Brandão</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6953053.post-8852141715028207310</id><published>2008-01-29T17:25:00.000-02:00</published><updated>2008-01-29T17:40:24.195-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='winforms'/><title type='text'>Bind com Complex Object no Windows Forms</title><content type='html'>Estou a vários dias tentando fazer um Bind com Objetos Complexos ou Objetos de Negócios ou ainda Business Objects... sem sucesso.&lt;br /&gt;&lt;br /&gt;Estou buscando em várias fontes e tentando vários contatos através de fórums, e estou abismado, pois é muito difícil encontrar quem use, só mesmo no fórum norte-americano do MSDN.&lt;br /&gt;&lt;br /&gt;O pessoal usa mesmo DataSet e DataTable.&lt;br /&gt;&lt;br /&gt;Vou tentar publicar o que eu estou fazendo e as soluções para servir de exemplo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6953053-8852141715028207310?l=egomesbrandao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://egomesbrandao.blogspot.com/feeds/8852141715028207310/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6953053&amp;postID=8852141715028207310' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6953053/posts/default/8852141715028207310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6953053/posts/default/8852141715028207310'/><link rel='alternate' type='text/html' href='http://egomesbrandao.blogspot.com/2008/01/bind-com-complex-object-no-windows.html' title='Bind com Complex Object no Windows Forms'/><author><name>Brandão</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6953053.post-7586197653491861164</id><published>2007-07-28T11:54:00.000-03:00</published><updated>2007-07-28T12:03:37.112-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='ie'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><title type='text'>Vulnerabilidades</title><content type='html'>&lt;span style="font-family:arial;"&gt;Já fui do grupo que briga em uma cruzada infinita para provar que a plataforma que usa é melhor que a do outro, mas cheguei a conclusão que isto é apenas uma questão de escolha pessoal! Sim... a tecnologia está tão difundida que não existe isso de "o meu é melhor que o seu", e todos tem problemas.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;No entanto quando encontro uma notícia como essa &lt;a href="http://www.computerworld.com.sg/ShowPage.aspx?pagetype=2&amp;articleid=5857&amp;amp;pubid=3&amp;tab=Home&amp;amp;issueid=115"&gt;Mozilla admits Firefox is flawed just like IE&lt;/a&gt; eu sou obrigado a espalhá-la. Pois uma coisa que eu detesto é a arrogância. Todos tem problemas, uns maiores, outros menores. E guspir para cima só dá nisso! Como alguns anos atrás numa campanha de uma empresa chamada de &lt;strong&gt;Unbreakble&lt;/strong&gt;, alguém se lembra?&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6953053-7586197653491861164?l=egomesbrandao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://egomesbrandao.blogspot.com/feeds/7586197653491861164/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6953053&amp;postID=7586197653491861164' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6953053/posts/default/7586197653491861164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6953053/posts/default/7586197653491861164'/><link rel='alternate' type='text/html' href='http://egomesbrandao.blogspot.com/2007/07/vulnerabilidades.html' title='Vulnerabilidades'/><author><name>Brandão</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6953053.post-116528871894632530</id><published>2006-12-05T01:16:00.000-02:00</published><updated>2006-12-05T01:18:38.963-02:00</updated><title type='text'>Parado...</title><content type='html'>&lt;span style="font-family:verdana;"&gt;Mais uma vez eu comecei e não continuei...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Bom... estou desenvolvendo um projeto em ASP.NET, pra começar a mexer novamente, embora o meu interesse não seja Web todo mundo hoje parece que só desenvolve Web. Por que será?&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Eu penso que existem coisas que devem ser desenvolvidas em Web, outras já não tem o menor sentido!&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Com a facilidade de deploy do VS.NET, não tem o por que de tudo ser Web, você perde muito em interface.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6953053-116528871894632530?l=egomesbrandao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://egomesbrandao.blogspot.com/feeds/116528871894632530/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6953053&amp;postID=116528871894632530' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6953053/posts/default/116528871894632530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6953053/posts/default/116528871894632530'/><link rel='alternate' type='text/html' href='http://egomesbrandao.blogspot.com/2006/12/parado.html' title='Parado...'/><author><name>Brandão</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6953053.post-116275676572765282</id><published>2006-11-05T17:50:00.000-02:00</published><updated>2006-11-05T17:59:25.740-02:00</updated><title type='text'>Message.Box("Olá mundo!");</title><content type='html'>&lt;span style="font-family:verdana;"&gt;Criei este espaço em 2004 mas não cheguei a fazer nada com ele, porém como comecei a estudar .NET novamente vou postar as minhas dicas aqui, e quem sabe alguém responda com dicas também!&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;Apesar de ter uma experiência básica em .NET 1.1 estou começando do início novamente mas já com a versão 2.0, depois de tanto tempo com 4GL as coisas voltam a ficar confusas como quando começamos a estudar OO; mas nada que não possamos reverter.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;Bom, de início estou com o livrinho C# Start que veio com o meu C# 2002 que ganhei no MSDN Brasil, em 2003, mas ele só serviu por algumas horas para dar uma lembrada na sintaxe.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;Estou desenvolvendo um sisteminha que eu já tinha feito em 2003 para VB6/COM+...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;E agora com o framework 2.0 tem muita coisa nova, e também o famigerado 3.0, que é e não é, uma evolução do 2.0. Nem bem cheguei a ver o Remoting na época do lançamento do 2.0 e já estamos com o WCF (3.0).&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;O negócio é ir de vagar que se vai longe.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;No próximo post eu publico uma lista de sites que uso para pesquisa e nos estudos.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;Abraço!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6953053-116275676572765282?l=egomesbrandao.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://egomesbrandao.blogspot.com/feeds/116275676572765282/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6953053&amp;postID=116275676572765282' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6953053/posts/default/116275676572765282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6953053/posts/default/116275676572765282'/><link rel='alternate' type='text/html' href='http://egomesbrandao.blogspot.com/2006/11/messageboxol-mundo.html' title='Message.Box(&quot;Olá mundo!&quot;);'/><author><name>Brandão</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
