<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://pontonetpt.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"><channel><title>pontoNETpt</title><link>http://pontonetpt.com/blogs/</link><description>A comunidade PontoNetPT está direccionada a todos os programadores que trabalhem com a plataforma .NET.</description><dc:language>en-US</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>Visual Studio 2010 RC on MSDN</title><link>http://pontonetpt.com/blogs/joaocardoso/archive/2010/02/09/visual-studio-2010-rc-on-msdn.aspx</link><pubDate>Tue, 09 Feb 2010 00:34:19 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:38552</guid><dc:creator>João Cardoso</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;EN&lt;/p&gt;  &lt;p&gt;Visual Studio 2010 RC has been released to MSDN. Get it while its hot. :)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;PT&lt;/p&gt;  &lt;p&gt;Visual Studio 2010 RC já disponível no MSDN. Apanhem-no enquanto está quentinho. :)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.com/aggbug.aspx?PostID=38552" width="1" height="1"&gt;</description></item><item><title>Book review: Deadline</title><link>http://pontonetpt.com/blogs/luisabreu/archive/2010/02/08/book-review-deadline.aspx</link><pubDate>Mon, 08 Feb 2010 18:43:14 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:38551</guid><dc:creator>Luis Abreu</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;In this last weekend I was a little burnt out, so I decided it was time to relax. And that’s why I’ve decided to have a go at Tom DeMarco’s &lt;a href="http://www.amazon.com/Deadline-Novel-About-Project-Management/dp/0932633390/ref=sr_1_5?ie=UTF8&amp;amp;s=books&amp;amp;qid=1265653800&amp;amp;sr=8-5"&gt;Deadline: a Novel About Project Management&lt;/a&gt;. I guess this is an interesting (and different) way of presenting several important aspects associated with project management: the author tells us the stories of Mr. Thompkins as he is put in charge of Morovia’s sfotware development. Overall, I guess this is really an funny reading, though I’m not sure if this book is for someone that is getting started with project management. I’m giving it an 8/10.&lt;/p&gt;
[Crossposted from http://msmvps.com/blogs/luisabreu]&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.com/aggbug.aspx?PostID=38551" width="1" height="1"&gt;</description><category domain="http://pontonetpt.com/blogs/luisabreu/archive/tags/Books/default.aspx">Books</category></item><item><title>Três Formas de Criar Um Objecto</title><link>http://pontonetpt.com/blogs/ricardoperes/archive/2010/02/08/tr-234-s-formas-de-criar-um-objecto.aspx</link><pubDate>Mon, 08 Feb 2010 10:30:21 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:38549</guid><dc:creator>Ricardo Peres</dc:creator><slash:comments>0</slash:comments><description>   &lt;script type="text/javascript" src="http://alexgorbatchev.com/pub/sh/2.0.320/scripts/shCore.js"&gt;&lt;/script&gt;  &lt;script type="text/javascript" src="http://alexgorbatchev.com/pub/sh/2.0.320/scripts/shBrushCSharp.js"&gt;&lt;/script&gt;   &lt;p&gt;Divirtam-se!&lt;/p&gt; &lt;pre class="brush: csharp"&gt;
Type type = typeof(StringBuilder);	//pode ser qualquer tipo
ConstructorInfo ci = type.GetConstructor(new Type [ 0 ]);
Stopwatch watch = new Stopwatch();

watch.Start();
			
for (Int32 i = 0; i &amp;lt; 100; ++i)
{
	StringBuilder obj = Activator.CreateInstance(type) as StringBuilder;
}

Int64 time1 = watch.ElapsedTicks;

watch.Reset();

watch.Start();

for (Int32 i = 0; i &amp;lt; 100; ++i)
{
	StringBuilder obj = ci.Invoke(null) as StringBuilder;
}

Int64 time2 = watch.ElapsedTicks;

DynamicMethod m = new DynamicMethod(String.Empty, typeof(Object), null, type, true);
			
ILGenerator il = m.GetILGenerator();
Func&amp;lt;Object&amp;gt; creator = m.CreateDelegate(typeof(Func&amp;lt;Object&amp;gt;)) as Func&amp;lt;Object&amp;gt;;
il.Emit(OpCodes.Newobj, ci);
il.Emit(OpCodes.Ret);

Func&amp;lt;Object&amp;gt; creator = m.CreateDelegate(typeof(Func&amp;lt;Object&amp;gt;)) as Func&amp;lt;Object&amp;gt;;

watch.Reset();

watch.Start();

for (Int32 i = 0; i &lt;/pre&gt;

&lt;a class="addthis_button" href="http://www.addthis.com/bookmark.php?v=250&amp;amp;pub=xa-4a96c06008dc31e0"&gt;
	&lt;img style="border-bottom:0px;border-left:0px;border-top:0px;border-right:0px;" alt="Bookmark and Share" src="http://s7.addthis.com/static/btn/v2/lg-share-en.gif" width="125" height="16" /&gt;
&lt;/a&gt;
&lt;script type="text/javascript" src="http://s7.addthis.com/js/250/addthis_widget.js?pub=xa-4a96c06008dc31e0"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="http://shots.snap.com/ss/7dcf59af71ae4ef1d02a114a733595f1/snap_shots.js"&gt;&lt;/script&gt;

&lt;script type="text/javascript"&gt;
SyntaxHighlighter.config.clipboardSwf = &amp;#39;http://alexgorbatchev.com/pub/sh/2.0.320/scripts/clipboard.swf&amp;#39;;
SyntaxHighlighter.brushes.CSharp.aliases = [&amp;#39;c#&amp;#39;, &amp;#39;c-sharp&amp;#39;, &amp;#39;csharp&amp;#39;];
SyntaxHighlighter.all();
&lt;/script&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.com/aggbug.aspx?PostID=38549" width="1" height="1"&gt;</description><category domain="http://pontonetpt.com/blogs/ricardoperes/archive/tags/.NET/default.aspx">.NET</category><category domain="http://pontonetpt.com/blogs/ricardoperes/archive/tags/Reflection/default.aspx">Reflection</category></item><item><title>VB.NET: Namespace Microsoft.VisualBasic</title><link>http://pontonetpt.com/blogs/jpaulino/archive/2010/02/05/vb-net-namespace-microsoft-visualbasic.aspx</link><pubDate>Fri, 05 Feb 2010 22:17:44 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:38548</guid><dc:creator>Jorge Paulino</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;O Visual Basic.NET (VB.NET) é uma sucessão do Visual Basic 6.0 (VB6) e por uma questão de compatibilidade, e facilidade de migração dos programadores e das aplicações, muitas das funções e objectos, que estavam disponíveis no VB6, estão também disponíveis no VB.NET. &lt;/p&gt;  &lt;p&gt;Estas funções e objectos estão agrupadas no &lt;i&gt;namespace&lt;/i&gt; Microsoft.VisualBasic e fazem parte do conjunto de referências base de cada projecto, ou seja, quando é criado um novo projecto, já existe uma referência a este &lt;i&gt;namespace,&lt;/i&gt; que poderá ser utilizado em todo o projecto.&lt;/p&gt;  &lt;p&gt;Existem no entanto alternativas para essas funções e objectos, que estão disponíveis em alguns &lt;i&gt;namespaces&lt;/i&gt; da plataforma .NET. &lt;/p&gt;  &lt;p&gt;Por uma questão de boas práticas de programação é bom utilizar as funções e objectos mais recentes, pois estas são as que irão prevalecer (nunca se sabe se as outras serão descontinuadas e removidas de edições futuras).&lt;/p&gt;  &lt;p&gt;Para desactivar esta referência do projecto e obrigar desta forma à utilização dos novos métodos (&lt;strong&gt;pessoalmente recomendo que se faça&lt;/strong&gt;), pode-se fazer o seguinte:&lt;/p&gt;  &lt;p&gt;1 - Duplo clique em My Project ou menu Project – Properties&lt;img style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" border="0" src="http://2.bp.blogspot.com/_H0B0Un367IM/S2s9xefbO5I/AAAAAAAAAV4/FQ2MTmojOpI/s400/vbnamespace4.png" alt="" /&gt;     &lt;br /&gt;2 - Seleccionar a TAB References. Aqui estão as referências que estão adicionadas ao projecto.     &lt;br /&gt;&lt;img style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" border="0" src="http://4.bp.blogspot.com/_H0B0Un367IM/S2s9w4z3TNI/AAAAAAAAAVo/_vOTvsk1mHw/s1600/vbnamespace2.png" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;Podemos ainda, e dentro das referências, clicar em “Unused References” para verificarmos que referências não estão a ser utilizadas no nosso projecto. Isto não irá reduzir o tamanho do ficheiro mas reduzirá o número de dependências do projecto.&lt;img style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" border="0" src="http://4.bp.blogspot.com/_H0B0Un367IM/S2s9wpOg_9I/AAAAAAAAAVg/La6nu_kkj2E/s1600/vbnamespace1.png" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;3 - Finalmente, nos namespaces importados para o projecto, retiramos a selecção do namespace Microsoft.VisualBasic.   &lt;br /&gt;&lt;img style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" border="0" src="http://1.bp.blogspot.com/_H0B0Un367IM/S2s9xKU_UwI/AAAAAAAAAVw/cjBCzI7DCsU/s1600/vbnamespace3.png" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;Isto irá obrigar a usar as novas funções no projecto!&lt;/p&gt;  &lt;p&gt;Além disso existem funções que estão disponíveis em diferentes &lt;em&gt;namespaces&lt;/em&gt; e que poderão provocar alguns problemas, como é o caso de Left(), Len(), etc.&lt;/p&gt;  &lt;p align="center"&gt;&amp;#160; &lt;br /&gt;&lt;strong&gt;&lt;u&gt;Alguns exemplos de conversão funções de VB6 para VB.NET&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Formatar números:&lt;/p&gt;  &lt;blockquote&gt;   &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:569ca12f-cafc-446c-820a-523836b87bce" class="wlWriterEditableSmartContent"&gt; &lt;div class="le-pavsc-container"&gt; &lt;div style="background-color:#f4f4f4;overflow:auto;padding:2px 5px;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;&amp;#39; VB6&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; num &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt; = 12345&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Debug.WriteLine(Format(num, &lt;span style="color:#a31515;"&gt;&amp;quot;#,00&amp;quot;&lt;/span&gt;))&lt;br /&gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;&amp;#39; VB.NET&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; num &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt; = 12345&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Debug.WriteLine(num.ToString(&lt;span style="color:#a31515;"&gt;&amp;quot;#,00&amp;quot;&lt;/span&gt;))&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/blockquote&gt;  &lt;p&gt;Retirar X caracteres à esquerda:&lt;/p&gt;  &lt;blockquote&gt;   &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:617581f6-90a5-426f-8e1b-860ec1fba93f" class="wlWriterEditableSmartContent"&gt; &lt;div class="le-pavsc-container"&gt; &lt;div style="background-color:#f4f4f4;overflow:auto;padding:2px 5px;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;&amp;#39; VB6&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; num &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt; = 12345&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Debug.WriteLine(Microsoft.VisualBasic.Left(num, 2))&lt;br /&gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;&amp;#39; VB.NET&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; num &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt; = 12345&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Debug.WriteLine(num.ToString.Substring(0, 2))&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/blockquote&gt;  &lt;p&gt;Retirar X caracteres do meio de uma string:&lt;/p&gt;  &lt;blockquote&gt;   &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:0a351fcd-17c6-4572-8701-2de115d739f4" class="wlWriterEditableSmartContent"&gt; &lt;div class="le-pavsc-container"&gt; &lt;div style="background-color:#f4f4f4;overflow:auto;padding:2px 5px;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;&amp;#39; VB6&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; num &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt; = 12345&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Debug.WriteLine(Microsoft.VisualBasic.Mid(num, 1, 1))&lt;br /&gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;&amp;#39; VB.NET&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; num &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt; = 12345&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Debug.WriteLine(num.ToString.Substring(0, 1))&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/blockquote&gt;  &lt;p&gt;Verifica qual o código ascii de um caracter:    &lt;br /&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:1a5ba31a-b829-4ded-bfa8-d40b41bd9330" class="wlWriterEditableSmartContent"&gt; &lt;div class="le-pavsc-container"&gt; &lt;div style="background-color:#f4f4f4;overflow:auto;padding:2px 5px;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;&amp;#39; VB6&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Debug.WriteLine(Asc(&lt;span style="color:#a31515;"&gt;&amp;quot;A&amp;quot;&lt;/span&gt;))&lt;br /&gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;&amp;#39; VB.NET&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Debug.WriteLine(Convert.ToByte(&lt;span style="color:#a31515;"&gt;&amp;quot;A&amp;quot;c&lt;/span&gt;))&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/blockquote&gt;  &lt;p&gt;Converte um código ascii no seu caracter:&lt;/p&gt;  &lt;blockquote&gt;   &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:34dfa32d-6c64-4182-94a3-9434dafdd26b" class="wlWriterEditableSmartContent"&gt; &lt;div class="le-pavsc-container"&gt; &lt;div style="background-color:#f4f4f4;overflow:auto;padding:2px 5px;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;&amp;#39; VB6&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Debug.WriteLine(Chr(65))&lt;br /&gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;&amp;#39; VB.NET&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Debug.WriteLine(Convert.ToChar(65))&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/blockquote&gt;  &lt;p&gt;Mostra a data/hora actual:&lt;/p&gt;  &lt;blockquote&gt;   &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:91cddad1-10e0-4a55-abec-9e7b8f53ec28" class="wlWriterEditableSmartContent"&gt; &lt;div class="le-pavsc-container"&gt; &lt;div style="background-color:#f4f4f4;overflow:auto;padding:2px 5px;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;&amp;#39; VB6&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Debug.WriteLine(Now.ToString)&lt;br /&gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;&amp;#39; VB.NET&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Debug.WriteLine(DateTime.Now.ToString)&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/blockquote&gt;  &lt;p&gt;Mostra uma mensagem no ecrã:&lt;/p&gt;  &lt;blockquote&gt;   &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:8add2971-a2e1-40c6-8f2c-06a3008fd463" class="wlWriterEditableSmartContent"&gt; &lt;div class="le-pavsc-container"&gt; &lt;div style="background-color:#f4f4f4;overflow:auto;padding:2px 5px;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;&amp;#39; VB6&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MsgBox(&lt;span style="color:#a31515;"&gt;&amp;quot;teste!&amp;quot;&lt;/span&gt;)&lt;br /&gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;&amp;#39; VB.NET&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MessageBox.Show(&lt;span style="color:#a31515;"&gt;&amp;quot;teste!&amp;quot;&lt;/span&gt;)&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/blockquote&gt;  &lt;p&gt;Converte para Inteiro:&lt;/p&gt;  &lt;blockquote&gt;   &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:893dd240-3cba-44ba-8b54-f2d0659b3769" class="wlWriterEditableSmartContent"&gt; &lt;div class="le-pavsc-container"&gt; &lt;div style="background-color:#f4f4f4;overflow:auto;padding:2px 5px;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;&amp;#39; VB6&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Debug.WriteLine(&lt;span style="color:#0000ff;"&gt;CInt&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;123&amp;quot;&lt;/span&gt;))&lt;br /&gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;&amp;#39; VB.NET&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Debug.WriteLine(&lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt;.Parse(&lt;span style="color:#a31515;"&gt;&amp;quot;123&amp;quot;&lt;/span&gt;))&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/blockquote&gt;  &lt;p&gt;Converte para String:&lt;/p&gt;  &lt;blockquote&gt;   &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:f1542f78-2397-4cca-a974-de458d38e949" class="wlWriterEditableSmartContent"&gt; &lt;div class="le-pavsc-container"&gt; &lt;div style="background-color:#f4f4f4;overflow:auto;padding:2px 5px;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;&amp;#39; VB6&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; num &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt; = 12345&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Debug.WriteLine(&lt;span style="color:#0000ff;"&gt;CStr&lt;/span&gt;(num))&lt;br /&gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;&amp;#39; VB.NET&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; num &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt; = 12345&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Debug.WriteLine(num.ToString)&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/blockquote&gt;  &lt;p&gt;Verifica se uma expressão é numérica:&lt;/p&gt;  &lt;blockquote&gt;   &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:8b745a5a-1f62-4439-9d08-3288fa080c2f" class="wlWriterEditableSmartContent"&gt; &lt;div class="le-pavsc-container"&gt; &lt;div style="background-color:#f4f4f4;overflow:auto;padding:2px 5px;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;&amp;#39; VB6&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; num &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt; = &lt;span style="color:#a31515;"&gt;&amp;quot;12345&amp;quot;&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;If&lt;/span&gt; IsNumeric(num) &lt;span style="color:#0000ff;"&gt;Then&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;&amp;#39; verdadeiro&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;&amp;#39; VB.NET&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; num &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt; = &lt;span style="color:#a31515;"&gt;&amp;quot;12345&amp;quot;&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; result &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;If&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt;.TryParse(num, result) &lt;span style="color:#0000ff;"&gt;Then&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;&amp;#39; verdadeiro e a vari&amp;#225;vel result&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;&amp;#39; fica com o resultado em inteiro&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/blockquote&gt;  &lt;p&gt;Verifica se uma expressão é uma data válida:&lt;/p&gt;  &lt;blockquote&gt;   &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:3de081b6-e744-49b0-b5bc-75529ae1c016" class="wlWriterEditableSmartContent"&gt; &lt;div class="le-pavsc-container"&gt; &lt;div style="background-color:#f4f4f4;overflow:auto;padding:2px 5px;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;&amp;#39; VB6&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; data &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt; = &lt;span style="color:#a31515;"&gt;&amp;quot;5-2-2010&amp;quot;&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;If&lt;/span&gt; IsDate(data) &lt;span style="color:#0000ff;"&gt;Then&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;&amp;#39; verdadeiro&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;&amp;#39; VB.NET&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; data &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt; = &lt;span style="color:#a31515;"&gt;&amp;quot;5-2-2010&amp;quot;&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; dt &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; DateTime&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;If&lt;/span&gt; DateTime.TryParse(data, dt) &lt;span style="color:#0000ff;"&gt;Then&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;&amp;#39; verdadeiro e a vari&amp;#225;vel dt&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;&amp;#39; fica com o resultado como DateTime&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Existem muitos mais exemplos, mas estes servem para mostrar algumas das formas de como podemos substituir as antigas funções do VB6 e começar a programar à &lt;em&gt;“.NET way”&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Espero que ajude!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.com/aggbug.aspx?PostID=38548" width="1" height="1"&gt;</description><category domain="http://pontonetpt.com/blogs/jpaulino/archive/tags/VB.NET/default.aspx">VB.NET</category></item><item><title>Ebook Entity Framework Gratuíto</title><link>http://pontonetpt.com/blogs/guilhermecardoso/archive/2010/02/04/ebook-entity-framework-gratu-237-to.aspx</link><pubDate>Thu, 04 Feb 2010 17:47:00 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:38547</guid><dc:creator>Guilherme Cardoso</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Apesar de j&amp;aacute; ter sido lan&amp;ccedil;ado em Dezembro de 2008, n&amp;atilde;o deixa de ser&amp;nbsp; um bom recurso.&lt;br /&gt;O livro foi escrito por Zeeshan Hirani e &amp;eacute; composto por 514 p&amp;aacute;ginas.&lt;/p&gt;
&lt;p&gt;N&amp;atilde;o foi muito trabalhado a n&amp;iacute;vel de aspecto, mas o que interessa &amp;eacute; o conte&amp;uacute;do dele.&lt;/p&gt;
&lt;p&gt;Para fazerem download gratu&amp;iacute;to: &lt;a href="http://weblogs.asp.net/zeeshanhirani/archive/2008/12/18/my-christmas-present-to-the-entity-framework-community.aspx"&gt;http://weblogs.asp.net/zeeshanhirani/archive/2008/12/18/my-christmas-present-to-the-entity-framework-community.aspx&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.com/aggbug.aspx?PostID=38547" width="1" height="1"&gt;</description></item><item><title>Silverlight: Estruturar com a Grid</title><link>http://pontonetpt.com/blogs/guilhermecardoso/archive/2010/02/03/silverlight-estruturar-com-a-grid.aspx</link><pubDate>Wed, 03 Feb 2010 16:45:00 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:38546</guid><dc:creator>Guilherme Cardoso</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Quando hoje comecei a ler o Livro &lt;i&gt;&amp;quot;Pro Silverlight 3 in C#&amp;quot;&lt;/i&gt;, comecei a aperceber-me que tinha uma ideia totalmente errada de &lt;b&gt;Silverlight&lt;/b&gt;. &lt;br /&gt;Estava mentalizado que ia usar html (divs para estruturar por exemplo). Mas n&amp;atilde;o!&lt;/p&gt;
&lt;p&gt;S&amp;atilde;o usadas &lt;i&gt;containers&lt;/i&gt; para estruturar a aplica&amp;ccedil;&amp;atilde;o, e a mais usada para efeito &amp;eacute; a &lt;b&gt;Grid&lt;/b&gt;.&lt;br /&gt;A &lt;b&gt;Grid &lt;/b&gt;&amp;eacute; como uma tabela que organiza os elementos em colunas e linhas. Uma diferen&amp;ccedil;a que confunde bastante a &amp;iacute;nicio entre as Tabelas tradicionais em HTML e as &lt;b&gt;Grid&lt;/b&gt;, s&amp;atilde;o a forma como organizamos os elementos de cada c&amp;eacute;lula.&lt;/p&gt;
&lt;p&gt;Numa tabela em HTML far&amp;iacute;amos algo do g&amp;ecirc;nero:&lt;/p&gt;
&lt;pre style="color:#000000;background-color:#eeeeee;font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="color:#bb7977;font-weight:bold;"&gt;&amp;lt;table&lt;/span&gt; &lt;span style="color:#8080c0;font-weight:bold;"&gt;width&lt;/span&gt;=&lt;span style="color:#a68500;"&gt;&amp;quot;100%&amp;quot;&lt;/span&gt;&lt;span style="color:#bb7977;font-weight:bold;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#bb7977;font-weight:bold;"&gt;&amp;lt;tr&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#bb7977;font-weight:bold;"&gt;&amp;lt;td&lt;/span&gt; &lt;span style="color:#8080c0;font-weight:bold;"&gt;width&lt;/span&gt;=&lt;span style="color:#a68500;"&gt;&amp;quot;200px&amp;quot;&lt;/span&gt;&lt;span style="color:#bb7977;font-weight:bold;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;Coluna da Esquerda com &lt;span style="color:#800080;font-weight:bold;"&gt;200&lt;/span&gt; pixeis de largura&lt;br /&gt;&lt;span style="color:#bb7977;font-weight:bold;"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#bb7977;font-weight:bold;"&gt;&amp;lt;td&amp;gt;&lt;/span&gt;&lt;br /&gt;Coluna da direita a ocupar o restante espa&amp;ccedil;o&lt;br /&gt;&lt;span style="color:#bb7977;font-weight:bold;"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#bb7977;font-weight:bold;"&gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#bb7977;font-weight:bold;"&gt;&amp;lt;tr&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#bb7977;font-weight:bold;"&gt;&amp;lt;td&amp;gt;&lt;/span&gt;&lt;br /&gt;Rodap&amp;eacute;&lt;br /&gt;&lt;span style="color:#bb7977;font-weight:bold;"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#bb7977;font-weight:bold;"&gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#bb7977;font-weight:bold;"&gt;&amp;lt;/table&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;Os elementos est&amp;atilde;o colocados dentro das c&amp;eacute;lulas.&lt;/p&gt;
&lt;p&gt;Na &lt;b&gt;Grid&lt;/b&gt; n&amp;atilde;o. Ao apresentar-mos a &lt;b&gt;Grid&lt;/b&gt; adicionamos as propriedades &lt;b&gt;Grid.RowDefinitions&lt;/b&gt; e &lt;b&gt;Grid.ColumnDefinitions&lt;/b&gt;. &amp;Eacute; dentro de cada uma dela que vamos indicar quantas linhas e colunas a &lt;b&gt;Grid&lt;/b&gt; vai ter. Ficando algo assim:&lt;/p&gt;
&lt;pre style="color:#000000;background-color:#eeeeee;font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;lt;Grid Name=&amp;quot;Estrutura&amp;quot; ShowGridLines=&amp;quot;True&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;Grid.RowDefinitions&amp;gt;&lt;br /&gt;            &amp;lt;RowDefinition Height=&amp;quot;100&amp;quot;&amp;gt;&amp;lt;/RowDefinition&amp;gt;&lt;br /&gt;            &amp;lt;RowDefinition&amp;gt;&amp;lt;/RowDefinition&amp;gt;&lt;br /&gt;        &amp;lt;/Grid.RowDefinitions&amp;gt;&lt;br /&gt;        &amp;lt;Grid.ColumnDefinitions&amp;gt;&lt;br /&gt;            &amp;lt;ColumnDefinition Width=&amp;quot;300&amp;quot;&amp;gt;&amp;lt;/ColumnDefinition&amp;gt;&lt;br /&gt;            &amp;lt;ColumnDefinition&amp;gt;&amp;lt;/ColumnDefinition&amp;gt;   &lt;br /&gt;        &amp;lt;/Grid.ColumnDefinitions&amp;gt;&lt;br /&gt;        &amp;lt;TextBlock&amp;gt;&amp;lt;/TextBlock&amp;gt;&lt;br /&gt;&amp;lt;/Grid&amp;gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;A propriedade &lt;i&gt;ShowGridLines&lt;/i&gt; &amp;eacute; &amp;uacute;til para termos uma ideia de como est&amp;aacute; a ficar estruturado.&lt;br /&gt;S&amp;oacute; ao fim de estruturar a &lt;b&gt;Grid&lt;/b&gt; &amp;eacute; que indicamos que elementos v&amp;atilde;o pertencer e aonde. Isto &amp;eacute; feito antes da tab &lt;i&gt;&amp;lt;/Grid&amp;gt;&lt;/i&gt; fechar. Para indicarmos onde pertencem cada um deles definimos as propriedades &lt;b&gt;Grid.Row&lt;/b&gt; e&amp;nbsp; &lt;b&gt;Grid.Column&lt;/b&gt; com os valores do &amp;iacute;ndice da posi&amp;ccedil;&amp;atilde;o de cada um deles. (O &amp;iacute;ndice come&amp;ccedil;a na posi&amp;ccedil;&amp;atilde;o zero). Por exemplo:&lt;/p&gt;
&lt;pre style="color:#000000;background-color:#eeeeee;font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;lt;TextBlock Grid.Row=&amp;quot;0&amp;quot; Grid.Column=&amp;quot;0&amp;quot; Text=&amp;quot;Primeira Linha e Primeira Coluna&amp;quot;&amp;gt;&amp;lt;/TextBlock&amp;gt;&lt;/pre&gt;
&lt;p&gt;Existem outros containers, um que tamb&amp;eacute;m deve dar jeito &amp;eacute; o &lt;b&gt;Canvas&lt;/b&gt; pois tem atribu&amp;iacute;da uma posi&amp;ccedil;&amp;atilde;o absoluta atrav&amp;eacute;s das coordenadas. E existem tamb&amp;eacute;m o &lt;b&gt;StackPanel&lt;/b&gt;, &lt;b&gt;WrapPanel&lt;/b&gt; e &lt;b&gt;DockPanel.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Estou confiante que me consiga adaptar ao &lt;b&gt;SilverLight &lt;/b&gt;e desenvolver uma RIA na qual tenho alguma urg&amp;ecirc;ncia. Ao longo da jornada vou postando mais artigos super b&amp;aacute;sicos, que no fundo servem como apontamentos ;)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.com/aggbug.aspx?PostID=38546" width="1" height="1"&gt;</description></item><item><title>Second Annual Scrum User Group Meeting – The after</title><link>http://pontonetpt.com/blogs/chaves/archive/2010/02/03/second-annual-scrum-user-group-meeting-the-after.aspx</link><pubDate>Wed, 03 Feb 2010 14:18:17 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:38545</guid><dc:creator>Gonçalo Chaves</dc:creator><slash:comments>0</slash:comments><description>Hi all, Today at Microsoft Portugal took place the 2nd Annual Scrum User Group meeting. With a great morning sessions opened by Dr. Jeff Sutherland , then Mitch Lacey and two Portuguese testimonials with: Prof. Ademar Aguiar and Mário Araújo . The Microsoft Read More......(&lt;a href="http://pontonetpt.com/blogs/chaves/archive/2010/02/03/second-annual-scrum-user-group-meeting-the-after.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://pontonetpt.com/aggbug.aspx?PostID=38545" width="1" height="1"&gt;</description></item><item><title>Microsoft lança o seu QRCode - Microsoft tag</title><link>http://pontonetpt.com/blogs/mauriciojunior/archive/2010/02/03/microsoft-lan-231-a-o-seu-qrcode-microsoft-tag.aspx</link><pubDate>Wed, 03 Feb 2010 11:39:00 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:38544</guid><dc:creator>Mauricio Junior</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;
&lt;p&gt;&lt;a href="http://www.layerdev.com.br/"&gt;&lt;img style="border:0;" border="0" src="http://blog.mauriciojunior.org/image.axd?picture=fullbanner.gif" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img src="http://blog.mauriciojunior.org/image.axd?picture=microsofttag.jpg" alt="" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;	&lt;/span&gt;&lt;/span&gt;Microsoft faz a sua pr&amp;oacute;pria tag com o QRCODE. Me parece que est&amp;aacute; muito popular para informa&amp;ccedil;&amp;otilde;es de alguns produtos. A tag pode ser vista por qualquer celular que tenha o leitor da Microsoft. No link abaixo pode ser visto um v&amp;iacute;deo mostrando o verdadeiro &lt;b&gt;&lt;a href="http://blog.mauriciojunior.org/post/Microsoft-Tag-bem-popular.aspx"&gt;leia mais ...&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.com/aggbug.aspx?PostID=38544" width="1" height="1"&gt;</description></item><item><title>Será Lazy Loading o inferno?</title><link>http://pontonetpt.com/blogs/esqueleto/archive/2010/02/03/ser-225-lazy-loading-o-inferno.aspx</link><pubDate>Wed, 03 Feb 2010 10:41:00 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:38542</guid><dc:creator>Paulo Aboim Pinto</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Encontrei este artigo muito interessante com o t&amp;iacute;tulo: &lt;a href="http://www.robbagby.com/entity-framework/is-lazy-loading-in-ef-4-evil-or-the-second-coming/"&gt;Is Lazy Loading in EF 4 Evil or the Second Coming?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Para quem est&amp;aacute; interessando neste tema e quer saber um pouco mais, aconcelho vivamente a sua leitura.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;Abra&amp;ccedil;os&lt;br /&gt;Paulo Aboim Pinto&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.com/aggbug.aspx?PostID=38542" width="1" height="1"&gt;</description><category domain="http://pontonetpt.com/blogs/esqueleto/archive/tags/Entity+Framework/default.aspx">Entity Framework</category><category domain="http://pontonetpt.com/blogs/esqueleto/archive/tags/EF4/default.aspx">EF4</category><category domain="http://pontonetpt.com/blogs/esqueleto/archive/tags/Entity+Framework+4/default.aspx">Entity Framework 4</category></item><item><title>Reorganização no Visual Basic Learning Center</title><link>http://pontonetpt.com/blogs/jpaulino/archive/2010/02/02/reorganiza-231-227-o-no-visual-basic-learning-center.aspx</link><pubDate>Tue, 02 Feb 2010 21:08:07 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:38541</guid><dc:creator>Jorge Paulino</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;img style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" border="0" src="http://www.sadev.co.za/files/blogimages/VS2010TFS2010InformationLandslideBegins_8362/msdn_landing_hero_logo.png" width="147" height="45" alt="" /&gt;     &lt;br /&gt;Foram reorganizados alguns dos recursos de Visual Basic no &lt;a href="http://msdn.microsoft.com/en-us/vbasic/ms789086.aspx"&gt;&lt;strong&gt;Visual Basic Developer Center Learn Pages&lt;/strong&gt;&lt;/a&gt;. Estes recursos, nomeadamente as páginas &lt;a href="http://msdn.microsoft.com/en-us/vbasic/cc817878.aspx"&gt;&lt;strong&gt;Introductory Topics&lt;/strong&gt;&lt;/a&gt; e &lt;a href="http://msdn.microsoft.com/en-us/vbasic/cc743624.aspx"&gt;&lt;strong&gt;Language Syntax&lt;/strong&gt;&lt;/a&gt; estão agora organizados de forma a ser mais simples a navegação e mais acesso rápido à informação.     &lt;br /&gt;    &lt;br /&gt;Na página &lt;a href="http://msdn.microsoft.com/en-us/vbasic/cc817878.aspx"&gt;&lt;strong&gt;Introductory Topics&lt;/strong&gt;&lt;/a&gt; podemos encontrar alguns links sobre o Visual Studio e alguns links fundamentais para a iniciação na linguagem.&lt;/p&gt;  &lt;p&gt;Na página &lt;a href="http://msdn.microsoft.com/en-us/vbasic/cc743624.aspx"&gt;&lt;strong&gt;Language Syntax&lt;/strong&gt;&lt;/a&gt;, bastante mais completa, podemos encontrar como tópicos principais os seguintes pontos (com os respectivos sub-tópicos):&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Coding in Visual Basic &lt;/li&gt;    &lt;li&gt;Language Keywords &lt;/li&gt;    &lt;li&gt;Data Types &lt;/li&gt;    &lt;li&gt;Object-Oriented Programming &lt;/li&gt;    &lt;li&gt;Handling Errors &lt;/li&gt;    &lt;li&gt;Commenting your Code &lt;/li&gt;    &lt;li&gt;Simplifying Common Programming Tasks &lt;/li&gt;    &lt;li&gt;Working with Strings &lt;/li&gt;    &lt;li&gt;Working with the File System &lt;/li&gt;    &lt;li&gt;Working with XML &lt;/li&gt;    &lt;li&gt;Working with Data &lt;/li&gt;    &lt;li&gt;Language Integrated Query (LINQ) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Está ainda disponível, e já à algum tempo, um endereço mais simples de decorar para a Central de Recursos de Visual Basic no MSDN - &lt;a href="http://msdn.com/vbasic"&gt;http://msdn.com/vbasic&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.com/aggbug.aspx?PostID=38541" width="1" height="1"&gt;</description><category domain="http://pontonetpt.com/blogs/jpaulino/archive/tags/Noticias/default.aspx">Noticias</category></item><item><title>Web abrindo aplicações locais</title><link>http://pontonetpt.com/blogs/mauriciojunior/archive/2010/02/02/web-abrindo-aplica-231-245-es-locais.aspx</link><pubDate>Tue, 02 Feb 2010 12:35:00 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:38540</guid><dc:creator>Mauricio Junior</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;
&lt;h1&gt;&lt;span id="ctl00_ContentPlaceHolder1_dtGridArtigo_ctl02_Label4"&gt;Web abrindo aplica&amp;ccedil;&amp;otilde;es locais&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;&lt;span&gt;&lt;span id="ctl00_ContentPlaceHolder1_dtGridArtigo_ctl02_Label1"&gt;
&lt;p class="MsoNormal"&gt;&lt;br /&gt;
&lt;img src="http://www.aspneti.com/artigos/web1.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Ol&amp;aacute; pessoal, estava no trabalho
precisando fazer um portal de produtos criados pelaempresa; fica mais
f&amp;aacute;cil centralizar tudo em um portal. O usu&amp;aacute;rio entra naintranet, loga
apenas uma vez e abre os programas que quiser. Por&amp;eacute;m, bati acabe&amp;ccedil;a na
porta quando percebi que a maioria dos produtos s&amp;atilde;o locais; isto
&amp;eacute;;funciona localmente na m&amp;aacute;quina do usu&amp;aacute;rio e precisa ser instalado
para o devidofuncionamento. &lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Bati com acabe&amp;ccedil;a na parede tamb&amp;eacute;m por
perceber que ainda existem programas feitos com alinguagem VB 6.0,
Delphi, DOS e outros al&amp;eacute;m de C#.NET. &lt;a href="http://www.aspneti.com/web+abrindo+aplicacoes+locais+764,0.aspx"&gt;&lt;b&gt;[Continue lendo...]&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.com/aggbug.aspx?PostID=38540" width="1" height="1"&gt;</description></item><item><title>e-Book Dicas DotNet</title><link>http://pontonetpt.com/blogs/mauriciojunior/archive/2010/02/01/e-book-dicas-dotnet.aspx</link><pubDate>Mon, 01 Feb 2010 11:24:00 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:38534</guid><dc:creator>Mauricio Junior</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;img src="http://www.mauriciojunior.org/images/livros/dicasdotnet.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Lan&amp;ccedil;amento do&amp;nbsp;e-Book &lt;strong&gt;Dicas DotNet&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Aprenda com o e-Book Dicas DotNet; dicas mais usadas para todo desenvolvedor, saiba montar o seu relat&amp;oacute;rio, programar em c# para web, muito mais passo a passo e de forma pr&amp;aacute;tica.&lt;br /&gt;241 p&amp;aacute;ginas&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;b&gt;VIS&amp;Atilde;O GERAL DO E-BOOK DICAS DOTNET&lt;/b&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;E-BOOK DICAS DOTNET&amp;nbsp;&lt;br /&gt;Com 241 p&amp;aacute;ginas.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style="font-weight:normal;"&gt;Requisitos para leitura do ebook:&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight:normal;"&gt;&lt;br /&gt;* Instalar no computador o programa para leitura do ebook&amp;nbsp;&lt;br /&gt;* Logar no sistema de leitura com usu&amp;aacute;rio e senha passado no envio via e-mail&amp;nbsp;&lt;br /&gt;* &amp;Eacute; necess&amp;aacute;rio ter internet apenas na primeira vez da leitura&amp;nbsp;&lt;br /&gt;* Instalar o leitor, requisito do leitor (framework.net instalado), caso contr&amp;aacute;rio o mesmo ser&amp;aacute; instalado.&lt;br /&gt;&lt;br /&gt;&amp;Eacute; com grande alegria que apresento o e-Book DICAS DOTNET. Este ebook &amp;eacute; de minha autoria, Maur&amp;iacute;cio J&amp;uacute;nior.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;O e-Book DICAS DOTNET apresenta passo a passo de desenvolvimento e dicas de c&amp;oacute;digos, possibilitando ao leitor a dar continuidade na programa&amp;ccedil;&amp;atilde;o de computadores com ferramenta da Microsoft, Visual Studio .NET e framework 3.5. Sendo que todo o c&amp;oacute;digo pode ser aplicado em todo framework DOTNET sem qualquer problema.&amp;nbsp;&amp;nbsp;[&lt;/span&gt;&lt;a href="http://mauriciojunior.org/ebook/5/dicas+dot+net.aspx"&gt;Veja mais...&lt;/a&gt;&lt;span style="font-weight:normal;"&gt;]&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.com/aggbug.aspx?PostID=38534" width="1" height="1"&gt;</description></item><item><title>VB.NET: Classe SqlBulkCopy</title><link>http://pontonetpt.com/blogs/jpaulino/archive/2010/01/31/vb-net-classe-sqlbulkcopy.aspx</link><pubDate>Sun, 31 Jan 2010 23:55:00 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:38539</guid><dc:creator>Jorge Paulino</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;A plataforma .NET permite implementar de uma forma muito simples um BULK INSERT em uma base de dados SQL, ou seja, importar dados de uma fonte de dados (base de dados, arquivo de texto, XML, etc) e gravar numa tabela SQL. Este método é muito prático e com ganhos significativos em termos de eficiência para diversas operações como a migração de dados, inserção de muita informação, etc. Esta operação também é possível de se fazer, e para não é familiar com o termo BULK INSERT, utilizando comandos Transact-SQL.&lt;/p&gt;  &lt;p&gt;Para mostrar como utilizar a classe &lt;a href="http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx"&gt;SqlBulkCopy&lt;/a&gt;, e como pode ser útil, será mostrado um pequeno exemplo de migração de dados de Access para SQL.&lt;/p&gt;  &lt;p&gt;Deve-se verificar se o mapeamento entre colunas está correcto (podem-se utilizar os nomes da colunas em vez do seu índice) e se o tipo de dados das colunas de origem é ser suportado nas colunas de destino (não gravar &lt;em&gt;strings&lt;/em&gt; em &lt;em&gt;integers&lt;/em&gt; por exemplo). Podem ser utilizadas apenas algumas colunas.&lt;/p&gt;  &lt;p&gt;O que o seguinte código faz é ler a informação de uma tabela de Access para um DataSet (que ficará numa DataTable) e depois, usando o SqlBulkCopy, gravar essa informação na tabela de destino no SQL.&lt;/p&gt;  &lt;p&gt;Lê a informação do Access, da tabela &lt;em&gt;tblOrigem&lt;/em&gt;:&lt;/p&gt;  &lt;blockquote&gt;   &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:683228ad-ffe0-490a-8f28-39d7e4e4f401" class="wlWriterEditableSmartContent"&gt; &lt;div class="le-pavsc-container"&gt; &lt;div style="background-color:#f4f4f4;overflow:auto;padding:2px 5px;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; connStringAccess &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt; = _&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#a31515;"&gt;&amp;quot;Provider=Microsoft.Jet.OLEDB.4.0;&amp;quot;&lt;/span&gt; &amp;amp; _&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#a31515;"&gt;&amp;quot;Data Source=c:&amp;#92;DadosOrigem.mdb;&amp;quot;&lt;/span&gt; &amp;amp; _&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#a31515;"&gt;&amp;quot;Jet OLEDB:Database Password=teste;&amp;quot;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;&amp;#39; L&amp;#234; a informa&amp;#231;&amp;#227;o da tabela do Access para um DataSet&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; ds &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; DataSet&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; SQL &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt; = &lt;span style="color:#a31515;"&gt;&amp;quot;SELECT * FROM tblOrigem&amp;quot;&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;Using&lt;/span&gt; da &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; OleDb.OleDbDataAdapter(SQL, connStringAccess)&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;da.Fill(ds)&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Using&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/blockquote&gt;  &lt;p&gt;Grava no SQL, na tabela &lt;em&gt;tblDestino&lt;/em&gt;, com base na informação anterior:&lt;/p&gt;  &lt;blockquote&gt;   &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:75995ed6-5537-4452-867d-d7261bf06687" class="wlWriterEditableSmartContent"&gt; &lt;div class="le-pavsc-container"&gt; &lt;div style="background-color:#f4f4f4;overflow:auto;padding:2px 5px;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; connStringSQL &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt; = _&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#a31515;"&gt;&amp;quot;Data Source=&amp;lt;Servidor&amp;gt;;&amp;quot;&lt;/span&gt; &amp;amp; _&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#a31515;"&gt;&amp;quot;Integrated Security=False;&amp;quot;&lt;/span&gt; &amp;amp; _&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#a31515;"&gt;&amp;quot;User ID=teste;Password=teste&amp;quot;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;&amp;#39; Cria uma liga&amp;#231;&amp;#227;o ao servidor SQL&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;Using&lt;/span&gt; conn &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; SqlClient.SqlConnection(connStringSQL)&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;conn.Open()&lt;br /&gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;Using&lt;/span&gt; copy &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; SqlClient.SqlBulkCopy(conn)&lt;br /&gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;&amp;#39; Ir&amp;#225; mostrar o total de registos copiados&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;AddHandler&lt;/span&gt; copy.SqlRowsCopied, &lt;span style="color:#0000ff;"&gt;AddressOf&lt;/span&gt; SqlRowsCopiedEvent&lt;br /&gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;&amp;#39; Faz o mapeamento das tabelas em que, por&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;&amp;#39; exemplo, a coluna 2 da tabela de origem ir&amp;#225;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;&amp;#39; ser escrita na coluna 3 da tabela de destino&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;copy.ColumnMappings.Add(0, 0)&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;copy.ColumnMappings.Add(1, 1)&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;copy.ColumnMappings.Add(2, 3)&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;copy.ColumnMappings.Add(3, 2)&lt;br /&gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;&amp;#39; Indica a tabela de destino&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;copy.DestinationTableName = &lt;span style="color:#a31515;"&gt;&amp;quot;tblDestino&amp;quot;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;Try&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#008000;"&gt;&amp;#39; Escreve no SQL&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;copy.WriteToServer(ds.Tables(0))&lt;br /&gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;Catch&lt;/span&gt; ex &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; Exception&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MessageBox.Show(ex.Message)&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Try&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Using&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Using&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/blockquote&gt;  &lt;p&gt;Finalmente a informação do total de registos copiados:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;/p&gt;    &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:cf6ba863-e16c-4aef-bfec-d14bb5f061c6" class="wlWriterEditableSmartContent"&gt; &lt;div class="le-pavsc-container"&gt; &lt;div style="background-color:#f4f4f4;overflow:auto;padding:2px 5px;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt; SqlRowsCopiedEvent(&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; sender &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Object&lt;/span&gt;, _&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; e &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; System.Data.SqlClient.SqlRowsCopiedEventArgs)&lt;br /&gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MessageBox.Show(&lt;span style="color:#a31515;"&gt;&amp;quot;Registos copiados: &amp;quot;&lt;/span&gt; &amp;amp; e.RowsCopied.ToString)&lt;br /&gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;    &lt;p&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Neste caso o número de registo que irá mostrar será o total, porque não foi definido um BatchSize (que indica o número de registos que irá copiar). Definindo um BatchSize (por exemplo copy.BatchSize = 100), poder-se-ia utilizar este evento para animar uma ProgressBar e mostrar a evolução do processo, sendo obviamente, o processo um pouco mais lento desta forma.&lt;/p&gt;  &lt;p&gt;&lt;i&gt;Nota: Como curiosidade, e numa migração recente em que utilizei este método, a migração de uma tabela de Access com 260.000 registo para SQL, demorou aproximadamente 6 segundos.&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;Mas esta classe pode ter mais aplicação, como por exemplo, inserir no SQL um grande número de registo. Pode-se criar uma tabela, carregar os dados e finalmente inserir todos os registos de uma vez (sem várias chamadas à base de dados).&lt;/p&gt;  &lt;p&gt;Por exemplo:&lt;/p&gt;  &lt;blockquote&gt;   &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:fd05b066-3d04-4650-800d-89eac899f536" class="wlWriterEditableSmartContent"&gt; &lt;div class="le-pavsc-container"&gt; &lt;div style="background-color:#f4f4f4;overflow:auto;padding:2px 5px;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; dt &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; DataTable(&lt;span style="color:#a31515;"&gt;&amp;quot;Origem&amp;quot;&lt;/span&gt;)&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dt.Columns.Add(&lt;span style="color:#a31515;"&gt;&amp;quot;ID&amp;quot;&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;GetType&lt;/span&gt;(&lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt;)).AutoIncrement = &lt;span style="color:#0000ff;"&gt;True&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dt.Columns.Add(&lt;span style="color:#a31515;"&gt;&amp;quot;numero&amp;quot;&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;GetType&lt;/span&gt;(&lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt;))&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dt.Columns.Add(&lt;span style="color:#a31515;"&gt;&amp;quot;nome&amp;quot;&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;GetType&lt;/span&gt;(&lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;))&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dt.Columns.Add(&lt;span style="color:#a31515;"&gt;&amp;quot;data&amp;quot;&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;GetType&lt;/span&gt;(DateTime))&lt;br /&gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; dr &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; DataRow = dt.NewRow&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dr.Item(&lt;span style="color:#a31515;"&gt;&amp;quot;numero&amp;quot;&lt;/span&gt;) = 1&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dr.Item(&lt;span style="color:#a31515;"&gt;&amp;quot;nome&amp;quot;&lt;/span&gt;) = &lt;span style="color:#a31515;"&gt;&amp;quot;Jorge Paulino&amp;quot;&lt;/span&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dr.Item(&lt;span style="color:#a31515;"&gt;&amp;quot;data&amp;quot;&lt;/span&gt;) = DateTime.Now&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dt.Rows.Add(dr)&lt;br /&gt; &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; ds &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; DataSet&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ds.Tables.Add(dt)&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/blockquote&gt;  &lt;p&gt;   &lt;br /&gt;E depois repetir o mapeamento e a inserção usando a classe SqlBulkCopy.&lt;/p&gt;  &lt;p&gt;Espero que ajude!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.com/aggbug.aspx?PostID=38539" width="1" height="1"&gt;</description><category domain="http://pontonetpt.com/blogs/jpaulino/archive/tags/VB.NET/default.aspx">VB.NET</category><category domain="http://pontonetpt.com/blogs/jpaulino/archive/tags/Visual+Studio+2008/default.aspx">Visual Studio 2008</category><category domain="http://pontonetpt.com/blogs/jpaulino/archive/tags/SQL+Server/default.aspx">SQL Server</category></item><item><title>Globalização de Sítios Web Usando O Roteamento Do ASP.NET</title><link>http://pontonetpt.com/blogs/paulomorgado/archive/2010/01/31/globaliza-231-227-o-de-s-237-tios-web-usando-o-roteamento-do-asp-net.aspx</link><pubDate>Sun, 31 Jan 2010 23:54:26 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:38531</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>2</slash:comments><description>&lt;p align="justify"&gt;Para quem não sabe, eu tenho um sítio web (&lt;a title="Paulo Morgado" href="http://PauloMorgado.NET/" target="_blank"&gt;http://PauloMorgado.NET/&lt;/a&gt;) que uso como presença (além dos meus blogues) na web e para testes.&lt;/p&gt;  &lt;p align="justify"&gt;Porque costumo escrever tanto em Português como em Inglês, queria que o sítio tivesse uma versão Portuguesa e uma versão Inglesa. Isto é simples de fazer usando a infra-estrutura de &lt;a title="ASP.NET Globalization and Localization" href="http://msdn.microsoft.com/library/c6zyy3s9.aspx" target="_blank"&gt;Globalização e Localização ASP.NET&lt;/a&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;Mas eu queria mais do que apenas adivinhar a língua do utilizador através da linguagem do &lt;strong&gt;browser&lt;/strong&gt;. Queria algo como os sítios da &lt;a title="MSDN - Microsoft Developers Network" href="http://msdn.microsoft.com/" target="_blank"&gt;MSDN&lt;/a&gt; e &lt;a title="Microsoft TechNet: Resources for IT Professionals" href="http://technet.microsoft.com/" target="_blank"&gt;TechNet&lt;/a&gt; onde cultura está embebida no URL o que possibilita ao utilizador escolher em que linguagem deseja ver o sítio.&lt;/p&gt;  &lt;p align="justify"&gt;Com o lançamento do &lt;a title="ASP.NET Routing" href="http://msdn.microsoft.com/library/cc668201.aspx" target="_blank"&gt;ASP.NET Routing&lt;/a&gt;, isto é tão simples como escrever um &lt;a title="IRouteHandler Interface" href="http://msdn.microsoft.com/library/system.web.routing.iroutehandler.aspx" target="_blank"&gt;route handler&lt;/a&gt; que define a cultura do pedido HTTP e devolve o &lt;a title="Page Class" href="http://msdn.microsoft.com/library/system.web.ui.page.aspx" target="_blank"&gt;page&lt;/a&gt; &lt;a title="Introduction to HTTP handlers" href="http://msdn.microsoft.com/library/ms227675(VS.85).aspx" target="_blank"&gt;handler&lt;/a&gt; da página pretendida.&lt;/p&gt;  &lt;p align="justify"&gt;Algo como isto:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;public class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;GlobalizationRouteHandler &lt;/span&gt;: &lt;span style="color:blue;"&gt;global&lt;/span&gt;::System.Web.Routing.&lt;span style="color:#2b91af;"&gt;IRouteHandler
&lt;/span&gt;{
    System.Globalization.&lt;span style="color:#2b91af;"&gt;CultureInfo &lt;/span&gt;culture;
    System.Globalization.&lt;span style="color:#2b91af;"&gt;CultureInfo &lt;/span&gt;uiCulture;

    &lt;span style="color:blue;"&gt;public &lt;/span&gt;GlobalizationRouteHandler(System.Globalization.&lt;span style="color:#2b91af;"&gt;CultureInfo &lt;/span&gt;culture)
        : &lt;span style="color:blue;"&gt;this&lt;/span&gt;(culture, culture)
    {
    }

    &lt;span style="color:blue;"&gt;public &lt;/span&gt;GlobalizationRouteHandler(&lt;span style="color:#2b91af;"&gt;CultureInfo &lt;/span&gt;culture, &lt;span style="color:#2b91af;"&gt;CultureInfo &lt;/span&gt;uiCulture)
    {
        &lt;span style="color:blue;"&gt;if &lt;/span&gt;(culture == &lt;span style="color:blue;"&gt;null&lt;/span&gt;)
        {
            &lt;span style="color:blue;"&gt;throw new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ArgumentNullException&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;cultureInfo&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;cultureInfo is null.&amp;quot;&lt;/span&gt;);
        }

        &lt;span style="color:blue;"&gt;if &lt;/span&gt;(uiCulture == &lt;span style="color:blue;"&gt;null&lt;/span&gt;)
        {
            &lt;span style="color:blue;"&gt;throw new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ArgumentNullException&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;uiCulture&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;uiCulture is null.&amp;quot;&lt;/span&gt;);
        }

        &lt;span style="color:blue;"&gt;this&lt;/span&gt;.culture = culture;
        &lt;span style="color:blue;"&gt;this&lt;/span&gt;.uiCulture = uiCulture;
    }

    &lt;span style="color:blue;"&gt;private &lt;/span&gt;GlobalizationRouteHandler()
    {
    }

    &lt;span style="color:blue;"&gt;#region &lt;/span&gt;IRouteHandler Members

    &lt;span style="color:blue;"&gt;public &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;IHttpHandler &lt;/span&gt;GetHttpHandler(&lt;span style="color:#2b91af;"&gt;RequestContext &lt;/span&gt;requestContext)
    {
        &lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;.CurrentThread.CurrentCulture = &lt;span style="color:blue;"&gt;this&lt;/span&gt;.culture;
        &lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;.CurrentThread.CurrentUICulture = &lt;span style="color:blue;"&gt;this&lt;/span&gt;.uiCulture;

        &lt;span style="color:blue;"&gt;string &lt;/span&gt;path = &lt;span style="color:#a31515;"&gt;&amp;quot;~/&amp;quot; &lt;/span&gt;+ (requestContext.RouteData.Values[&lt;span style="color:#a31515;"&gt;&amp;quot;path&amp;quot;&lt;/span&gt;] &lt;span style="color:blue;"&gt;as string&lt;/span&gt;);

        &lt;span style="color:blue;"&gt;var &lt;/span&gt;physicalPath = requestContext.HttpContext.Server.MapPath(path);
        &lt;span style="color:blue;"&gt;if &lt;/span&gt;(System.IO.&lt;span style="color:#2b91af;"&gt;Directory&lt;/span&gt;.Exists(physicalPath))
        {
            path = &lt;span style="color:#2b91af;"&gt;VirtualPathUtility&lt;/span&gt;.Combine(path, &lt;span style="color:#a31515;"&gt;&amp;quot;Default.aspx&amp;quot;&lt;/span&gt;);
        }

        &lt;span style="color:blue;"&gt;var &lt;/span&gt;httpHandler = &lt;span style="color:#2b91af;"&gt;BuildManager&lt;/span&gt;.CreateInstanceFromVirtualPath(path, &lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;IHttpHandler&lt;/span&gt;)) &lt;span style="color:blue;"&gt;as &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;IHttpHandler&lt;/span&gt;;

        &lt;span style="color:blue;"&gt;return &lt;/span&gt;httpHandler;
    }

    &lt;span style="color:blue;"&gt;#endregion
&lt;/span&gt;}&lt;/pre&gt;

&lt;p&gt;Depois é só registar as rotas para as culturas pretendidas:&lt;/p&gt;

&lt;pre class="code"&gt;routes.Add(&lt;span style="color:#a31515;"&gt;&amp;quot;en&amp;quot;&lt;/span&gt;, &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Route&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;en/{*path}&amp;quot;&lt;/span&gt;, &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;GlobalizationRouteHandler&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;CultureInfo&lt;/span&gt;.GetCultureInfo(&lt;span style="color:#a31515;"&gt;&amp;quot;en-US&amp;quot;&lt;/span&gt;))));
routes.Add(&lt;span style="color:#a31515;"&gt;&amp;quot;pt&amp;quot;&lt;/span&gt;, &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Route&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;pt/{*path}&amp;quot;&lt;/span&gt;, &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;GlobalizationRouteHandler&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;CultureInfo&lt;/span&gt;.GetCultureInfo(&lt;span style="color:#a31515;"&gt;&amp;quot;pt-PT&amp;quot;&lt;/span&gt;))));&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.com/aggbug.aspx?PostID=38531" width="1" height="1"&gt;</description><category domain="http://pontonetpt.com/blogs/paulomorgado/archive/tags/.NET/default.aspx">.NET</category><category domain="http://pontonetpt.com/blogs/paulomorgado/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://pontonetpt.com/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://pontonetpt.com/blogs/paulomorgado/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://pontonetpt.com/blogs/paulomorgado/archive/tags/TipsAndTricks/default.aspx">TipsAndTricks</category><category domain="http://pontonetpt.com/blogs/paulomorgado/archive/tags/Web/default.aspx">Web</category><category domain="http://pontonetpt.com/blogs/paulomorgado/archive/tags/.NET3.5/default.aspx">.NET3.5</category></item><item><title>“Leak” sobre o Microsoft TechDays 2010 Portugal / “Leak” about Microsoft TechDays 2010 Portugal (PT/EN)</title><link>http://pontonetpt.com/blogs/nunogodinho/archive/2010/01/29/leak-sobre-o-microsoft-techdays-2010-portugal-leak-about-microsoft-techdays-2010-portugal-pt-en.aspx</link><pubDate>Fri, 29 Jan 2010 17:35:57 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:38529</guid><dc:creator>Nuno Filipe Godinho</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;(PT)&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; Hoje tivemos um pequeno “leak” de informação de uma fonte não identificada da Microsoft sobre o TechDays 2010 em Portugal, dizendo que já se podem registar para o TechDays 2010 em &lt;a href="http://www.techdays2010.com"&gt;www.techdays2010.com&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; Não se esqueçam de visitar e começarem a registar-se para este evento incrível que junta Developers and IT Pros.&lt;/p&gt;  &lt;p&gt;(EN)&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; Today we had a small “leak” from an unknown source from Microsoft, about TechDays 2010 in Portugal stating that you can already register for techdays 2010 at &lt;a href="http://www.techdays2010.com"&gt;www.techdays2010.com&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; Don’t forget to go there and start now to register for this incredible event for both Developers and IT Pros.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.com/aggbug.aspx?PostID=38529" width="1" height="1"&gt;</description><category domain="http://pontonetpt.com/blogs/nunogodinho/archive/tags/Microsoft/default.aspx">Microsoft</category></item><item><title>Último dia na Altran</title><link>http://pontonetpt.com/blogs/esqueleto/archive/2010/01/29/218-ltimo-dia-na-altran.aspx</link><pubDate>Fri, 29 Jan 2010 16:44:26 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:38528</guid><dc:creator>Paulo Aboim Pinto</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;Bem, hoje é o meu último dia na Altran. Entrei aqui, ainda na Altrantec, fundi-me com a Altior e ficamos todos Altior e por último fundi-me com a Altran-CIS para sermos uma só empresa, Altran Portugal.&lt;/p&gt;  &lt;p&gt;Estive envolvimento em bons projectos e tenho a certeza que tudo fiz para fazer um bom trabalho. Trabalhei para a CP, ZON, Alcatel, Arval, AIGLife sempre com C# .NET. &lt;/p&gt;  &lt;p&gt;A partir de segunda-feira vestirei outra camisola e irei para outro projecto, mas, isso é uma outra história.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;Paulo Aboim Pinto&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.com/aggbug.aspx?PostID=38528" width="1" height="1"&gt;</description></item><item><title>The new auto-start feature</title><link>http://pontonetpt.com/blogs/luisabreu/archive/2010/01/29/the-new-auto-start-feature.aspx</link><pubDate>Fri, 29 Jan 2010 14:52:07 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:38526</guid><dc:creator>Luis Abreu</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Version 4.0 of ASP.NET introduces a new feature called auto-start. The idea is simple: to improve the performance of the web app by allowing apps to run some expensive code before the first request comes. I must say that this is really an interesting concept (and no, I won’t be going into details here because the white paper already explains &lt;a href="http://www.asp.net/LEARN/whitepapers/aspnet4/default.aspx#_TOC1_3"&gt;most&lt;/a&gt; of what you should know).&lt;/p&gt;  &lt;p&gt;I’m only mentioning this here because this will only work from windows 7 and windows 2008 server R2 onwards. This is something which makes me really sad because people running windows 2008 server won’t be able to use this feature. I really believe that it’s time for MS to change the interaction between IIS and the OS…I mean, am I the only one that is fed with having the IIS version tied up with the OS version???&lt;/p&gt;
[Crossposted from http://msmvps.com/blogs/luisabreu]&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.com/aggbug.aspx?PostID=38526" width="1" height="1"&gt;</description><category domain="http://pontonetpt.com/blogs/luisabreu/archive/tags/Asp.Net/default.aspx">Asp.Net</category></item><item><title>Routed events in Silverlight</title><link>http://pontonetpt.com/blogs/luisabreu/archive/2010/01/29/routed-events-in-silverlight.aspx</link><pubDate>Fri, 29 Jan 2010 14:28:30 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:38525</guid><dc:creator>Luis Abreu</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Routed events were introduced by WPF and they’re responsible for enabling several advanced scenarios in that platform:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;tunneling: in this case, the event is first raised in the root and goes “down the tree” until the source element that generated the event is reached; &lt;/li&gt;    &lt;li&gt;bubbling: in this case, the event bubbles from the source element to the root element; &lt;/li&gt;    &lt;li&gt;Direct: the event is only raised in the source element. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Once again, the use of routed events in Silverlight is limited. By default, it only &lt;a href="http://msdn.microsoft.com/en-us/library/cc189018(VS.95).aspx"&gt;exposes&lt;/a&gt; a couple of routed events and it only supports bubbling (ie, there’s no tunneling for routed events in Silverlight).In order to illustrate the bubbling feature, we’ll start running the following example:&lt;/p&gt;  &lt;pre style="background-color:black;" class="code"&gt;&lt;span style="color:#a1b070;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;UserControl &lt;/span&gt;&lt;span style="color:#009b00;"&gt;x&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#009b00;"&gt;Class&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;Tests.test&amp;quot;
    &lt;/span&gt;&lt;span style="color:#009b00;"&gt;x&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#009b00;"&gt;Name&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;uc&amp;quot;
    &lt;/span&gt;&lt;span style="color:#009b00;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;
    &lt;/span&gt;&lt;span style="color:#009b00;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#009b00;"&gt;x&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;    
    &lt;/span&gt;&lt;span style="color:#009b00;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#009b00;"&gt;my&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;clr-namespace:Tests&amp;quot;&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Canvas &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Width&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;150&amp;quot; &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Height&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;200&amp;quot; &lt;/span&gt;&lt;span style="color:#009b00;"&gt;x&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#009b00;"&gt;Name&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;cv&amp;quot;&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;StackPanel &lt;/span&gt;&lt;span style="color:#009b00;"&gt;x&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#009b00;"&gt;Name&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;sp&amp;quot;&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;TextBlock &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Text&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;Click me&amp;quot; &lt;/span&gt;&lt;span style="color:#009b00;"&gt;x&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;:&lt;/span&gt;&lt;span style="color:#009b00;"&gt;Name&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;=&lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;bt&amp;quot; &lt;/span&gt;&lt;span style="color:#a1b070;"&gt;/&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;Canvas&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;    
&amp;lt;/&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;UserControl&lt;/span&gt;&lt;span style="color:#a1b070;"&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;And here’s the code-behind:&lt;/p&gt;

&lt;pre style="background-color:black;" class="code"&gt;&lt;span style="color:#d6d694;"&gt;public partial class &lt;/span&gt;&lt;span style="color:#009b00;"&gt;test &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;: &lt;/span&gt;&lt;span style="color:#009b00;"&gt;UserControl &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;{
    &lt;/span&gt;&lt;span style="color:#d6d694;"&gt;public &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;test&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;() {
        &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;InitializeComponent&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;();
        &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;bt&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;MouseLeftButtonDown &lt;/span&gt;&lt;span style="color:#80ff00;"&gt;+= &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;PrintInfo&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;;
        &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;sp&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;MouseLeftButtonDown &lt;/span&gt;&lt;span style="color:#80ff00;"&gt;+= &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;PrintInfo&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;;
        &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;cv&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;MouseLeftButtonDown &lt;/span&gt;&lt;span style="color:#80ff00;"&gt;+= &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;PrintInfo&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;;
        &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;MouseLeftButtonDown &lt;/span&gt;&lt;span style="color:#80ff00;"&gt;+= &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;PrintInfo&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;; 
    }
    &lt;/span&gt;&lt;span style="color:#d6d694;"&gt;private void &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;PrintInfo&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;(&lt;br /&gt;             &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Object &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;sender&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;, &lt;/span&gt;&lt;span style="color:#009b00;"&gt;MouseButtonEventArgs &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;e&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;)
    {
      &lt;/span&gt;&lt;span style="color:#d6d694;"&gt;var &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;info &lt;/span&gt;&lt;span style="color:#80ff00;"&gt;= &lt;/span&gt;&lt;span style="color:#009b00;"&gt;String&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;Format&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;(&lt;br /&gt;         &lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;elemento original: {0} - elemento actual: {1}\n&amp;quot;&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;,
         ((&lt;/span&gt;&lt;span style="color:#009b00;"&gt;FrameworkElement&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;)&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;e&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;OriginalSource&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;)&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;Name&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;,
         ((&lt;/span&gt;&lt;span style="color:#009b00;"&gt;FrameworkElement&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;)&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;sender&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;)&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;Name&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;);
      &lt;/span&gt;&lt;span style="color:#009b00;"&gt;MessageBox&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;Show&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;(&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;info&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;);
    }
}&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;If you run the previous sample, you’ll notice that the event bubbles from the button until it reaches the root user control. The MouseButtonEventArgs class ends up inheriting from the RoutedEventArgs class. Due to that, we can access the OriginalSource property and find out which object is responsible for the event that is bubbling. Notice that the MouseButtonEventArgs ends up adding the read/write Handled property: when you set it to true, the event won’t be propagated beyond the current element that is responsible for the event that is being fired.&lt;/p&gt;

&lt;p&gt;Unfortunately, you can’t really create custom routed events in Siverlight. The reason is simple: there isn’t a public API for letting you do that (if you dig into the code of the MouseLeftButtonDown event instantiation, you’ll notice that routed events are created through the RoutedEvent constructor which is internal). What this means is that you’re limited to creating “normal” events in your custom classes. I’m not sure if this limitation will ever be removed from Silverlight. And I guess this sums it up quite nicely. Stay tuned for more on Siverlight.&lt;/p&gt;
[Crossposted from http://msmvps.com/blogs/luisabreu]&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.com/aggbug.aspx?PostID=38525" width="1" height="1"&gt;</description><category domain="http://pontonetpt.com/blogs/luisabreu/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>Vacations vs work time</title><link>http://pontonetpt.com/blogs/luisabreu/archive/2010/01/28/vacations-vs-work-time.aspx</link><pubDate>Thu, 28 Jan 2010 18:32:27 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:38523</guid><dc:creator>Luis Abreu</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I’ve just finished reading an excellent &lt;a href="http://www.scottberkun.com/blog/2010/should-americans-get-more-vacation/"&gt;post&lt;/a&gt; by Scott Berkun on this topic. I couldn’t agree more, but unfortunately, things don’t work like that (and the problem is not limited to America only!)&lt;/p&gt;
[Crossposted from http://msmvps.com/blogs/luisabreu]&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.com/aggbug.aspx?PostID=38523" width="1" height="1"&gt;</description><category domain="http://pontonetpt.com/blogs/luisabreu/archive/tags/Trivia/default.aspx">Trivia</category></item><item><title>AjaxToolkit - ModalPopup (Confirmar algo)</title><link>http://pontonetpt.com/blogs/guilhermecardoso/archive/2010/01/28/ajaxtoolkit-modalpopup-confirmar-algo.aspx</link><pubDate>Thu, 28 Jan 2010 14:17:00 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:38517</guid><dc:creator>Guilherme Cardoso</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;Um dos controlos do &lt;b&gt;AjaxToolKit &lt;/b&gt;que &amp;eacute; bastante &amp;uacute;til no desenvolvimento de um website &amp;eacute; o &lt;i&gt;ModalPopup&lt;/i&gt;. &lt;br /&gt;Se ainda n&amp;atilde;o t&amp;ecirc;m instalado, podem fazer download aqui: &lt;a href="http://ajaxcontroltoolkit.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=36097"&gt;http://ajaxcontroltoolkit.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=36097&lt;/a&gt;&lt;br /&gt;Para instalar, carregamos no lado direito do rato em cima da &lt;i&gt;ToolBox&lt;/i&gt; e vamos a &amp;quot;&lt;i&gt;Add New Tab&lt;/i&gt;&amp;quot;. Damos-lhe um nome, como &amp;quot;AjaxToolKit&amp;quot; e voltamos a carregar em cima dela e vamos a &amp;quot;&lt;i&gt;Choose Items&amp;quot;.&lt;/i&gt; Abrimos a pasta do download do &lt;b&gt;AjaxToolKit&lt;/b&gt; e escolhemos a .dll que est&amp;aacute; na pasta principal (&lt;i&gt;AjaxControlToolkit.dll&lt;/i&gt;)&lt;/p&gt;
&lt;p&gt;Como ele foi desenvolvido n&amp;atilde;o apenas com o intuito de mostrar algo ao cliente, mas tamb&amp;eacute;m de prevenir um submit, podemos us&amp;aacute;-lo sempre que quisermos que o cliente confirme se deseja apagar algo, editar, etc.&lt;br /&gt;Neste exemplo usei como confirma&amp;ccedil;&amp;atilde;o para apagar algo.&lt;/p&gt;
&lt;p&gt;Criamos um &lt;i&gt;Button&lt;/i&gt; mas n&amp;atilde;o lhe damos nenhum evento. Este &lt;i&gt;Button&lt;/i&gt; ser&amp;aacute; usado apenas para chamar o &lt;i&gt;ModalPopup&lt;/i&gt; sem provocar nenhum PostBack (AJAX &amp;eacute; mesmo engra&amp;ccedil;ado).&lt;/p&gt;
&lt;pre style="color:#000000;background-color:#eeeeee;font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="color:#bb7977;font-weight:bold;"&gt;&amp;lt;asp:Button&lt;/span&gt; &lt;span style="color:#8080c0;font-weight:bold;"&gt;ID&lt;/span&gt;=&lt;span style="color:#a68500;"&gt;&amp;quot;Button2&amp;quot;&lt;/span&gt; &lt;span style="color:#8080c0;font-weight:bold;"&gt;runat&lt;/span&gt;=&lt;span style="color:#a68500;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#a68500;"&gt;&lt;/span&gt;&lt;span style="color:#8080c0;font-weight:bold;"&gt;Text&lt;/span&gt;=&lt;span style="color:#a68500;"&gt;&amp;quot;Apagar &amp;raquo;&amp;quot;&lt;/span&gt; &lt;span style="color:#bb7977;font-weight:bold;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;
Agora vamos usar o &lt;i&gt;ModalPopup&lt;/i&gt; . Este controlo vai chamar outro controlo, por norma usamos um Painel (nem sei bem se d&amp;aacute; para fazer com outros).&lt;/p&gt;
&lt;pre style="color:#000000;background-color:#eeeeee;font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="color:#bb7977;font-weight:bold;"&gt;&amp;lt;cc1:modalpopupextender&lt;/span&gt; &lt;span style="color:#8080c0;font-weight:bold;"&gt;BackgroundCssClass&lt;/span&gt;=&lt;span style="color:#a68500;"&gt;&amp;quot;modalPopup1_Background&amp;quot;&lt;/span&gt; &lt;span style="color:#8080c0;font-weight:bold;"&gt;ID&lt;/span&gt;=&lt;span style="color:#a68500;"&gt;&amp;quot;ModalPopupExtender1&amp;quot;&lt;/span&gt; &lt;span style="color:#8080c0;font-weight:bold;"&gt;runat&lt;/span&gt;=&lt;span style="color:#a68500;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#8080c0;font-weight:bold;"&gt;TargetControlID&lt;/span&gt;=&lt;span style="color:#a68500;"&gt;&amp;quot;Button2&amp;quot;&lt;/span&gt; &lt;span style="color:#8080c0;font-weight:bold;"&gt;PopupControlID&lt;/span&gt;=&lt;span style="color:#a68500;"&gt;&amp;quot;Panel1&amp;quot;&lt;/span&gt; &lt;span style="color:#8080c0;font-weight:bold;"&gt;DropShadow&lt;/span&gt;=&lt;span style="color:#a68500;"&gt;&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color:#8080c0;font-weight:bold;"&gt;CancelControlID&lt;/span&gt;=&lt;span style="color:#a68500;"&gt;&amp;quot;Button4&amp;quot;&lt;/span&gt; &lt;span style="color:#bb7977;font-weight:bold;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;
&lt;br /&gt;O &lt;i&gt;TargetControlID&lt;b&gt; &lt;/b&gt;&lt;/i&gt;indica o controlo que vai chamar o &lt;i&gt;ModalPopup&lt;/i&gt;. O &lt;i&gt;CancelControlID&lt;/i&gt; &amp;eacute; importante pois vai indicar o controlo que vai cancelar o submit, neste caso usamos um &lt;i&gt;Button&lt;/i&gt;. Este &lt;i&gt;Button&lt;/i&gt;, assim como a mensagem a aparecer ao cliente est&amp;atilde;o dentro de um painel:&lt;/p&gt;
&lt;pre style="color:#000000;background-color:#eeeeee;font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="color:#bb7977;font-weight:bold;"&gt;&amp;lt;asp:Panel&lt;/span&gt; &lt;span style="color:#8080c0;font-weight:bold;"&gt;ID&lt;/span&gt;=&lt;span style="color:#a68500;"&gt;&amp;quot;Panel1&amp;quot;&lt;/span&gt; &lt;span style="color:#8080c0;font-weight:bold;"&gt;runat&lt;/span&gt;=&lt;span style="color:#a68500;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#8080c0;font-weight:bold;"&gt;CssClass&lt;/span&gt;=&lt;span style="color:#a68500;"&gt;&amp;quot;modalPopup1&amp;quot;&lt;/span&gt;&lt;span style="color:#bb7977;font-weight:bold;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                Deseja mesmo apagar?&lt;span style="color:#bb7977;font-weight:bold;"&gt;&amp;lt;br /&amp;gt;&lt;/span&gt;&lt;br /&gt;                Esta ac&amp;ccedil;&amp;atilde;o n&amp;atilde;o pode ser revertida!&lt;br /&gt;                    &lt;span style="color:#bb7977;font-weight:bold;"&gt;&amp;lt;asp:Button&lt;/span&gt; &lt;span style="color:#8080c0;font-weight:bold;"&gt;ID&lt;/span&gt;=&lt;span style="color:#a68500;"&gt;&amp;quot;Button4&amp;quot;&lt;/span&gt; &lt;span style="color:#8080c0;font-weight:bold;"&gt;runat&lt;/span&gt;=&lt;span style="color:#a68500;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#8080c0;font-weight:bold;"&gt;Text&lt;/span&gt;=&lt;span style="color:#a68500;"&gt;&amp;quot;Cancelar&amp;quot;&lt;/span&gt; &lt;span style="color:#bb7977;font-weight:bold;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;                    &lt;span style="color:#bb7977;font-weight:bold;"&gt;&amp;lt;asp:Button&lt;/span&gt; &lt;span style="color:#8080c0;font-weight:bold;"&gt;ID&lt;/span&gt;=&lt;span style="color:#a68500;"&gt;&amp;quot;Button3&amp;quot;&lt;/span&gt; &lt;span style="color:#8080c0;font-weight:bold;"&gt;runat&lt;/span&gt;=&lt;span style="color:#a68500;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#8080c0;font-weight:bold;"&gt;Text&lt;/span&gt;=&lt;span style="color:#a68500;"&gt;&amp;quot;Apagar Categoria&amp;quot;&lt;/span&gt;&lt;br /&gt;                        &lt;span style="color:#8080c0;font-weight:bold;"&gt;onclick&lt;/span&gt;=&lt;span style="color:#a68500;"&gt;&amp;quot;Button3_Click&amp;quot;&lt;/span&gt; &lt;span style="color:#bb7977;font-weight:bold;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#bb7977;font-weight:bold;"&gt;&amp;lt;/asp:Panel&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;
&lt;br /&gt;Aqui temos o &lt;i&gt;Button4&lt;/i&gt; que indicamos no &lt;i&gt;ModalPopup&lt;/i&gt; sendo o bot&amp;atilde;o para cancelar o submit (que na verdade nunca chegou a ser chamado, pois o &lt;i&gt;button&lt;/i&gt; que o faz n&amp;atilde;o era o que chamou a &lt;i&gt;ModalPopup).&lt;/i&gt;&lt;br /&gt;Cri&amp;aacute;mos o &lt;i&gt;Button3&lt;/i&gt; que vai ser o bot&amp;atilde;o que realmente vai fazer o postback e apagar algo.&lt;/p&gt;
&lt;p&gt;Para que a ModalPopup fique mais atractiva ao cliente, o &lt;i&gt;Panel&lt;/i&gt; est&amp;aacute; com 100% de largura/altura e com transpar&amp;ecirc;ncia (&lt;i&gt;alpha&lt;/i&gt;), para que o cliente continue a ver o site mas apenas pode l&amp;aacute; &amp;quot;voltar&amp;quot; se cancelar ou concordar. Ou fazendo um refresh &amp;agrave; p&amp;aacute;gina. O CSS usado foi:&lt;/p&gt;
&lt;pre style="color:#000000;background-color:#eeeeee;font-size:8pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="color:#ff0080;font-weight:bold;"&gt;.&lt;/span&gt;modalPopup1_Background&lt;br /&gt;&lt;span style="color:#ff0080;font-weight:bold;"&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#bb7977;font-weight:bold;"&gt;background-color&lt;/span&gt;&lt;span style="color:#ff0080;font-weight:bold;"&gt;:&lt;/span&gt; &lt;span style="color:#bb7977;font-weight:bold;"&gt;Gray&lt;/span&gt;&lt;span style="color:#ff0080;font-weight:bold;"&gt;;&lt;/span&gt;&lt;br /&gt;    filter&lt;span style="color:#ff0080;font-weight:bold;"&gt;:&lt;/span&gt; alpha&lt;span style="color:#ff0080;font-weight:bold;"&gt;(&lt;/span&gt;opacity&lt;span style="color:#ff0080;font-weight:bold;"&gt;=&lt;/span&gt;&lt;span style="color:#800080;font-weight:bold;"&gt;70&lt;/span&gt;&lt;span style="color:#ff0080;font-weight:bold;"&gt;) !&lt;/span&gt;important&lt;span style="color:#ff0080;font-weight:bold;"&gt;;&lt;/span&gt;&lt;br /&gt;    opacity&lt;span style="color:#ff0080;font-weight:bold;"&gt;:&lt;/span&gt; &lt;span style="color:#800080;font-weight:bold;"&gt;0.7&lt;/span&gt;&lt;span style="color:#ff0080;font-weight:bold;"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#bb7977;font-weight:bold;"&gt;top&lt;/span&gt;&lt;span style="color:#ff0080;font-weight:bold;"&gt;:&lt;/span&gt; &lt;span style="color:#800080;font-weight:bold;"&gt;0px&lt;/span&gt; &lt;span style="color:#ff0080;font-weight:bold;"&gt;!&lt;/span&gt;important&lt;span style="color:#ff0080;font-weight:bold;"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#bb7977;font-weight:bold;"&gt;left&lt;/span&gt;&lt;span style="color:#ff0080;font-weight:bold;"&gt;:&lt;/span&gt; &lt;span style="color:#800080;font-weight:bold;"&gt;0px&lt;/span&gt; &lt;span style="color:#ff0080;font-weight:bold;"&gt;!&lt;/span&gt;important&lt;span style="color:#ff0080;font-weight:bold;"&gt;;&lt;/span&gt;&lt;br /&gt;    position&lt;span style="color:#ff0080;font-weight:bold;"&gt;:&lt;/span&gt; absolute &lt;span style="color:#ff0080;font-weight:bold;"&gt;!&lt;/span&gt;important&lt;span style="color:#ff0080;font-weight:bold;"&gt;;&lt;/span&gt;&lt;br /&gt;    z-index&lt;span style="color:#ff0080;font-weight:bold;"&gt;:&lt;/span&gt; &lt;span style="color:#800080;font-weight:bold;"&gt;1&lt;/span&gt; &lt;span style="color:#ff0080;font-weight:bold;"&gt;!&lt;/span&gt;important&lt;span style="color:#ff0080;font-weight:bold;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ff0080;font-weight:bold;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#ff0080;font-weight:bold;"&gt;.&lt;/span&gt;modalPopup1&lt;br /&gt;&lt;span style="color:#ff0080;font-weight:bold;"&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#bb7977;font-weight:bold;"&gt;background-color&lt;/span&gt;&lt;span style="color:#ff0080;font-weight:bold;"&gt;:&lt;/span&gt; &lt;span style="color:#800080;font-weight:bold;"&gt;#ffffdd&lt;/span&gt;&lt;span style="color:#ff0080;font-weight:bold;"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#bb7977;font-weight:bold;"&gt;padding&lt;/span&gt;&lt;span style="color:#ff0080;font-weight:bold;"&gt;:&lt;/span&gt; &lt;span style="color:#800080;font-weight:bold;"&gt;3px&lt;/span&gt;&lt;span style="color:#ff0080;font-weight:bold;"&gt;;&lt;/span&gt;&lt;br /&gt;    z-index&lt;span style="color:#ff0080;font-weight:bold;"&gt;:&lt;/span&gt; &lt;span style="color:#800080;font-weight:bold;"&gt;10001&lt;/span&gt;&lt;span style="color:#ff0080;font-weight:bold;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ff0080;font-weight:bold;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;O resultado final &amp;eacute; semelhante ao resultado da p&amp;aacute;gina do AjaxToolKit: &lt;a href="http://www.asp.net/AJAX/AjaxControlToolkit/Samples/ModalPopup/ModalPopup.aspx"&gt;http://www.asp.net/AJAX/AjaxControlToolkit/Samples/ModalPopup/ModalPopup.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;O melhor disto &amp;eacute; que os controlos do &lt;b&gt;AjaxToolKit&lt;/b&gt; s&amp;atilde;o compat&amp;iacute;veis com os browsers mais utilizadores e at&amp;eacute; ao momento nunca tive nenhum problema em us&amp;aacute;-los (sen&amp;atilde;o inventar de mais claro).&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.com/aggbug.aspx?PostID=38517" width="1" height="1"&gt;</description></item><item><title>Emparelhando O Estado Da Sessão ASP.NET Com Autenticação Por Formulário</title><link>http://pontonetpt.com/blogs/paulomorgado/archive/2010/01/28/emparelhando-o-estado-da-sess-227-o-asp-net-com-autentica-231-227-o-por-formul-225-rio.aspx</link><pubDate>Thu, 28 Jan 2010 01:30:15 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:38513</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>0</slash:comments><description>&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p align="justify"&gt;Hoje, estava a falar com o &lt;a title="João Cardoso" href="http://pontonetpt.com/blogs/joaocardoso" target="_blank"&gt;João&lt;/a&gt; acerca de um modo de emparelhar a duração da &lt;a title="ASP.NET Session State Overview" href="http://msdn.microsoft.com/library/ms178581.aspx" target="_blank"&gt;estado de sessão&lt;/a&gt; &lt;a title="ASP.NET Developer Center" href="http://msdn.microsoft.com/asp.net/" target="_blank"&gt;ASP.NET&lt;/a&gt; com a duração do &lt;a title="Understanding the Forms Authentication Ticket and Cookie" href="http://support.microsoft.com/kb/910443" target="_blank"&gt;ticket&lt;/a&gt; de &lt;a title="Forms Authentication Provider" href="http://msdn.microsoft.com/library/9wff0kyh.aspx" target="_blank"&gt;autenticação por formulário&lt;/a&gt;.&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p align="justify"&gt;A minha ideia era guardar o identificador de sessão na propriedade &lt;a title="FormsAuthenticationTicket.UserData Property" href="http://msdn.microsoft.com/library/System.Web.Security.FormsAuthenticationTicket.UserData.aspx" target="_blank"&gt;UserData&lt;/a&gt;&amp;#160; &lt;a title="FormsAuthenticationTicket Class" href="http://msdn.microsoft.com/library/system.web.security.formsauthenticationticket.aspx" target="_blank"&gt;forms authentication ticket&lt;/a&gt; durante o &lt;em&gt;login&lt;/em&gt; e obtê-lo através de um &lt;a title="ISessionIDManager Interface" href="http://msdn.microsoft.com/library/system.web.sessionstate.isessionidmanager.aspx" target="_blank"&gt;session ID manager&lt;/a&gt; desenvolvido para o efeito.&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p align="justify"&gt;O código do &lt;em&gt;login&lt;/em&gt; seria algo assim:&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;protected void &lt;/span&gt;Login1_Authenticate(&lt;span style="color:blue;"&gt;object &lt;/span&gt;sender, &lt;span style="color:#2b91af;"&gt;AuthenticateEventArgs &lt;/span&gt;e)
{
    &lt;span style="color:blue;"&gt;bool &lt;/span&gt;isPersistent = &lt;span style="color:blue;"&gt;this&lt;/span&gt;.Login1.RememberMeSet;
    &lt;span style="color:blue;"&gt;string &lt;/span&gt;username = &lt;span style="color:blue;"&gt;this&lt;/span&gt;.Login1.UserName;
    &lt;span style="color:blue;"&gt;var &lt;/span&gt;ticket = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;FormsAuthenticationTicket&lt;/span&gt;(
        0,
        username,
        &lt;span style="color:#2b91af;"&gt;DateTime&lt;/span&gt;.Now,
        &lt;span style="color:#2b91af;"&gt;DateTime&lt;/span&gt;.Now.AddMinutes(2),
        isPersistent,
        &lt;span style="color:#2b91af;"&gt;Guid&lt;/span&gt;.NewGuid().ToString(&lt;span style="color:#a31515;"&gt;&amp;quot;N&amp;quot;&lt;/span&gt;));

    &lt;span style="color:green;"&gt;// Encrypt the ticket.
    &lt;/span&gt;&lt;span style="color:blue;"&gt;var &lt;/span&gt;encryptedTicket = &lt;span style="color:#2b91af;"&gt;FormsAuthentication&lt;/span&gt;.Encrypt(ticket);

    &lt;span style="color:green;"&gt;// Create the cookie.
    &lt;/span&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.Response.Cookies.Add(&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;HttpCookie&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;FormsAuthentication&lt;/span&gt;.FormsCookieName, encryptedTicket));

    &lt;span style="color:green;"&gt;// Redirect back to original URL.
    &lt;/span&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.Response.Redirect(&lt;span style="color:#2b91af;"&gt;FormsAuthentication&lt;/span&gt;.GetRedirectUrl(username, isPersistent));
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;p align="justify"&gt;Para efeitos de demonstração estou a usar um &lt;a title="Guid Structure" href="http://msdn.microsoft.com/library/system.guid.aspx" target="_blank"&gt;Guid&lt;/a&gt; como identificador de sessão.&lt;/p&gt;
&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;p align="justify"&gt;O &lt;em&gt;session ID manager&lt;/em&gt; vai retornar ao &lt;a title="SessionStateModule Class" href="http://msdn.microsoft.com/library/System.Web.SessionState.SessionStateModule.aspx" target="_blank"&gt;session state HTTP module&lt;/a&gt; o identificador de sessão uando este o pedir:&lt;/p&gt;
&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;public class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;SessionIdManager &lt;/span&gt;: &lt;span style="color:blue;"&gt;global&lt;/span&gt;::System.Web.SessionState.&lt;span style="color:#2b91af;"&gt;ISessionIDManager
&lt;/span&gt;{
    &lt;span style="color:blue;"&gt;#region &lt;/span&gt;ISessionIDManager Members

    &lt;span style="color:blue;"&gt;public string &lt;/span&gt;CreateSessionID(&lt;span style="color:#2b91af;"&gt;HttpContext &lt;/span&gt;context)
    {
        &lt;span style="color:blue;"&gt;return &lt;/span&gt;GetDummySessionIdOrRedirectToLoginPage(context);
    }

    &lt;span style="color:blue;"&gt;public string &lt;/span&gt;GetSessionID(&lt;span style="color:#2b91af;"&gt;HttpContext &lt;/span&gt;context)
    {
        &lt;span style="color:blue;"&gt;return &lt;/span&gt;GetSessionIdFromFormsIdentity(context);
    }

    &lt;span style="color:blue;"&gt;public void &lt;/span&gt;Initialize()
    {
    }

    &lt;span style="color:blue;"&gt;public bool &lt;/span&gt;InitializeRequest(&lt;span style="color:#2b91af;"&gt;HttpContext &lt;/span&gt;context, &lt;span style="color:blue;"&gt;bool &lt;/span&gt;suppressAutoDetectRedirect, &lt;span style="color:blue;"&gt;out bool &lt;/span&gt;supportSessionIDReissue)
    {
        supportSessionIDReissue = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;
        &lt;span style="color:blue;"&gt;return &lt;/span&gt;GetSessionIdFromFormsIdentity(context) == &lt;span style="color:blue;"&gt;null&lt;/span&gt;;
    }

    &lt;span style="color:blue;"&gt;public void &lt;/span&gt;RemoveSessionID(&lt;span style="color:#2b91af;"&gt;HttpContext &lt;/span&gt;context)
    {
    }

    &lt;span style="color:blue;"&gt;public void &lt;/span&gt;SaveSessionID(&lt;span style="color:#2b91af;"&gt;HttpContext &lt;/span&gt;context, &lt;span style="color:blue;"&gt;string &lt;/span&gt;id, &lt;span style="color:blue;"&gt;out bool &lt;/span&gt;redirected, &lt;span style="color:blue;"&gt;out bool &lt;/span&gt;cookieAdded)
    {
        redirected = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;
        cookieAdded = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;
    }

    &lt;span style="color:blue;"&gt;public bool &lt;/span&gt;Validate(&lt;span style="color:blue;"&gt;string &lt;/span&gt;id)
    {
        &lt;span style="color:blue;"&gt;return true&lt;/span&gt;;
    }

    &lt;span style="color:blue;"&gt;#endregion

    private static string &lt;/span&gt;GetSessionIdFromFormsIdentity(&lt;span style="color:#2b91af;"&gt;HttpContext &lt;/span&gt;context)
    {
        &lt;span style="color:blue;"&gt;var &lt;/span&gt;identity = context.User != &lt;span style="color:blue;"&gt;null &lt;/span&gt;? context.User.Identity &lt;span style="color:blue;"&gt;as &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;FormsIdentity &lt;/span&gt;: &lt;span style="color:blue;"&gt;null&lt;/span&gt;;

        &lt;span style="color:blue;"&gt;if &lt;/span&gt;((identity == &lt;span style="color:blue;"&gt;null&lt;/span&gt;) || (identity.Ticket == &lt;span style="color:blue;"&gt;null&lt;/span&gt;) || &lt;span style="color:blue;"&gt;string&lt;/span&gt;.IsNullOrEmpty(identity.Ticket.UserData))
        {
            &lt;span style="color:blue;"&gt;return &lt;/span&gt;GetDummySessionIdOrRedirectToLoginPage(context);
        }
        &lt;span style="color:blue;"&gt;else
        &lt;/span&gt;{
            &lt;span style="color:blue;"&gt;return &lt;/span&gt;identity.Ticket.UserData;
        }
    }

    &lt;span style="color:blue;"&gt;private static string &lt;/span&gt;GetDummySessionIdOrRedirectToLoginPage(&lt;span style="color:#2b91af;"&gt;HttpContext &lt;/span&gt;context)
    {
        &lt;span style="color:blue;"&gt;if &lt;/span&gt;(context.Request.CurrentExecutionFilePath.Equals(&lt;span style="color:#2b91af;"&gt;FormsAuthentication&lt;/span&gt;.DefaultUrl, &lt;span style="color:#2b91af;"&gt;StringComparison&lt;/span&gt;.OrdinalIgnoreCase)
                        || context.Request.CurrentExecutionFilePath.Equals(&lt;span style="color:#2b91af;"&gt;FormsAuthentication&lt;/span&gt;.LoginUrl, &lt;span style="color:#2b91af;"&gt;StringComparison&lt;/span&gt;.OrdinalIgnoreCase))
        {
            &lt;span style="color:blue;"&gt;return &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Guid&lt;/span&gt;.NewGuid().ToString(&lt;span style="color:#a31515;"&gt;&amp;quot;N&amp;quot;&lt;/span&gt;);
        }
        &lt;span style="color:blue;"&gt;else
        &lt;/span&gt;{
            &lt;span style="color:#2b91af;"&gt;FormsAuthentication&lt;/span&gt;.RedirectToLoginPage();
            &lt;span style="color:blue;"&gt;return null&lt;/span&gt;;
        }
    }
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;p align="justify"&gt;&lt;strong&gt;NOTA:&lt;/strong&gt; Embora este código deva funcionar, trata-se apenas de um exercício intelectual e não foi devidamente testado.&lt;/p&gt;
&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.com/aggbug.aspx?PostID=38513" width="1" height="1"&gt;</description><category domain="http://pontonetpt.com/blogs/paulomorgado/archive/tags/.NET/default.aspx">.NET</category><category domain="http://pontonetpt.com/blogs/paulomorgado/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://pontonetpt.com/blogs/paulomorgado/archive/tags/Desenvolvimento/default.aspx">Desenvolvimento</category><category domain="http://pontonetpt.com/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://pontonetpt.com/blogs/paulomorgado/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://pontonetpt.com/blogs/paulomorgado/archive/tags/TipsAndTricks/default.aspx">TipsAndTricks</category><category domain="http://pontonetpt.com/blogs/paulomorgado/archive/tags/Web/default.aspx">Web</category><category domain="http://pontonetpt.com/blogs/paulomorgado/archive/tags/.NET2.0/default.aspx">.NET2.0</category></item><item><title>Podcast - Dica de informática 05</title><link>http://pontonetpt.com/blogs/mauriciojunior/archive/2010/01/27/podcast-dica-de-inform-225-tica-05.aspx</link><pubDate>Wed, 27 Jan 2010 16:06:00 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:38511</guid><dc:creator>Mauricio Junior</dc:creator><slash:comments>0</slash:comments><description>&lt;h3&gt;
&lt;h3&gt;&lt;span&gt;&lt;img src="http://blog.mauriciojunior.org/image.axd?picture=podcast-com-aspneti-com.JPG" alt="" /&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;	&lt;/span&gt;&lt;span style="font-weight:normal;"&gt;Pessoal, foi publicado mais uma dica de inform&amp;aacute;tica junto ao site da comunidade aspneti.com. Podcast interativo e dando dica de como desenvolver com C#.NET / ASP.NET dentro do iPhone e BlackBerry.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:normal;"&gt;Acesse e ou&amp;ccedil;a:&amp;nbsp;&lt;/span&gt;&lt;a href="http://aspneti.com/dica+de+informatica+05+site+desenvolvendo+para+iphone+com+csharp+29,4.aspx"&gt;&lt;span style="font-weight:normal;"&gt;http://aspneti.com/dica+de+informatica+05+site+desenvolvendo+para+iphone+com+csharp+29,4.aspx&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight:normal;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/h3&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.com/aggbug.aspx?PostID=38511" width="1" height="1"&gt;</description></item><item><title>Book review: Confessions of a public speaker</title><link>http://pontonetpt.com/blogs/luisabreu/archive/2010/01/27/book-review-confessions-of-a-public-speaker.aspx</link><pubDate>Wed, 27 Jan 2010 10:35:43 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:38510</guid><dc:creator>Luis Abreu</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I’ve just finished reading &lt;a href="http://www.scottberkun.com/"&gt;Scott Berkun&lt;/a&gt;’s latest &lt;a href="http://www.amazon.com/Confessions-Public-Speaker-Scott-Berkun/dp/0596801998/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1264587838&amp;amp;sr=8-1"&gt;book&lt;/a&gt;. Scott is a really good communicator and you can say that I’ve been a fan of his work since his first &lt;a href="http://www.amazon.com/Making-Things-Happen-Mastering-Management/dp/0596517718/ref=sr_1_2?ie=UTF8&amp;amp;s=books&amp;amp;qid=1264587977&amp;amp;sr=1-2"&gt;best seller&lt;/a&gt; (Making things happen), which, btw, I’ve &lt;a href="http://msmvps.com/blogs/luisabreu/archive/2008/08/10/book-review-making-things-happen.aspx"&gt;reviewed&lt;/a&gt; here a long time ago.&lt;/p&gt;  &lt;p&gt;You’ll be able to find several interesting topics in &lt;a href="http://www.amazon.com/Confessions-Public-Speaker-Scott-Berkun/dp/0596801998/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1264587977&amp;amp;sr=1-1"&gt;Confessions of a public speaker&lt;/a&gt;. Besides tips on how to improve your skills, you’ll also find some advice on how to handle several problems which you’ll eventually face when doing public speaking in front of lots of people. I’m really convinced that if you’re a public speaker, then you’ll learn a couple of things by reading this book. I know that the presentations I’ve done in the past would have been better if I had this book at the time. Anyway, it’s never late and I’m really under the impression that by using Scott’s tips, I’ll be doing a better job when I need to talk in public in future gigs. &lt;/p&gt;  &lt;p&gt;I must confess that I did really enjoyed the chapter on confessions where you can find a collection of short essays on things that have gone wrong during presentations (of professional speakers). Overall, I found this a pleasing and easy reading book with lots of good advices. Note: 9/10.&lt;/p&gt;
[Crossposted from http://msmvps.com/blogs/luisabreu]&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.com/aggbug.aspx?PostID=38510" width="1" height="1"&gt;</description><category domain="http://pontonetpt.com/blogs/luisabreu/archive/tags/Books/default.aspx">Books</category></item><item><title>Creating attached properties</title><link>http://pontonetpt.com/blogs/luisabreu/archive/2010/01/27/creating-attached-properties.aspx</link><pubDate>Wed, 27 Jan 2010 10:20:27 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:38509</guid><dc:creator>Luis Abreu</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Now that you understand what attached properties are, we’re in the position to look at what is needed for creating attached properties. Since we’re building custom code, we do really need to rely in the &lt;a href="http://msdn.microsoft.com/en-us/library/ms597497(VS.100).aspx"&gt;RegisterAttached&lt;/a&gt; method (of the DependencyProperty class). Creating a new attached properties means doing the following:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;adding a static DependencyProperty field to the class; &lt;/li&gt;    &lt;li&gt;using the RegisterAttached method for creating the field which is used as a store for the dependency property; &lt;/li&gt;    &lt;li&gt;add a couple of static methods named GetXXX/SetXXX (where XXX is the name of the property) used as shortcuts for getting and setting the attached property from code. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Let’s suppose that we were creating a new look-a-like Canvas class. Here’s the code you’re expected to add to your class for the Left property:&lt;/p&gt;  &lt;pre style="background-color:black;" class="code"&gt;&lt;span style="color:#d6d694;"&gt;public class &lt;/span&gt;&lt;span style="color:#009b00;"&gt;MyCanvas&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;: &lt;/span&gt;&lt;span style="color:#009b00;"&gt;Panel &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;{
    &lt;/span&gt;&lt;span style="color:#d6d694;"&gt;public static &lt;/span&gt;&lt;span style="color:#009b00;"&gt;DependencyProperty &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;LeftProperty&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;;
&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;    &lt;/span&gt;&lt;span style="color:#d6d694;"&gt;static &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;MyCanvas&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;() {
        &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;LeftProperty &lt;/span&gt;&lt;span style="color:#80ff00;"&gt;= &lt;/span&gt;&lt;span style="color:#009b00;"&gt;DependencyProperty&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;RegisterAttached&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;(
            &lt;/span&gt;&lt;span style="color:#44b1e3;"&gt;&amp;quot;Left&amp;quot;&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;,
            &lt;/span&gt;&lt;span style="color:#d6d694;"&gt;typeof &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;(&lt;/span&gt;&lt;span style="color:#ff8080;"&gt;Double&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;),
            &lt;/span&gt;&lt;span style="color:#d6d694;"&gt;typeof &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;(&lt;/span&gt;&lt;span style="color:#009b00;"&gt;MyCanvas&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;),
            &lt;/span&gt;&lt;span style="color:#d6d694;"&gt;new &lt;/span&gt;&lt;span style="color:#009b00;"&gt;PropertyMetadata&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;(&lt;/span&gt;&lt;span style="color:#d6d694;"&gt;null&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;));
&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;    }
    &lt;/span&gt;&lt;span style="color:#d6d694;"&gt;public static &lt;/span&gt;&lt;span style="color:#ff8080;"&gt;Double &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;GetLeft&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;(&lt;/span&gt;&lt;span style="color:#009b00;"&gt;UIElement &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;element&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;) {
        &lt;/span&gt;&lt;span style="color:#d6d694;"&gt;return &lt;/span&gt;&lt;span style="color:#a79a86;"&gt;(&lt;/span&gt;&lt;span style="color:#ff8080;"&gt;Double&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;) &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;element&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;GetValue&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;(&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;LeftProperty&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;);
    }
    &lt;/span&gt;&lt;span style="color:#d6d694;"&gt;public static void &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;SetLeft&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;(&lt;br /&gt;            &lt;/span&gt;&lt;span style="color:#009b00;"&gt;UIElement &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;element&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;, &lt;/span&gt;&lt;span style="color:#ff8080;"&gt;Double &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;value&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;) {
        &lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;element&lt;/span&gt;&lt;span style="color:#80ff00;"&gt;.&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;SetValue&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;(&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;LeftProperty&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;,&lt;/span&gt;&lt;span style="color:#e8e8e8;"&gt;value&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;);
    }
&lt;/span&gt;&lt;span style="color:#a79a86;"&gt;}&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;As you can see, we need to start by registering the attached property through the RegisterAttached method. The method expects four parameters: the name of the property, the type of the property, the type of the “owner” of this property (generally, this will be the class that exposes the attached prop) and the associated metadata (notice that if you’re not interesting in setting a default value or in associating a callback method with the property, then you can simply pass null to the PropertyMetadata constructor like I did in the previous snippet).&lt;/p&gt;

&lt;p&gt;After registering the property, you’re supposed to add a setter and a getter: in this case, I’ve called them GetLeft and SetLeft in order to comply with the recommendations. Once again, these methods are there as helpers and you can bypass them when writing you code (though I do recommend using them whenever possible).&lt;/p&gt;

&lt;p&gt;And that’s really it…you don’t need anything extra for exposing an attached property. Stay tuned for more on Silverlight (there’s still a long road to go!)&lt;/p&gt;
[Crossposted from http://msmvps.com/blogs/luisabreu]&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.com/aggbug.aspx?PostID=38509" width="1" height="1"&gt;</description><category domain="http://pontonetpt.com/blogs/luisabreu/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>Brincando Com LINQ: Obtendo As Implementações De Propriedades De Interfaces</title><link>http://pontonetpt.com/blogs/paulomorgado/archive/2010/01/27/brincando-com-linq-obtendo-as-implementa-231-245-es-de-propriedades-de-interfaces.aspx</link><pubDate>Wed, 27 Jan 2010 02:32:02 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:38508</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>0</slash:comments><description>&lt;p align="justify"&gt;Hoje, o meu amigo &lt;a title="Nuno Gomes" href="http://NunoGomes.NET/" target="_blank"&gt;Nuno&lt;/a&gt; estava a escrever algum código para obter as &lt;a title="PropertyInfo Class" href="http://msdn.microsoft.com/library/System.Reflection.PropertyInfo.aspx" target="_blank"&gt;PropertyInfo&lt;/a&gt;s da implementação de uma interface por parte de classe.&lt;/p&gt;  &lt;p align="justify"&gt;Dada este interface:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;public interface &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ISomeInterface
&lt;/span&gt;{
    &lt;span style="color:blue;"&gt;int &lt;/span&gt;IntProperty { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;; }
    &lt;span style="color:blue;"&gt;string &lt;/span&gt;StringProperty { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; }
    &lt;span style="color:blue;"&gt;void &lt;/span&gt;Method();
}&lt;/p&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p align="justify"&gt;e esta classe:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;public class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;SomeClass &lt;/span&gt;: &lt;span style="color:#2b91af;"&gt;ISomeInterface
&lt;/span&gt;{
    &lt;span style="color:blue;"&gt;int &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ISomeInterface&lt;/span&gt;.IntProperty { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;; }
    &lt;span style="color:blue;"&gt;public int &lt;/span&gt;IntProperty { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;private set&lt;/span&gt;; }
    &lt;span style="color:blue;"&gt;public string &lt;/span&gt;StringProperty { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;private set&lt;/span&gt;; }
    &lt;span style="color:blue;"&gt;public void &lt;/span&gt;Method() { }
}&lt;/pre&gt;

&lt;p&gt;o Nuno queria obter:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Int32 ISomeInterface.IntProperty &lt;/li&gt;

  &lt;li&gt;System.String StringProperty &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O código é relativamente simples. Primeiro é necessário obter os mapeamentos da interface:&lt;/p&gt;

&lt;p style="padding-left:1em;"&gt;&lt;code&gt;&lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;SomeClass&lt;/span&gt;).GetInterfaceMap(&lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;ISomeInterface&lt;/span&gt;)).TargetMethods&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;e filtrar por &lt;strong&gt;PropertyInfo&lt;/strong&gt;s para as quais o &lt;a title="MethodInfo Class" href="http://msdn.microsoft.com/library/System.Reflection.MethodInfo.aspx" target="_blank"&gt;MethodInfo&lt;/a&gt; é parte da sua implementação (implementa o método &lt;strong&gt;get&lt;/strong&gt; ou o método &lt;strong&gt;set&lt;/strong&gt;).&lt;/p&gt;

&lt;p&gt;Algo como isto:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;public static bool &lt;/span&gt;Implements(&lt;span style="color:blue;"&gt;this &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;MethodInfo &lt;/span&gt;methodInfo, &lt;span style="color:#2b91af;"&gt;PropertyInfo &lt;/span&gt;propertyInfo)
{
    &lt;span style="color:blue;"&gt;return &lt;/span&gt;(propertyInfo.GetGetMethod(&lt;span style="color:blue;"&gt;true&lt;/span&gt;) == methodInfo) || (propertyInfo.GetSetMethod(&lt;span style="color:blue;"&gt;true&lt;/span&gt;) == methodInfo);
}&lt;/pre&gt;

&lt;p&gt;Mas o que me chamou a atenção foi que, com os&amp;#160; &lt;a title="Extension Methods (C# Programming Guide)" href="http://msdn.microsoft.com/library/bb383977.aspx" target="_blank"&gt;métodos de extensão&lt;/a&gt; acima, posso usar &lt;a title="Language-Integrated Query (LINQ)" href="http://msdn.microsoft.com/library/bb397926.aspx" target="_blank"&gt;LINQ&lt;/a&gt; para obter as desejadas &lt;strong&gt;PropertyInfo&lt;/strong&gt;s.&lt;/p&gt;

&lt;p&gt;Algo assim:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;public static &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;PropertyInfo&lt;/span&gt;&amp;gt; GetInterfacePropertyImplementation(&lt;span style="color:#2b91af;"&gt;Type &lt;/span&gt;implementer, &lt;span style="color:#2b91af;"&gt;Type &lt;/span&gt;implemented)
{
    &lt;span style="color:blue;"&gt;return &lt;/span&gt;(&lt;span style="color:blue;"&gt;from &lt;/span&gt;propertyInfo &lt;span style="color:blue;"&gt;in &lt;/span&gt;implementer.GetProperties(&lt;span style="color:#2b91af;"&gt;BindingFlags&lt;/span&gt;.Instance | &lt;span style="color:#2b91af;"&gt;BindingFlags&lt;/span&gt;.Public | &lt;span style="color:#2b91af;"&gt;BindingFlags&lt;/span&gt;.NonPublic).AsEnumerable()
            &lt;span style="color:blue;"&gt;from &lt;/span&gt;methodInfo &lt;span style="color:blue;"&gt;in &lt;/span&gt;implementer.GetInterfaceMap(implemented).TargetMethods.AsEnumerable()
            &lt;span style="color:blue;"&gt;where &lt;/span&gt;methodInfo.Implements(propertyInfo)
            &lt;span style="color:blue;"&gt;select &lt;/span&gt;propertyInfo).Distinct();
}&lt;/pre&gt;

&lt;p&gt;Para a classe e interface do exemplo, usar o método acimo seria algo como:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;var &lt;/span&gt;q = GetInterfacePropertyImplementation(&lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;SomeClass&lt;/span&gt;), &lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;ISomeInterface&lt;/span&gt;));

&lt;span style="color:blue;"&gt;foreach &lt;/span&gt;(&lt;span style="color:blue;"&gt;var &lt;/span&gt;p &lt;span style="color:blue;"&gt;in &lt;/span&gt;q)
{
    &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(p);
}&lt;/pre&gt;

&lt;p&gt;O que produzirá o seguinte resultado:&lt;/p&gt;

&lt;pre class="code"&gt;Int32 ISomeInterface.IntProperty
System.String StringProperty&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;ACTUALIZADO&lt;/strong&gt;: A implementação anterior era demasiado complexa e baseada em &lt;em&gt;string&lt;/em&gt;s. Obrigado, Nuno.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.com/aggbug.aspx?PostID=38508" width="1" height="1"&gt;</description><category domain="http://pontonetpt.com/blogs/paulomorgado/archive/tags/.NET/default.aspx">.NET</category><category domain="http://pontonetpt.com/blogs/paulomorgado/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://pontonetpt.com/blogs/paulomorgado/archive/tags/LINQ/default.aspx">LINQ</category><category domain="http://pontonetpt.com/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://pontonetpt.com/blogs/paulomorgado/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://pontonetpt.com/blogs/paulomorgado/archive/tags/TipsAndTricks/default.aspx">TipsAndTricks</category><category domain="http://pontonetpt.com/blogs/paulomorgado/archive/tags/.NET4.0/default.aspx">.NET4.0</category><category domain="http://pontonetpt.com/blogs/paulomorgado/archive/tags/.NET3.5/default.aspx">.NET3.5</category></item></channel></rss>