<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://dotnetside.org/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/"><channel><title>Tips</title><link>http://dotnetside.org/blogs/tips/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2008 SP1 (Build: 30619.63)</generator><item><title>Copiare file nello storage di Windows Phone 7</title><link>http://dotnetside.org/blogs/tips/archive/2010/11/18/copiare-file-nello-storage-di-windows-phone-7.aspx</link><pubDate>Thu, 18 Nov 2010 16:24:04 GMT</pubDate><guid isPermaLink="false">2d5e8256-a19a-4586-a65e-031f7ebe8345:22695</guid><dc:creator>VitoA</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnetside.org/blogs/tips/rsscomments.aspx?PostID=22695</wfw:commentRss><comments>http://dotnetside.org/blogs/tips/archive/2010/11/18/copiare-file-nello-storage-di-windows-phone-7.aspx#comments</comments><description>&lt;p&gt;Autore : &lt;a href="blog.vitoarconzo.it" target="_blank"&gt;Vito Arconzo&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In molte occasioni, durante lo sviluppo di applicazioni per Windows Phone 7, abbiamo la necessita di copiare file che possono arrivare da sorgenti diverse sia web che locali nello storage del dispositivo. Le API di Windows Phone 7 ci mettono a disposizione (come per Silverlight) un spazio dedicato ed esclusivo all’app che lo utilizza senza, ovviamente, la possibilità di accedervi ad altre applicazioni.&lt;/p&gt;  &lt;p&gt;Non avendo un vero e proprio File System e non potendo quindi usare le solite funzionalità di copia del namespace System.IO.File etc… possiamo usare il codice seguente che fa uso di un stream che legge dalla sorgente e scrivo il risultato nello storage.&lt;/p&gt;  &lt;p&gt;&amp;#160;&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:812469c5-0cb0-4c63-8c15-c81123a09de7:c295f13b-b9d9-4bdf-a28b-d333e5862b00" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="c#"&gt;IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication();

using (IsolatedStorageFileStream fs = new IsolatedStorageFileStream("data.xml", FileMode.Create, FileAccess.Write, store))
{
	if (!store.FileExists("data.xml"))
	{
		StreamResourceInfo sri = Application.GetResourceStream(new Uri("data.xml", UriKind.Relative));
		byte[] bytesInStream = new byte[sri.Stream.Length];
		sri.Stream.Read(bytesInStream, 0, (int)bytesInStream.Length);

		fs.Write(bytesInStream, 0, bytesInStream.Length);
		fs.Flush();
	}
}&lt;/pre&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://dotnetside.org/aggbug.aspx?PostID=22695" width="1" height="1"&gt;</description><category domain="http://dotnetside.org/blogs/tips/archive/tags/Windows+Phone/default.aspx">Windows Phone</category></item><item><title>Upload e resize di Immagini in Asp.Net</title><link>http://dotnetside.org/blogs/tips/archive/2009/11/14/upload-e-resize-di-immagini-in-asp-net.aspx</link><pubDate>Sat, 14 Nov 2009 18:47:00 GMT</pubDate><guid isPermaLink="false">2d5e8256-a19a-4586-a65e-031f7ebe8345:22314</guid><dc:creator>DotNetSide Staff</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnetside.org/blogs/tips/rsscomments.aspx?PostID=22314</wfw:commentRss><comments>http://dotnetside.org/blogs/tips/archive/2009/11/14/upload-e-resize-di-immagini-in-asp-net.aspx#comments</comments><description>&lt;p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
text-align:justify"&gt;&lt;span style="font-size: 13px; "&gt;di Giulio Preite&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
text-align:justify"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
text-align:justify"&gt;&lt;span style="font-size: 13px; "&gt;Pi&amp;ugrave;
di una volta mi sono trovato di fronte al problema di fare l&amp;rsquo;upload di immagini
verso un sito internet e di ridimensionarle rendendole adatte alla pagina che
le andr&amp;agrave; a contenere.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
text-align:justify"&gt;&lt;span style="font-size:10.0pt;font-family:"&gt;Ci
sono differenti approcci al problema, da quello pi&amp;ugrave; semplice, che ridimensiona
le immagini quando vengono richiamate&amp;nbsp; dall&amp;rsquo;utente, per cos&amp;igrave; dire &amp;ldquo;on the
fly&amp;rdquo;, a soluzioni pi&amp;ugrave; complesse, che recuperano dimensioni e risoluzione, al
fine di attuare il resize pi&amp;ugrave; adatto.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
text-align:justify"&gt;&lt;span style="font-size:10.0pt;font-family:"&gt;La
mia si affianca ad esse, utilizzando lo streaming. Ecco quindi la classe:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="padding-left: 30px;"&gt;&lt;span style="font-size: 10.0pt; font-family: 'Courier New'; color: blue; mso-fareast-language: EN-US; mso-no-proof: yes;"&gt;public&lt;/span&gt;&lt;span style="font-size:10.0pt;font-family:"&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color:#2B91AF"&gt;ResizeManager&lt;br /&gt;&lt;span style="color: #000000; font-family: 'Courier New';"&gt;{&lt;br /&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; ResizeAndSave(&lt;span style="color:#2B91AF"&gt;Stream&lt;/span&gt;
imgStr, &lt;span style="color:blue"&gt;string&lt;/span&gt; FileName)&lt;br /&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="padding-left: 30px;"&gt;&lt;span lang="EN-US" style="font-size: 10.0pt; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-no-proof: yes;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green"&gt;//creo il
bitmap dallo stream&lt;br /&gt;&lt;span style="color: #000000;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;System.Drawing.&lt;span style="color:#2B91AF"&gt;Image&lt;/span&gt;
bmpStream = System.Drawing.&lt;span style="color:#2B91AF"&gt;Image&lt;/span&gt;.FromStream(imgStr);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="padding-left: 30px;"&gt;&lt;span lang="EN-US" style="font-size: 10.0pt; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-no-proof: yes;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;
font-family:"&gt;//creo un nuovo bitmap ridimensionandolo&lt;span style="font-family: 'Courier New'; color: #008000;"&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #000000;"&gt;&lt;span style="mso-spacerun:yes"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;double&lt;/span&gt; q = bmpStream.Width / 3;&lt;br /&gt;&lt;span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px;"&gt;&lt;span lang="EN-US" style="font-size: 10.0pt; font-family: 'Courier New'; color: blue; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-no-proof: yes;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10.0pt; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-no-proof: yes;"&gt; W;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="padding-left: 30px;"&gt;&lt;span lang="EN-US" style="font-size: 10.0pt; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-no-proof: yes;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;W = (&lt;span style="color:blue"&gt;int&lt;/span&gt;)q;&lt;br /&gt;&lt;span style="color:blue"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;double&lt;/span&gt;
g = bmpStream.Height / 3;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="padding-left: 30px;"&gt;&lt;span lang="EN-US" style="font-size: 10.0pt; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-no-proof: yes;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;int&lt;/span&gt;
H;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="padding-left: 30px;"&gt;&lt;span lang="EN-US" style="font-size: 10.0pt; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-no-proof: yes;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;H = (&lt;span style="color:blue"&gt;int&lt;/span&gt;)g;&lt;br /&gt;&lt;span style="color:#2B91AF"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Bitmap&lt;/span&gt;
img = &lt;span style="color:blue"&gt;new&lt;/span&gt; &lt;span style="color:#2B91AF"&gt;Bitmap&lt;/span&gt;(bmpStream,
&lt;span style="color:blue"&gt;new&lt;/span&gt; &lt;span style="color:#2B91AF"&gt;Size&lt;/span&gt;(W,
H));&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="padding-left: 30px;"&gt;&lt;span lang="EN-US" style="font-size: 10.0pt; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-no-proof: yes;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;
font-family:"&gt;//salvo l'immagine ridimensionata&lt;br /&gt;&lt;span style="font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;img.Save(FileName, System.Drawing.Imaging.&lt;span style="color:#2B91AF"&gt;ImageFormat&lt;/span&gt;.Jpeg);&lt;br /&gt;&lt;span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px;"&gt;&lt;span style="font-size: 10.0pt; font-family: 'Courier New'; mso-fareast-language: EN-US; mso-no-proof: yes;"&gt;&lt;span style="mso-spacerun:yes"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10.0pt; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-no-proof: yes;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="padding-left: 30px;"&gt;&lt;span lang="EN-US" style="font-size: 10.0pt; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-no-proof: yes;"&gt;&lt;o:p&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; Upload(&lt;span style="color:#2B91AF"&gt;FileUpload&lt;/span&gt;
File1)&lt;br /&gt;&lt;span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px;"&gt;&lt;span lang="EN-US" style="font-size: 10.0pt; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-no-proof: yes;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;
font-family:"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="padding-left: 30px;"&gt;&lt;span style="font-size: 10.0pt; font-family: 'Courier New'; mso-fareast-language: EN-US; mso-no-proof: yes;"&gt;&lt;span style="mso-spacerun:yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green;"&gt;//controllo che sia un jpg&lt;br /&gt;&lt;span style="color: #000000;"&gt;&lt;span style="mso-spacerun:yes"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;if&lt;/span&gt; (File1 != &lt;span style="color:blue"&gt;null&lt;/span&gt; ||
File1.PostedFile.ContentType == &lt;span style="color:#A31515"&gt;"image/jpeg"&lt;/span&gt;)&lt;br /&gt;&lt;span style="mso-spacerun:yes"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;{&lt;br /&gt;&lt;span style="mso-spacerun:yes"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt; myFoto = File1.FileName;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;&lt;span style="mso-spacerun:yes"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="padding-left: 30px;"&gt;&lt;span style="font-size: 10.0pt; font-family: 'Courier New'; mso-fareast-language: EN-US; mso-no-proof: yes;"&gt;&lt;span style="color: green;"&gt;&lt;span style="color: #000000;"&gt;&lt;span style="mso-spacerun:yes"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: green;"&gt;//salvo cos&amp;igrave; com'&amp;egrave;&lt;br /&gt;&lt;span style="color: #000000;"&gt;&lt;span style="mso-spacerun:yes"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;File1.SaveAs(&lt;span style="color:#A31515"&gt;@"C:........\Public\"&lt;/span&gt;
+ myFoto);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="padding-left: 30px;"&gt;&lt;span style="font-size: 10.0pt; font-family: 'Courier New'; mso-fareast-language: EN-US; mso-no-proof: yes;"&gt;&lt;span style="mso-spacerun:yes"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: green;"&gt;//Creo lo Stream e lo passo alla funzione insieme alle
dimensioni al percorso e al nome del file.&lt;br /&gt;&lt;span style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px;"&gt;&lt;span style="font-size: 10.0pt; font-family: 'Courier New'; mso-fareast-language: EN-US; mso-no-proof: yes;"&gt;&lt;span style="mso-spacerun:yes"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10.0pt; font-family: 'Courier New'; color: #2b91af; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-no-proof: yes;"&gt;MemoryStream&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10.0pt; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-no-proof: yes;"&gt; DataM = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2B91AF"&gt;MemoryStream&lt;/span&gt;(File1.FileBytes);&lt;br /&gt;&lt;span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px;"&gt;&lt;span lang="EN-US" style="font-size: 10.0pt; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-no-proof: yes;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10.0pt;
font-family:"&gt;ResizeAndSave(DataM,
&lt;span style="color:#A31515"&gt;@"C:&amp;hellip;..\Public\Thumbs\"&lt;/span&gt; + myFoto);&lt;br /&gt;&lt;span style="font-family: 'Courier New';"&gt;&lt;span style="mso-spacerun:yes"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;return&lt;/span&gt; myFoto;&lt;br /&gt;&lt;span style="mso-spacerun:yes"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="padding-left: 30px;"&gt;&lt;span style="font-size: 10.0pt; font-family: 'Courier New'; mso-fareast-language: EN-US; mso-no-proof: yes;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;span style="mso-spacerun:yes"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: green;"&gt;// se la verifica non va a buon fine viene restituito il
logo.&lt;br /&gt;&lt;span style="color: #000000;"&gt;&lt;span style="mso-spacerun:yes"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;else&lt;/span&gt; { &lt;span style="color:blue"&gt;return&lt;/span&gt; &lt;span style="color: #a31515;"&gt;"logo.jpg"&lt;/span&gt;; };&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;span style="mso-spacerun:yes"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;}&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;&lt;span style="font-size:10.0pt"&gt;La classe recupera
il file (caricato tramite l&amp;rsquo;user control FileUpload) crea la bitmap dallo
stream (il file non &amp;egrave; ancora caricato sul server) e lo ridimensiona.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align:justify"&gt;&lt;span style="font-size:10.0pt"&gt;Ho usato il
coefficente 3, ma pu&amp;ograve; anche essere diverso. Preferisco utilizzare dei
coefficienti, poich&amp;eacute; non sempre la dimensione verticale &amp;egrave; direttamente
proporzionale a quella orizzontale, e, inoltre, possiamo trovarci di fronte ad
una immagine che ha una altezza maggiore della larghezza. Una soluzione
alternativa consiste nel recuperare le dimensioni e regolarsi di conseguenza,
nel momento del resize.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align:justify"&gt;&lt;span style="font-size:10.0pt"&gt;Una volta
completato il resize, l&amp;rsquo;immagine, cosi modificata (in streaming) viene salvata (uplodata)
nella cartella &lt;i style="mso-bidi-font-style:normal"&gt;Thumbs&lt;/i&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align:justify"&gt;&lt;span style="font-size:10.0pt"&gt;Infine, l&amp;rsquo;immagine
originale (anche in questo caso la si pu&amp;ograve; ridimensionare) viene salvata nella
cartella Public.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align:justify"&gt;&lt;span style="font-size:10.0pt"&gt;Un altra cosa
molto importante &amp;egrave; questa: va passato il percorso fisico della cartella all&amp;rsquo;interno
del server, partendo ad esempio da C: o D:.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align:justify"&gt;&lt;span style="font-size:10.0pt"&gt;Un&amp;rsquo;ultima cosa, i
namespace:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="padding-left: 30px;"&gt;&lt;span lang="EN-US" style="font-size: 10.0pt; font-family: 'Courier New'; color: blue; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-no-proof: yes;"&gt;using&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10.0pt; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-no-proof: yes;"&gt; System;&lt;br /&gt;&lt;span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px;"&gt;&lt;span lang="EN-US" style="font-size: 10.0pt; font-family: 'Courier New'; color: blue; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-no-proof: yes;"&gt;using&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10.0pt; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-no-proof: yes;"&gt; System.Collections.Generic;&lt;br /&gt;&lt;span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px;"&gt;&lt;span lang="EN-US" style="font-size: 10.0pt; font-family: 'Courier New'; color: blue; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-no-proof: yes;"&gt;using&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10.0pt; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-no-proof: yes;"&gt; System.Web;&lt;br /&gt;&lt;span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px;"&gt;&lt;span lang="EN-US" style="font-size: 10.0pt; font-family: 'Courier New'; color: blue; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-no-proof: yes;"&gt;using&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10.0pt; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-no-proof: yes;"&gt; System.IO;&lt;br /&gt;&lt;span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px;"&gt;&lt;span lang="EN-US" style="font-size: 10.0pt; font-family: 'Courier New'; color: blue; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-no-proof: yes;"&gt;using&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10.0pt; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-no-proof: yes;"&gt; System.Net;&lt;br /&gt;&lt;span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px;"&gt;&lt;span lang="EN-US" style="font-size: 10.0pt; font-family: 'Courier New'; color: blue; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-no-proof: yes;"&gt;using&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10.0pt; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-no-proof: yes;"&gt; System.Drawing;&lt;br /&gt;&lt;span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px;"&gt;&lt;span lang="EN-US" style="font-size:10.0pt;font-family: 'Courier New'; color: blue; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-no-proof: yes;"&gt;using&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10.0pt; font-family: 'Courier New'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-no-proof: yes;"&gt; System.Web.UI.WebControls;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: 13px;"&gt;Al prossimo tips.&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://dotnetside.org/aggbug.aspx?PostID=22314" width="1" height="1"&gt;</description><category domain="http://dotnetside.org/blogs/tips/archive/tags/Asp.Net/default.aspx">Asp.Net</category></item><item><title>ListView riordinabile con WPF</title><link>http://dotnetside.org/blogs/tips/archive/2009/06/30/listview-riordinabile-con-wpf.aspx</link><pubDate>Tue, 30 Jun 2009 11:00:00 GMT</pubDate><guid isPermaLink="false">2d5e8256-a19a-4586-a65e-031f7ebe8345:22150</guid><dc:creator>DotNetSide Staff</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;b&gt;Autore: &lt;a href="http://blog.vitoarconzo.it"&gt;Vito Arconzo&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Una delle esigenze pi&amp;ugrave; frequenti durante lo sviluppo di applicazioni con Windows Presentation Foundation &amp;egrave; la rappresentazione di dati nel classico formato Grid. In Windows Presentation Foundation, almeno fino alla versione 3.5 del framework, non &amp;egrave; incluso un controllo nativo GridView e, per questi casi, solitamente, se non si vuole ricorrere a controlli di terze parti, viene utilizzato il controllo &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.listview.aspx"&gt;ListView&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Il controllo ListView di WPF, infatti, mette a disposizione un tipo di visualizzazione di tipo, appunto, GridView che permette la gestione di pi&amp;ugrave; colonne. Nell&amp;rsquo;esempio seguente viene definito un controllo ListView con modalit&amp;agrave; di visualizzazione GridView composta da 4 colonne in binding con alcune propriet&amp;agrave; dell&amp;rsquo;entit&amp;agrave; Person.&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:72296ca5-6e2b-44d2-b16f-b00c9a5a0295" style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px"&gt;
&lt;pre style="background-color:Silver;white-space:-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; word-wrap: break-word;overflow: auto;"&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ListView &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="listPersons"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; ItemsSource&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{StaticResource persons}&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;
          BorderThickness&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="0"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Margin&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="5"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;
          GridViewColumnHeader.Click&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="GridViewColumnHeader_Click"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ListView.View&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;GridView &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;AllowsColumnReorder&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="True"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;GridViewColumn &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;Header&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="ID"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; 
                            DisplayMemberBinding&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{Binding Path=ID}&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; 
                            Width&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="50"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;GridViewColumn &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;Header&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="FirstName"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; 
                            DisplayMemberBinding&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{Binding Path=FirstName}&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; 
                            Width&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="100"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;GridViewColumn &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;Header&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="LastName"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; 
                            DisplayMemberBinding&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{Binding Path=LastName}&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; 
                            Width&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="100"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;GridViewColumn &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;Header&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="City"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; 
                            DisplayMemberBinding&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{Binding Path=City}&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; 
                            Width&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="80"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;  &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;GridView&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;ListView.View&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;ListView&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;
&lt;p&gt;Nel listato, come noterete, viene definito l&amp;rsquo;handler dell&amp;rsquo;evento Click di GridViewColumnHeader dove verr&amp;agrave; gestito, appunto, il riordinamento della colonna cliccata.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dotnetside.org/blogs/tips/images/ListViewconcolonneriordinabiliinWPF_9E5E/image.png"&gt;&lt;img height="231" width="370" src="http://dotnetside.org/blogs/tips/images/ListViewconcolonneriordinabiliinWPF_9E5E/image_thumb.png" alt="image" border="0" title="image" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Per ottenere l&amp;rsquo;ordinamento della collection utilizzeremo un metodo chiamato &lt;strong&gt;&lt;em&gt;Sort&lt;/em&gt;&lt;/strong&gt; che, attraverso l&amp;rsquo;uso di una &lt;strong&gt;&lt;em&gt;CollectionViewSource&lt;/em&gt;&lt;/strong&gt; effettua l&amp;rsquo;ordinamento per il campo passato come parametro al metodo (&lt;em&gt;sortBy&lt;/em&gt;).&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:c7b449cb-62f2-47bb-afda-af1649c0a91e" style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px"&gt;
&lt;pre style="background-color:#C0C0C0;white-space:-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; word-wrap: break-word;overflow: auto;"&gt;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Sort(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; sortBy, ListSortDirection direction)
{
    ICollectionView dataView &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; CollectionViewSource.GetDefaultView(listPersons.ItemsSource);

    dataView.SortDescriptions.Clear();
    SortDescription sd &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; SortDescription(sortBy, direction);
    dataView.SortDescriptions.Add(sd);
    dataView.Refresh();
}&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;Passiamo ora alla gestione dell&amp;rsquo;evento di click sull&amp;rsquo;header di una colonna della ListView.&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:22e19b26-1cf4-438c-a7fe-ff39d3d60edd" style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px"&gt;
&lt;pre style="background-color:#C0C0C0;white-space:-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; word-wrap: break-word;overflow: auto;"&gt;&lt;span style="color: #000000;"&gt;GridViewColumnHeader _lastSelectedHeader &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;;
ListSortDirection _lastDirection &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; ListSortDirection.Ascending;

&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; GridViewColumnHeader_Click(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt; sender, RoutedEventArgs e)
{
    GridViewColumnHeader selectedHeader &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; e.OriginalSource &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt; GridViewColumnHeader;
    ListSortDirection direction;

    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (selectedHeader &lt;/span&gt;&lt;span style="color: #000000;"&gt;!=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;)
    {
        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (selectedHeader.Role &lt;/span&gt;&lt;span style="color: #000000;"&gt;!=&lt;/span&gt;&lt;span style="color: #000000;"&gt; GridViewColumnHeaderRole.Padding)
        {
            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (selectedHeader &lt;/span&gt;&lt;span style="color: #000000;"&gt;!=&lt;/span&gt;&lt;span style="color: #000000;"&gt; _lastSelectedHeader)
            {
                direction &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; ListSortDirection.Ascending;
            }
            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt;
            {
                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (_lastDirection &lt;/span&gt;&lt;span style="color: #000000;"&gt;==&lt;/span&gt;&lt;span style="color: #000000;"&gt; ListSortDirection.Ascending)
                {
                    direction &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; ListSortDirection.Descending;
                }
                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt;
                {
                    direction &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; ListSortDirection.Ascending;
                }
            }

            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; header &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Empty;
            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (selectedHeader.Column.CellTemplateSelector &lt;/span&gt;&lt;span style="color: #000000;"&gt;!=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;)
            {
                header &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; selectedHeader.Column.Header.ToString();
            }
            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (selectedHeader.Column.DisplayMemberBinding &lt;/span&gt;&lt;span style="color: #000000;"&gt;!=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;)
            {
                header &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; ((Binding)selectedHeader.Column.DisplayMemberBinding).Path.Path;
            }
            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt;
            {
                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt;;
            }

            Sort(header, direction);

            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (direction &lt;/span&gt;&lt;span style="color: #000000;"&gt;==&lt;/span&gt;&lt;span style="color: #000000;"&gt; ListSortDirection.Ascending)
            {
                selectedHeader.Column.HeaderTemplate &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;
                  FindResource(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;HeaderTemplateArrowUp&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt; DataTemplate;
            }
            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt;
            {
                selectedHeader.Column.HeaderTemplate &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;
                  FindResource(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;HeaderTemplateArrowDown&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt; DataTemplate;
            }

            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Remove arrow from previously sorted header&lt;/span&gt;&lt;span style="color: #008000;"&gt;
&lt;/span&gt;&lt;span style="color: #000000;"&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (_lastSelectedHeader &lt;/span&gt;&lt;span style="color: #000000;"&gt;!=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000;"&gt; _lastSelectedHeader &lt;/span&gt;&lt;span style="color: #000000;"&gt;!=&lt;/span&gt;&lt;span style="color: #000000;"&gt; selectedHeader)
            {
                _lastSelectedHeader.Column.HeaderTemplate &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;;
            }

            _lastSelectedHeader &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; selectedHeader;
            _lastDirection &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; direction;
        }
    }
}&lt;/span&gt;&lt;/pre&gt;
&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Come potete vedere, la logica presente nell&amp;rsquo;evento &amp;egrave; abbastanza semplice. Qui, infatti, viene, innanzitutto, intercettato l&amp;rsquo;intestazione cliccata, e, in base alla direzione di ordinamento (Ascending o Descending) viene applicato un template diverso per visualizzare una freccetta nell&amp;rsquo;intestazione per identificarnet, appunto, l&amp;rsquo;orientamento.&lt;/p&gt;
&lt;p&gt;Ovviemente, in questo evento, viene richiamata il metodo &lt;em&gt;Sort&lt;/em&gt; dichiarato in precedenza. Il codice XAML per la definizione dei template da utilizzare per la visualizzazione delle freccetta di indicazione nelle intestazioni &amp;egrave; il seguente.&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:1a0a6b8a-883c-41c4-b51e-8059b6cbee3d" style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px"&gt;
&lt;pre style="background-color:#C0C0C0;white-space:-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; word-wrap: break-word;overflow: auto;"&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;DataTemplate &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;x:Key&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="HeaderTemplateArrowUp"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;DockPanel&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;TextBlock &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Center"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Text&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{Binding}&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Path &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="arrow"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;
    StrokeThickness &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;= "1"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Fill&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Black"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;
    Data&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="M 5,10 L 15,10 L 10,5 L 5,10"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;DockPanel&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;

&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;DataTemplate &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;x:Key&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="HeaderTemplateArrowDown"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;DockPanel&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;TextBlock &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;HorizontalAlignment&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Center"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Text&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{Binding }&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Path &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="arrow"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;
    StrokeThickness&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="1"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Fill&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Black"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; 
    Data&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;= "M 5,5 L 10,10 L 15,5 L 5,5"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;DockPanel&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;
&lt;p&gt;Concludendo, quindi, ad un click su qualsiasi intestazione di colonna, viene effettuato l&amp;rsquo;ordinamento per la colonna in oggetto e sostituito il template dell&amp;rsquo;intestazione stessa affinch&amp;egrave; venga in essa visualizzata una freccetta per identificarne la direzione dell&amp;rsquo;ordinamento effettuato.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://dotnetside.org/blogs/tips/images/ListViewconcolonneriordinabiliinWPF_9E5E/image_3.png"&gt;&lt;img height="288" width="459" src="http://dotnetside.org/blogs/tips/images/ListViewconcolonneriordinabiliinWPF_9E5E/image_thumb_3.png" alt="image" border="0" title="image" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://dotnetside.org/aggbug.aspx?PostID=22150" width="1" height="1"&gt;</description><enclosure url="http://dotnetside.org" length="16665" type="application/octet-stream" /><category domain="http://dotnetside.org/blogs/tips/archive/tags/WPF/default.aspx">WPF</category></item><item><title>HttpHandler per un'immagine casuale</title><link>http://dotnetside.org/blogs/tips/archive/2007/06/13/HttpHandler-per-un_2700_immagine-casuale.aspx</link><pubDate>Wed, 13 Jun 2007 07:00:00 GMT</pubDate><guid isPermaLink="false">2d5e8256-a19a-4586-a65e-031f7ebe8345:5863</guid><dc:creator>DotNetSide Staff</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;&lt;b&gt;&lt;span style="font-family:Arial;font-size:small;"&gt;&lt;span&gt;&lt;span style="font-size:xx-small;"&gt;Autore: &lt;a href="http://dotnetside.org/user/Profile.aspx?UserID=2331"&gt;&lt;span style="color:#0000ff;"&gt;&lt;span style="text-decoration:underline;"&gt;Luca Barbi&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Gli HTTP Handler sono&amp;nbsp;dei meccanismi di ASP.NET che si occupano di elaborare le risposte a specifiche richieste HTTP e fornirle, secondo la forma pi&amp;ugrave; consona, al richiedente. &lt;/p&gt;
&lt;p&gt;Questo &lt;i&gt;Generic Handler&lt;/i&gt; restituisce un&amp;#39;immagine a caso tra quelle presenti in una directory di un sito web. &lt;/p&gt;
&lt;p&gt;Si tratta di un file con estensione .ashx che non ha bisogno di essere compilato, n&amp;eacute; di essere registrato nel file web.config. Baster&amp;agrave; solamente far riferimento ad esso come URL di un&amp;#39;immagine, indipendentemente da dove questo&amp;nbsp;sia utilizzato. &lt;/p&gt;
&lt;p&gt;Ad esempio, supponendo di chiamare il nostro file ImmagineCasuale.ashx e di metterlo nella &lt;i&gt;root&lt;/i&gt; del sito web www.miosito.it, potremmo utilizzarlo per visualizzare un&amp;#39;immagine casuale In diversi modi. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Attraverso un tag HTML in una pagina web&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;span style="color:#0000ff;"&gt;	&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;img&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;src&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;/ImmagineCasuale.ashx&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;alt&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;immagine casuale&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;&lt;span style="font-family:ta;"&gt;In un foglio di stile&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;span style="color:#800000;"&gt;	div&lt;/span&gt;.&lt;span style="color:#800000;"&gt;intestazione&lt;/span&gt; { &lt;br /&gt;		&lt;span style="color:#ff0000;"&gt;background-image&lt;/span&gt;: &lt;span style="color:#0000ff;"&gt;url (/ImmagineOraria.ashx)&lt;/span&gt;; &lt;br /&gt;	}&lt;br /&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;In un controllo server web ASP.NET&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;span style="color:#0000ff;"&gt;	&amp;lt;&lt;/span&gt;&lt;span style="color:#c71585;"&gt;asp&lt;/span&gt;:&lt;span style="color:#800000;"&gt;Image&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;ImmagineCasuale&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ImageUrl&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;~/ImmagineCasuale.ashx&amp;quot;&lt;/span&gt; &lt;br /&gt;&lt;span style="color:#ff0000;"&gt;	AlternateText&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;Immagine Casuale&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;E&amp;#39; possibile, inoltre, chiedere l&amp;#39;immagine casuale da un altro sito, sar&amp;agrave; sufficiente indicare l&amp;#39;URL completo: http://www.miosito.it/ImmagineCasuale.ashx &lt;/p&gt;
&lt;p&gt;Ecco il codice:&lt;/p&gt;
&lt;pre&gt;&amp;lt;%@ WebHandler Language=&amp;quot;&lt;span style="color:#8b0000;"&gt;VB&lt;/span&gt;&amp;quot; &lt;span style="color:#0000ff;"&gt;Class&lt;/span&gt;=&amp;quot;&lt;span style="color:#8b0000;"&gt;ImmagineCasuale&lt;/span&gt;&amp;quot; %&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;Imports&lt;/span&gt; System&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;Imports&lt;/span&gt; System.Web&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Class&lt;/span&gt; ImmagineCasuale : &lt;span style="color:#0000ff;"&gt;Implements&lt;/span&gt; IHttpHandler&lt;br /&gt;    &lt;br /&gt;&lt;span style="color:#008000;"&gt;    &amp;#39; qui indico la directory &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; cui ci sono le immagini&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;Const&lt;/span&gt; DIRIMMAGINI = &amp;quot;&lt;span style="color:#8b0000;"&gt;immagini/fotocasuali&lt;/span&gt;&amp;quot;&lt;br /&gt;    &lt;br /&gt;&lt;span style="color:#008000;"&gt;    &amp;#39; implementazione del metodo &lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt; ProcessRequest(&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; context &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; HttpContext) _&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;Implements&lt;/span&gt; IHttpHandler.ProcessRequest&lt;br /&gt;&lt;span style="color:#008000;"&gt;        &amp;#39; metto i nomi dei file .jpg &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; un array &lt;br /&gt;        &amp;#39; (potrei farlo anche per altre estensioni)&lt;br /&gt;&lt;/span&gt;        &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; nomiFileImmagine() &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt; = _ &lt;br /&gt;            System.IO.Directory.GetFiles(context.Server.MapPath(DIRIMMAGINI), &amp;quot;&lt;span style="color:#8b0000;"&gt;*.jpg&lt;/span&gt;&amp;quot;)&lt;br /&gt;        &lt;span style="color:#008000;"&gt;&amp;#39; se ci sono immagini ne estraggo una a caso e la invio come HttpResponse &lt;br /&gt;&lt;/span&gt;        &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt; nomiFileImmagine.Length &amp;gt; 0 &lt;span style="color:#0000ff;"&gt;Then&lt;/span&gt;&lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; n &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt;&lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; vMax &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt;&lt;br /&gt;            vMax = nomiFileImmagine.GetUpperBound(0)&lt;br /&gt;            Randomize()&lt;br /&gt;            n = &lt;span style="color:#0000ff;"&gt;CInt&lt;/span&gt;(Int((vMax + 1) * Rnd()))&lt;br /&gt;        &lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; response &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; Web.HttpResponse = context.Response&lt;br /&gt;            response.ContentType = &amp;quot;&lt;span style="color:#8b0000;"&gt;image/jpeg&lt;/span&gt;&amp;quot;&lt;br /&gt;            response.Cache.SetCacheability(HttpCacheability.&lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt;)&lt;br /&gt;            response.BufferOutput = &lt;span style="color:#0000ff;"&gt;False&lt;/span&gt;&lt;br /&gt;            response.WriteFile(nomiFileImmagine(n))&lt;br /&gt;            response.&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt;()&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#008000;"&gt;&amp;#39; poich&amp;eacute; si tratta di sola lettura imposto IsReusable a &lt;span style="color:#0000ff;"&gt;True&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;ReadOnly&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Property&lt;/span&gt; IsReusable() &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Boolean&lt;/span&gt; _&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;Implements&lt;/span&gt; IHttpHandler.IsReusable&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;Get&lt;/span&gt;&lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;Return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;True&lt;/span&gt;&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Get&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Property&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Class&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;Un esempio di possibile&amp;nbsp;utilizzo potrebbe essere un banner pubblicitario di una pagina web, in cui ad ogni richiesta lo sponsor varia casualmente. &lt;/p&gt;
&lt;p&gt;Possibili varianti: cambiare la directory o scegliere l&amp;#39;immagine a&amp;nbsp;seconda dei parametri passati attraverso una QueryString, oppure scegliere l&amp;#39;immagine a seconda dell&amp;#39;ora. &lt;/p&gt;
&lt;p&gt;In quest&amp;#39;ultimo caso il codice potrebbe essere: &lt;/p&gt;
&lt;pre&gt;&amp;lt;%@ WebHandler Language=&amp;quot;&lt;span style="color:#8b0000;"&gt;VB&lt;/span&gt;&amp;quot; &lt;span style="color:#0000ff;"&gt;Class&lt;/span&gt;=&amp;quot;&lt;span style="color:#8b0000;"&gt;ImmagineOraria&lt;/span&gt;&amp;quot; %&amp;gt; &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;Imports&lt;/span&gt; System&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;Imports&lt;/span&gt; System.Web&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Class&lt;/span&gt; ImmagineOraria : &lt;span style="color:#0000ff;"&gt;Implements&lt;/span&gt; IHttpHandler&lt;br /&gt;    &lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;Const&lt;/span&gt; DIRIMMAGINI = &amp;quot;&lt;span style="color:#8b0000;"&gt;immagini/orarie&lt;/span&gt;&amp;quot;&lt;br /&gt;    &lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt; ProcessRequest(&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; context &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; HttpContext) _&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;Implements&lt;/span&gt; IHttpHandler.ProcessRequest&lt;br /&gt;                &lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; nomiFileImmagine() &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt; = _&lt;br /&gt;            {&amp;quot;&lt;span style="color:#8b0000;"&gt;mattino&lt;/span&gt;&amp;quot;, &amp;quot;&lt;span style="color:#8b0000;"&gt;giorno&lt;/span&gt;&amp;quot;, &amp;quot;&lt;span style="color:#8b0000;"&gt;pomeriggio&lt;/span&gt;&amp;quot;, &amp;quot;&lt;span style="color:#8b0000;"&gt;sera&lt;/span&gt;&amp;quot;, &amp;quot;&lt;span style="color:#8b0000;"&gt;notte&lt;/span&gt;&amp;quot;}&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; n, ora &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt;&lt;br /&gt;        ora = DateTime.Now.Hour&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;Select&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Case&lt;/span&gt; ora&lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;Case&lt;/span&gt; 22 &lt;span style="color:#0000ff;"&gt;To&lt;/span&gt; 24, 0 &lt;span style="color:#0000ff;"&gt;To&lt;/span&gt; 6&lt;br /&gt;                n = 4&lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;Case&lt;/span&gt; 7 &lt;span style="color:#0000ff;"&gt;To&lt;/span&gt; 9&lt;br /&gt;                n = 0&lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;Case&lt;/span&gt; 17 &lt;span style="color:#0000ff;"&gt;To&lt;/span&gt; 19&lt;br /&gt;                n = 2&lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;Case&lt;/span&gt; 20 &lt;span style="color:#0000ff;"&gt;To&lt;/span&gt; 21&lt;br /&gt;                n = 3&lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;Case&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Else&lt;/span&gt;&lt;br /&gt;                n = 1&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Select&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; response &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; Web.HttpResponse = context.Response&lt;br /&gt;        response.ContentType = &amp;quot;&lt;span style="color:#8b0000;"&gt;image/jpeg&lt;/span&gt;&amp;quot;&lt;br /&gt;        response.Cache.SetCacheability(HttpCacheability.&lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt;)&lt;br /&gt;        response.BufferOutput = &lt;span style="color:#0000ff;"&gt;False&lt;/span&gt;&lt;br /&gt;        response.WriteFile(context.Server.MapPath(DIRIMMAGINI &amp;amp; _&lt;br /&gt;            nomiFileImmagine(n) &amp;amp; &amp;quot;&lt;span style="color:#8b0000;"&gt;.jpg&lt;/span&gt;&amp;quot;))&lt;br /&gt;        response.&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt;()&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;ReadOnly&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Property&lt;/span&gt; IsReusable() &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Boolean&lt;/span&gt; _&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;Implements&lt;/span&gt; IHttpHandler.IsReusable&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;Get&lt;/span&gt;&lt;br /&gt;            &lt;span style="color:#0000ff;"&gt;Return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;True&lt;/span&gt;&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Get&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Property&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Class&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;In allegato&amp;nbsp;una solution per VS 2005 con entrambi questi &lt;i&gt;handler&lt;/i&gt; e due pagine html per provarli.&lt;/p&gt;&lt;img src="http://dotnetside.org/aggbug.aspx?PostID=5863" width="1" height="1"&gt;</description><enclosure url="http://dotnetside.org" length="912050" type="application/x-zip-compressed" /><category domain="http://dotnetside.org/blogs/tips/archive/tags/Asp.Net/default.aspx">Asp.Net</category></item><item><title>DataObjectAttribute e ObjectDataSource</title><link>http://dotnetside.org/blogs/tips/archive/2007/02/26/DataObjectAttribute-e-ObjectDataSource.aspx</link><pubDate>Mon, 26 Feb 2007 06:00:00 GMT</pubDate><guid isPermaLink="false">2d5e8256-a19a-4586-a65e-031f7ebe8345:4744</guid><dc:creator>VitoA</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;&lt;b&gt;&lt;span style="font-size:small;font-family:Arial;"&gt;&lt;span&gt;&lt;span style="font-size:xx-small;"&gt;Autore: &lt;a href="http://dotnetside.org/user/Profile.aspx?UserID=2103"&gt;&lt;span style="color:#0000ff;"&gt;&lt;span style="text-decoration:underline;"&gt;Mario Ferrante&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;attributo DataObject rende pi&amp;ugrave; facile la ricerca delle classi che si vogliono legare ad un controllo DataBound durante la configurazione dell&amp;rsquo;ObjectDataSource.&lt;br /&gt;Quando si utilizza l&amp;rsquo;ObjectDataSource, la prima cosa che devo fare &amp;egrave; scegliere l&amp;rsquo;oggetto Business da utilizzare per recuperare o gestire i dati e per legarli ad un controllo DataBound: &lt;/p&gt;
&lt;p&gt;&lt;img src="http://dotnetside.org/photos/articoli_e_tips/images/4739/original.aspx" width="629" height="492" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;Purtroppo se chiedo al wizard dell&amp;rsquo;ObjectDataSource di mostrarmi solo i &amp;ldquo;Data Components&amp;rdquo; (come in figura), la maggior parte delle volte il risultato che ottengo &amp;egrave; un men&amp;ugrave; a discesa vuoto.&lt;br /&gt;Dunque non rimane che levare la spunta a &amp;ldquo;&lt;i&gt;Show only data components&lt;/i&gt;&amp;rdquo; e cercare l&amp;rsquo;oggetto Business che mi interessa tra tutti quelli a cui &amp;egrave; referenziata la mia applicazione, come si vede nella figura successiva. &lt;/p&gt;
&lt;p&gt;&amp;nbsp; &lt;img src="http://dotnetside.org/photos/articoli_e_tips/images/4741/original.aspx" width="617" height="495" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;Poco male nel caso di piccole applicazioni, ma nel caso di applicazioni molto grandi o che comunque referenziano molti assemblies il problema diventa un po&amp;rsquo; pi&amp;ugrave; serio.&lt;br /&gt;Ed &amp;egrave; qui che viene in aiuto l&amp;rsquo;attributo DataObjectAttribute o semplicemente DataObject. Questo attributo pu&amp;ograve; essere usato a livello di classe, ma anche a livello dei singoli metodi. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;L&amp;rsquo;Attributo DataObject a livello di classe&lt;/b&gt;&lt;br /&gt;Supponiamo che nella mia applicazione ho una classe che mi gestisce il CRUD (Create Retrieve Update e Delete) di News a cui aggiungo, &lt;b&gt;a livello di classe&lt;/b&gt;, l&amp;rsquo;attributo DataObject: &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id="F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:873d3a98-8fc6-4db2-aea6-4da33a0ab5dd" class="wlWriterSmartContent" style="display:inline;float:none;margin:0px;width:417px;padding:0px;"&gt;
&lt;pre&gt;&lt;div&gt;&lt;span style="color:#0000ff;"&gt;Imports&lt;/span&gt;&lt;span style="color:#000000;"&gt; System.ComponentModel

&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;Namespace&lt;/span&gt;&lt;span style="color:#000000;"&gt; Mario.DotNetSide

    &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;DataObject()&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; _
    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;Class&lt;/span&gt;&lt;span style="color:#000000;"&gt; NewsManager
        &lt;/span&gt;&lt;span style="color:#008000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#008000;"&gt;Implementazione della Classe&lt;/span&gt;&lt;span style="color:#008000;"&gt;
&lt;/span&gt;&lt;span style="color:#000000;"&gt;    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;End Class&lt;/span&gt;&lt;span style="color:#000000;"&gt;

&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;End Namespace&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Il risultato sar&amp;agrave;:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://dotnetside.org/photos/articoli_e_tips/images/4742/original.aspx" width="603" height="484" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Il costruttore dell&amp;rsquo;attributo DataObject accetta anche un parametro di tipo System.Boolean, se &lt;b&gt;False&lt;/b&gt; dichiaro esplicitamente all&amp;rsquo;Object Data Source di non considerare quella classe come Data Component.&lt;br /&gt;&lt;b&gt;L&amp;rsquo;Attributo DataObject a livello di metodo&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Abbiamo usato questo attributo a livello di Classe, ma lo posso utilizzare anche a livello di metodi per definire quali di essi devono essere utilizzati per selezionare i dati, quali per inserire un record, cancellarlo o modificarlo: &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id="F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:d398d973-c0b9-476c-894a-8d874ab0b686" class="wlWriterSmartContent" style="display:inline;float:none;margin:0px;padding:0px;"&gt;
&lt;pre&gt;&lt;div&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;DataObject()&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; _
    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;Class&lt;/span&gt;&lt;span style="color:#000000;"&gt; NewsManager

        &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;DataObjectMethod(DataObjectMethodType.Select, &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;True&lt;/span&gt;&lt;span style="color:#000000;"&gt;)&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; _
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;Function&lt;/span&gt;&lt;span style="color:#000000;"&gt; GetNews() &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;As&lt;/span&gt;&lt;span style="color:#000000;"&gt; NewsCollection

        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;End Function&lt;/span&gt;&lt;span style="color:#000000;"&gt;

        &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;DataObjectMethod(DataObjectMethodType.Insert, &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;True&lt;/span&gt;&lt;span style="color:#000000;"&gt;)&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; _
        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;Function&lt;/span&gt;&lt;span style="color:#000000;"&gt; AddNews(&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt;&lt;span style="color:#000000;"&gt; item &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;As&lt;/span&gt;&lt;span style="color:#000000;"&gt; News) &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;As&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt;&lt;span style="color:#000000;"&gt;

        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;End Function&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;End Class&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;I valori dell&amp;rsquo;enumerazione &lt;b&gt;DataObjectMethodType&lt;/b&gt; sono autoesplicativi: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Delete &lt;/li&gt;
&lt;li&gt;Fill &lt;/li&gt;
&lt;li&gt;Insert &lt;/li&gt;
&lt;li&gt;Select &lt;/li&gt;
&lt;li&gt;Update &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Il secondo parametro booleano passato all&amp;rsquo;attributo (True in questo caso) indica all Object Data Source se considerare (True) o meno (False) quel metodo per una determinata funzione (ad esempio di Select).&lt;br /&gt;In .Net gli attributi hanno una fondamentale importanza, essi contribuiscono a fornire tutte quelle informazioni che costituiscono i MetaData di un&amp;rsquo;assembly. Inoltre possono influenzare il comportamento di un oggetto sia a run-time sia (come in questo caso) a design-time.&lt;/p&gt;&lt;img src="http://dotnetside.org/aggbug.aspx?PostID=4744" width="1" height="1"&gt;</description><category domain="http://dotnetside.org/blogs/tips/archive/tags/Ado.Net/default.aspx">Ado.Net</category><category domain="http://dotnetside.org/blogs/tips/archive/tags/Asp.Net/default.aspx">Asp.Net</category><category domain="http://dotnetside.org/blogs/tips/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://dotnetside.org/blogs/tips/archive/tags/VB.net/default.aspx">VB.net</category></item><item><title>Membership APIs - L'enumerazione MembershipCreateStatus</title><link>http://dotnetside.org/blogs/tips/archive/2006/11/29/Membership-Enum-MembershipCreateStatus.aspx</link><pubDate>Wed, 29 Nov 2006 08:56:00 GMT</pubDate><guid isPermaLink="false">2d5e8256-a19a-4586-a65e-031f7ebe8345:3681</guid><dc:creator>VitoA</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnetside.org/blogs/tips/rsscomments.aspx?PostID=3681</wfw:commentRss><comments>http://dotnetside.org/blogs/tips/archive/2006/11/29/Membership-Enum-MembershipCreateStatus.aspx#comments</comments><description>&lt;p&gt;&lt;b&gt;&lt;span style="font-size:small;font-family:Arial;"&gt;&lt;span&gt;&lt;span style="font-size:xx-small;"&gt;Autore: &lt;a href="http://dotnetside.org/user/Profile.aspx?UserID=2103"&gt;&lt;span style="color:#0000ff;"&gt;&lt;span style="text-decoration:underline;"&gt;Mario Ferrante&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Quando si crea un nuovo utente utilizzando le Membership APIs (Membership e MembershipUser), pu&amp;ograve; capitare che si vogliano catturare le eventuali eccezioni che questo processo pu&amp;ograve; generare per fornire all&amp;rsquo;utente un messaggio pi&amp;ugrave; &lt;i&gt;user friendly&lt;/i&gt; e dare pi&amp;ugrave; dettagli circa l&amp;rsquo;errore (ad esempio:&amp;rdquo;username gi&amp;agrave; utilizzato da un altro utente&amp;rdquo;, &amp;ldquo;password invalida perch&amp;eacute; deve contenere almeno due caratteri non alfanumerici&amp;rdquo;, etc.).&lt;br /&gt;Per fare questo possiamo utilizzare l&amp;rsquo;enumerazione MembershipCreateStatus.&lt;/p&gt;
&lt;p&gt;Per poterla utilizzare devo prima creare una variabile di tipo MembershipCreateStatus, quindi passare &lt;b&gt;per riferimento&lt;/b&gt; tale variabile al metodo &lt;b&gt;CreateUser&lt;/b&gt; della classe Membership.&lt;/p&gt;
&lt;p&gt;In questo modo la variabile pu&amp;ograve; assumere diversi valori, da Success (utente creato con successo) a DuplicateUserName, InvalidPassword e cos&amp;igrave; via.&lt;/p&gt;
&lt;p&gt;Ecco un esempio di codice:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id="F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:c612eb82-c630-42ad-88fb-9d54a09532c4" class="wlWriterSmartContent" style="display:inline;float:none;margin:0px;padding:0px;"&gt;
&lt;pre&gt;&lt;div&gt;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt;&lt;span style="color:#000000;"&gt; status &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;As&lt;/span&gt;&lt;span style="color:#000000;"&gt; MembershipCreateStatus  &lt;/span&gt;&lt;span style="color:#008000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#008000;"&gt;la nostra variabile MembershipCreateStatus&lt;/span&gt;&lt;span style="color:#008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt;&lt;span style="color:#000000;"&gt; myuser &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;As&lt;/span&gt;&lt;span style="color:#000000;"&gt; MembershipUser &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; _&lt;br /&gt;Membership.CreateUser(username, _&lt;br /&gt;password, email, question, answer, isActive, status) &lt;/span&gt;&lt;span style="color:#008000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#008000;"&gt;la variabile status viene passata Per Riferimento&lt;/span&gt;&lt;span style="color:#008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;If&lt;/span&gt;&lt;span style="color:#000000;"&gt; status &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; MembershipCreateStatus.Success &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;Then&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color:#008000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#008000;"&gt;la registrazione del nuovo utente &amp;egrave; avvenuta con successo&lt;/span&gt;&lt;span style="color:#008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;Else&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;Select&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;Case&lt;/span&gt;&lt;span style="color:#000000;"&gt; status&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;Case&lt;/span&gt;&lt;span style="color:#000000;"&gt; MembershipCreateStatus.InvalidPassword&lt;br /&gt;        Response.Write(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;La Password utilizzata non &amp;egrave; nel formato corretto, assicurarsi che sia di almeno 6 caratteri e contenga un carattere non alfanumerico&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;)&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;Case&lt;/span&gt;&lt;span style="color:#000000;"&gt; MembershipCreateStatus.DuplicateUserName&lt;br /&gt;        Response.Write(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;L&amp;#39;Username usata esiste gi&amp;agrave;, cambiarla e continuare con la registrazione&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;)&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;Case&lt;/span&gt;&lt;span style="color:#000000;"&gt; MembershipCreateStatus.DuplicateEmail&lt;br /&gt;        Response.Write(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;L&amp;#39;Email usata esiste gi&amp;agrave;, cambiarla e continuare con la registrazione&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;)&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;Case&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#008000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#008000;"&gt;qui possiamo sfruttare altri valori dell&amp;rsquo;enumerazione&lt;/span&gt;&lt;span style="color:#008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;   &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;Select&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;If&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Per maggiori dettagli si pu&amp;ograve; dare uno sguardo al seguente link:&lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.security.membershipcreatestatus.aspx"&gt;http://msdn2.microsoft.com/en-us/library/system.web.security.membershipcreatestatus.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://dotnetside.org/aggbug.aspx?PostID=3681" width="1" height="1"&gt;</description><category domain="http://dotnetside.org/blogs/tips/archive/tags/Asp.Net/default.aspx">Asp.Net</category></item><item><title>XAML inline code</title><link>http://dotnetside.org/blogs/tips/archive/2006/11/27/XAML-inline-code.aspx</link><pubDate>Mon, 27 Nov 2006 16:23:00 GMT</pubDate><guid isPermaLink="false">2d5e8256-a19a-4586-a65e-031f7ebe8345:3634</guid><dc:creator>VitoA</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnetside.org/blogs/tips/rsscomments.aspx?PostID=3634</wfw:commentRss><comments>http://dotnetside.org/blogs/tips/archive/2006/11/27/XAML-inline-code.aspx#comments</comments><description>&lt;p&gt;&lt;b&gt;&lt;span style="font-family:Arial;font-size:small;"&gt;&lt;span&gt;&lt;span style="font-size:xx-small;"&gt;Autore: &lt;a href="http://dotnetside.org/user/Profile.aspx?UserID=2114"&gt;&lt;span style="color:#0000ff;"&gt;&lt;span style="text-decoration:underline;"&gt;Vito Arconzo&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Uno degli aspetti interessanti del nuovo linguaggio di markup XAML &amp;egrave; la possibilit&amp;agrave; di avere del codice inline. &lt;/p&gt;
&lt;p&gt;Ecco come:&lt;/p&gt;
&lt;div id="F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:f80a3391-987e-479a-8603-eb71b3b592c2" class="wlWriterSmartContent" style="display:inline;float:none;margin:0px;padding:0px;"&gt;
&lt;pre&gt;&lt;div&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Window &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;x:Class&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;WindowsApplication1.Window1&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;
xmlns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;
xmlns:x&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;
Loaded&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Window1_Loaded&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;x:Code&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;![CDATA[&lt;/span&gt;&lt;span style="color:#808080;"&gt;
void Window1_Loaded(object sender, RoutedEventArgs e)
{
this.Title=&amp;quot;Titolo....&amp;quot;;
TextBox txt = new TextBox();
txt.Text=&amp;quot;hello dotnetsiders!!!&amp;quot;;
this.Content=txt;
}
&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;]]&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;x:Code&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Window&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;img src="http://dotnetside.org/aggbug.aspx?PostID=3634" width="1" height="1"&gt;</description><category domain="http://dotnetside.org/blogs/tips/archive/tags/WPF/default.aspx">WPF</category></item><item><title>Convertire HTML in Testo</title><link>http://dotnetside.org/blogs/tips/archive/2006/10/31/Convertire-HTML-in-Testo.aspx</link><pubDate>Tue, 31 Oct 2006 09:53:00 GMT</pubDate><guid isPermaLink="false">2d5e8256-a19a-4586-a65e-031f7ebe8345:3097</guid><dc:creator>VitoA</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnetside.org/blogs/tips/rsscomments.aspx?PostID=3097</wfw:commentRss><comments>http://dotnetside.org/blogs/tips/archive/2006/10/31/Convertire-HTML-in-Testo.aspx#comments</comments><description>&lt;p&gt;&lt;b&gt;&lt;span style="font-family:Arial;font-size:small;"&gt;&lt;span&gt;&lt;span style="font-size:xx-small;"&gt;Autore: &lt;a href="http://dotnetside.org/user/Profile.aspx"&gt;&lt;span style="color:#0000ff;"&gt;&lt;span style="text-decoration:underline;"&gt;Stefano De Mattia&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Quella che segue &amp;egrave; una funzione che converte una stringa HTML in una di testo semplice. &lt;/p&gt;
&lt;p&gt;Sono necessari i seguenti Imports: &lt;/p&gt;
&lt;div id="F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:9a0f3b22-5d4b-498b-af41-69e21507218b" class="wlWriterSmartContent" style="display:inline;float:none;margin:0px;width:304px;padding:0px;"&gt;
&lt;pre&gt;&lt;div&gt;&lt;span style="color:#0000ff;"&gt;Imports&lt;/span&gt;&lt;span style="color:#000000;"&gt; System.Text&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;Imports&lt;/span&gt;&lt;span style="color:#000000;"&gt; System.Text.RegularExpressions&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Il codice della funzione:&lt;/p&gt;
&lt;div id="F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:1d8365b7-6f85-483c-831d-616bd32e6dbb" class="wlWriterSmartContent" style="display:inline;float:none;margin:0px;width:698px;padding:0px;"&gt;
&lt;pre&gt;&lt;div&gt;&lt;span style="color:#008000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#008000;"&gt;&amp;#39;&amp;#39; &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;&lt;br /&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#008000;"&gt;&amp;#39;&amp;#39; Funzione che converte una stringa HTML in una di testo semplice&lt;/span&gt;&lt;span style="color:#008000;"&gt;&lt;br /&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#008000;"&gt;&amp;#39;&amp;#39; &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;&lt;br /&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#008000;"&gt;&amp;#39;&amp;#39; &amp;lt;param name=&amp;quot;html&amp;quot;&amp;gt;Stringa da convertire&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;&lt;br /&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#008000;"&gt;&amp;#39;&amp;#39; &amp;lt;returns&amp;gt;Stinga semplice&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;&lt;br /&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#008000;"&gt;&amp;#39;&amp;#39; &amp;lt;remarks&amp;gt;&amp;lt;/remarks&amp;gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;Function&lt;/span&gt;&lt;span style="color:#000000;"&gt; Html2Text(&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt;&lt;span style="color:#000000;"&gt; html &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;As&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;&lt;span style="color:#000000;"&gt;) &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;As&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:#008000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#008000;"&gt; pattern per la rimozione dei tag HTML&lt;/span&gt;&lt;span style="color:#008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt;&lt;span style="color:#000000;"&gt; pattern &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;As&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;\&amp;lt;[^\&amp;gt;]*\&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt;&lt;span style="color:#000000;"&gt; re &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;As&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;New&lt;/span&gt;&lt;span style="color:#000000;"&gt; Regex(pattern, RegexOptions.IgnoreCase)&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:#008000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#008000;"&gt;qui posso modificare la formattazione sui&lt;/span&gt;&lt;span style="color:#008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;    &lt;/span&gt;&lt;span style="color:#008000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#008000;"&gt;tag che mi interessano, prima di eliminarli ad esempio&lt;/span&gt;&lt;span style="color:#008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;    &lt;/span&gt;&lt;span style="color:#008000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#008000;"&gt;html = html.Replace(&amp;quot;&amp;lt;p&amp;gt;&amp;quot;, vbCrLf)&lt;/span&gt;&lt;span style="color:#008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;    &lt;/span&gt;&lt;span style="color:#008000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#008000;"&gt;html = html.Replace(&amp;quot;&amp;lt;\p&amp;gt;&amp;quot;, vbCrLf &amp;amp; vbCrLf)&lt;/span&gt;&lt;span style="color:#008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;    &lt;/span&gt;&lt;span style="color:#008000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#008000;"&gt;html = html.Replace(&amp;quot;&amp;amp;nbsp;&amp;quot;, &amp;quot; &amp;quot;)&lt;/span&gt;&lt;span style="color:#008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;    html &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; html.Replace(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;lt;br /&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, vbCrLf)&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:#008000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#008000;"&gt;applico l&amp;#39;espressione regolare, &lt;/span&gt;&lt;span style="color:#008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;    &lt;/span&gt;&lt;span style="color:#008000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#008000;"&gt;sostituendo i caratteri speciali con la stringa vuota&lt;/span&gt;&lt;span style="color:#008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;    html &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; re.Replace(html, &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;&lt;span style="color:#000000;"&gt;.Empty)&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;Return&lt;/span&gt;&lt;span style="color:#000000;"&gt; html&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;End Function&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;img src="http://dotnetside.org/aggbug.aspx?PostID=3097" width="1" height="1"&gt;</description><category domain="http://dotnetside.org/blogs/tips/archive/tags/Asp.Net/default.aspx">Asp.Net</category><category domain="http://dotnetside.org/blogs/tips/archive/tags/VB.net/default.aspx">VB.net</category></item><item><title>Hyperlink in WPF</title><link>http://dotnetside.org/blogs/tips/archive/2006/10/17/Hyperlink-in-WPF.aspx</link><pubDate>Tue, 17 Oct 2006 19:00:00 GMT</pubDate><guid isPermaLink="false">2d5e8256-a19a-4586-a65e-031f7ebe8345:2866</guid><dc:creator>VitoA</dc:creator><slash:comments>14</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnetside.org/blogs/tips/rsscomments.aspx?PostID=2866</wfw:commentRss><comments>http://dotnetside.org/blogs/tips/archive/2006/10/17/Hyperlink-in-WPF.aspx#comments</comments><description>&lt;p&gt;&lt;b&gt;&lt;span style="font-family:Arial;font-size:small;"&gt;&lt;span&gt;&lt;span style="font-size:xx-small;"&gt;Autore: &lt;a href="http://dotnetside.org/user/Profile.aspx?UserID=2114"&gt;&lt;span style="color:#0000ff;"&gt;&lt;span style="text-decoration:underline;"&gt;Vito Arconzo&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Un quesito ricorrente nei forum su Windows Presentation Foundation &amp;egrave; come creare un hyperlink per aprire il browser su una pagina web indicata.&lt;/p&gt;
&lt;p&gt;La risposta &amp;egrave; differente a seconda se si tratti di un&amp;#39;applicazione standalone o browser.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Browser&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Nelle applicazioni di tipo browser la cosa &amp;egrave; molto semplice:&lt;/p&gt;
&lt;div id="F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:7524f644-55e0-4dc2-b061-096a2fe80934" class="wlWriterSmartContent" style="display:inline;float:none;margin:0px;padding:0px;"&gt;
&lt;pre&gt;&lt;div&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Hyperlink &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;NavigateUri&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://www.dotnetside.org&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; TargetName&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;_top&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
        Navigate the top-level window to DotNetSide
    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Hyperlink&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt; 
&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;b&gt;Standalone&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Sfortunatamente, nelle applicazioni standalone, la cosa non &amp;egrave; cos&amp;igrave; immediata e il modo pi&amp;ugrave; semplice &amp;egrave; quello di utilizzare l&amp;#39;evento RequestNavigate del controllo HyperLink e, quindi, gestire l&amp;#39;apertura del browser&amp;nbsp;nel code-behind:&lt;/p&gt;
&lt;div id="F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:a4b57d53-6104-494c-b4a1-8292075428e5" class="wlWriterSmartContent" style="display:inline;float:none;margin:0px;padding:0px;"&gt;
&lt;pre&gt;&lt;div&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
     &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Hyperlink &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;RequestNavigate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;HandleRequestNavigate&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;hl&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="color:#ff0000;"&gt;                     NavigateUri&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://www.dotnetside.org&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
        Open DotNetSide in the default browser
    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Hyperlink&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id="F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:a7e467f0-8f44-4263-a560-e3e0f5e42cca" class="wlWriterSmartContent" style="display:inline;float:none;margin:0px;padding:0px;"&gt;
&lt;pre&gt;&lt;div&gt;&lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="color:#000000;"&gt; HandleRequestNavigate(&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt;&lt;span style="color:#000000;"&gt; sender, RoutedEventArgs e) 
{ 
    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&lt;span style="color:#000000;"&gt; navigateUri &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; hl.NavigateUri.ToString(); 
    Process.Start(), e.g. check to see 
    Process.Start(&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="color:#000000;"&gt; ProcessStartInfo(navigateUri)); e.Handled &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;&lt;span style="color:#000000;"&gt;; 
}
&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;img src="http://dotnetside.org/aggbug.aspx?PostID=2866" width="1" height="1"&gt;</description><category domain="http://dotnetside.org/blogs/tips/archive/tags/WinFx+/default.aspx">WinFx </category><category domain="http://dotnetside.org/blogs/tips/archive/tags/WPF/default.aspx">WPF</category></item><item><title>Impedire avvio istanza MS SQL Server</title><link>http://dotnetside.org/blogs/tips/archive/2006/10/12/Impedire-avvio-istanza-SQL-Server.aspx</link><pubDate>Thu, 12 Oct 2006 06:00:00 GMT</pubDate><guid isPermaLink="false">2d5e8256-a19a-4586-a65e-031f7ebe8345:2791</guid><dc:creator>VitoA</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;&lt;b&gt;&lt;span style="font-family:Arial;font-size:small;"&gt;&lt;span&gt;&lt;span style="font-size:xx-small;"&gt;Autore: &lt;a href="http://dotnetside.org/members/Francesco+Quaratino.aspx"&gt;&lt;span style="color:#0000ff;"&gt;&lt;span style="text-decoration:underline;"&gt;Francesco Quaratino&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Ecco&amp;nbsp;alcune funzionalit&amp;agrave; poco note di MS-Sql Server, per la realizzazione di un&amp;#39;applicazione in grado di impedire a un&amp;#39;istanza di MS-Sql Server di avviarsi. &lt;/p&gt;
&lt;p&gt;Premetto che sar&amp;agrave; bene provare il codice che presento di seguito, SOLTANTO in ambienti molto poco critici e MAI (!!!) in ambienti di produzione. Non deve essere bello, infatti, vedere che Sql Server non rispondere ai nostri ripetuti &amp;quot;inviti&amp;quot; ad avviarsi. &lt;/p&gt;
&lt;p&gt;Apriamo una connessione al nostro server sql, con credenziali di amministratore (per intenderci l&amp;#39;utente SA va benissimo), entrando nel contesto del database master. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id="F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:3f45c0da-b602-4776-8380-40fcdc9e1916" class="wlWriterSmartContent" style="display:inline;float:none;margin:0px;width:120px;padding:0px;"&gt;
&lt;pre&gt;&lt;div&gt;&lt;span style="color:#008080;"&gt;--&lt;/span&gt;&lt;span style="color:#008080;"&gt;Transact SQL &lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;USE&lt;/span&gt;&lt;span style="color:#000000;"&gt; master &lt;br /&gt;
&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;GO&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Iniziamo col creare una stored procedure di sistema, cio&amp;egrave; che risieder&amp;agrave; nel database master. Questa procedura avr&amp;agrave; l&amp;#39;ingrato compito di arrestare il servizio SQL Server (mssqlserver &amp;egrave; il servizio di default, mssql$istanzanominata in caso di istanza con nome) richiamando la stored procedure estesa xp_cmdShell. &lt;/p&gt;
&lt;p&gt;Per crearla come stored procedure di sistema, basta denominarla con il prefisso sp_. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id="F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:f928fc9f-9137-42e3-ad56-f17617da41e3" class="wlWriterSmartContent" style="display:inline;float:none;margin:0px;padding:0px;"&gt;
&lt;pre&gt;&lt;div&gt;&lt;span style="color:#008080;"&gt;--&lt;/span&gt;&lt;span style="color:#008080;"&gt;Transact SQL &lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;CREATE&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;PROC&lt;/span&gt;&lt;span style="color:#000000;"&gt; sp_StopService &lt;br /&gt;
&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;AS&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;br /&gt;
&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;EXEC&lt;/span&gt;&lt;span style="color:#000000;"&gt; xp_cmdshell &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;net stop mssqlserver&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, NO_OUTPUT &lt;br /&gt;
&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;GO&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;A questo punto, la rendiamo una &amp;quot;autostart procedure&amp;quot;. In tal modo, la nostra procedura sar&amp;agrave; eseguita automaticamente subito dopo la partenza del servizio Sql, producendo lo spiacevole effetto di arrestare lo stesso servizio. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id="F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:d0cfc691-5f81-4c5b-9de0-600b9a76d1c1" class="wlWriterSmartContent" style="display:inline;float:none;margin:0px;padding:0px;"&gt;
&lt;pre&gt;&lt;div&gt;&lt;span style="color:#008080;"&gt;--&lt;/span&gt;&lt;span style="color:#008080;"&gt;Transact SQL &lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span style="color:#000000;"&gt;sp_procoption sp_StopService, &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;startup&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;true&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;&amp;#39;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;A questo punto, possiamo arrestare il servizio manualmente o, se preferite un po&amp;#39; pi&amp;ugrave; di suspense, riavviare il computer. Se non ci sono stati intoppi, il servizio Sql non si avvier&amp;agrave; mai pi&amp;ugrave; perch&amp;egrave; arrestato dalla nostra procedura auto-partente subito dopo l&amp;#39;avvio. &lt;/p&gt;
&lt;p&gt;Per disattivare la propriet&amp;agrave; auto-partente della sp_StopService, &amp;egrave; necessario avviare Sql Server in modalit&amp;agrave; applicazione mediante SQLSERVR.EXE usando il il trace flag 4022. Quindi, apriamo un prompt dei comandi e dopo esserci spostati nella directory che ospita SQLSERVR.EXE, digitiamo il comando dal prompt dei comandi &lt;/p&gt;
&lt;p&gt;(se istanza nominata, in questo esempio Sql2005 &amp;egrave; il nome dell&amp;#39;istanza) &lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:System;"&gt;&lt;b&gt;sqlservr -sSql2005 -T4022&lt;/b&gt;&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;(se istanza di default) &lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:System;"&gt;&lt;b&gt;sqlservr -T4022&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Quindi, per disattivare il comportamento auto-partente della nostra procedura, apriamo una connessione a Sql mediante credenziali amministrative entrando nel contesto del database master, e lanciamo: &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id="F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:e9570e3a-562a-4cb4-97a8-322e1ba56ae6" class="wlWriterSmartContent" style="display:inline;float:none;margin:0px;padding:0px;"&gt;
&lt;pre&gt;&lt;div&gt;&lt;span style="color:#008080;"&gt;--&lt;/span&gt;&lt;span style="color:#008080;"&gt;Transact SQL &lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span style="color:#000000;"&gt;sp_procoption sp_StopService, &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;startup&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;false&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;&amp;#39;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Solo adesso, saremo in grado di avviare il servizio Sql (ma prima bisogna terminare l&amp;#39;esecuzione di sqlservr chiudendo la finestra DOS o premendo CTRL+BREAK). Lo scherzo &amp;egrave; bello quando dura poco :)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://dotnetside.org/aggbug.aspx?PostID=2791" width="1" height="1"&gt;</description><category domain="http://dotnetside.org/blogs/tips/archive/tags/Sql/default.aspx">Sql</category></item><item><title>Controlli dinamici in ASP.NET 2</title><link>http://dotnetside.org/blogs/tips/archive/2006/09/18/Controlli-dinamici-in-ASP.NET-2.aspx</link><pubDate>Sun, 17 Sep 2006 23:02:00 GMT</pubDate><guid isPermaLink="false">2d5e8256-a19a-4586-a65e-031f7ebe8345:2473</guid><dc:creator>VitoA</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnetside.org/blogs/tips/rsscomments.aspx?PostID=2473</wfw:commentRss><comments>http://dotnetside.org/blogs/tips/archive/2006/09/18/Controlli-dinamici-in-ASP.NET-2.aspx#comments</comments><description>&lt;p&gt;&lt;b&gt;&lt;span style="font-size:small;font-family:Arial;"&gt;&lt;span&gt;&lt;span style="font-size:xx-small;"&gt;Autore: &lt;a href="http://dotnetside.org/user/Profile.aspx?UserID=2114"&gt;&lt;span style="color:blue;"&gt;&lt;span style="text-decoration:underline;"&gt;Vito Arconzo&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Sia con Windows Forms 2 che con ASP.NET 2 &amp;egrave; possibile creare controlli dinamicamente.  &lt;/p&gt;
&lt;p&gt;In Windows Forms il seguente codice da utilizzare &amp;egrave; :  &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id="F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:d1d922e8-a0df-44ff-826c-dcc39f452915" class="wlWriterSmartContent" style="margin:0px;padding:0px;display:inline;float:none;"&gt;
&lt;pre&gt;&lt;div&gt;&lt;span style="color:#0000ff;"&gt;Private&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt;&lt;span style="color:#000000;"&gt; Form1_Load(&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt;&lt;span style="color:#000000;"&gt; sender &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;As&lt;/span&gt;&lt;span style="color:#000000;"&gt; System.Object, &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt;&lt;span style="color:#000000;"&gt; e &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;As&lt;/span&gt;&lt;span style="color:#000000;"&gt; System.EventArgs) &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;Handles&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;MyBase&lt;/span&gt;&lt;span style="color:#000000;"&gt;.Load &lt;br /&gt;
    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt;&lt;span style="color:#000000;"&gt; btn &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;As&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;New&lt;/span&gt;&lt;span style="color:#000000;"&gt; Button &lt;br /&gt;
    btn.Text &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;Click&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;br /&gt;
    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;Me&lt;/span&gt;&lt;span style="color:#000000;"&gt;.Controls.Add(btn) &lt;br /&gt;
&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;End Sub&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Il risultato: 
&lt;/p&gt;
&lt;p&gt;&lt;img style="border-width:0px;" src="http://vitodotnet.aspdotnet.sk/images/blog/c13118dd1682_11C76/winforms4.jpg" width="240" border="0" height="183" alt="" /&gt; 
&lt;/p&gt;
&lt;p&gt;Se proviamo ad utilizzare lo stesso codice in una pagina ASP.NET, invece, il risultato sar&amp;agrave;: 
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vitodotnet.aspdotnet.sk/images/blog/c13118dd1682_11C76/webform2.jpg"&gt;&lt;img style="border-width:0px;" src="http://vitodotnet.aspdotnet.sk/images/blog/c13118dd1682_11C76/webform_thumb.jpg" width="640" border="0" height="435" alt="" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;Un bell&amp;#39;errore di compilazione!!!!!!!!!! 
&lt;/p&gt;
&lt;p&gt;Per risolvere il problema, attualmente, &amp;egrave; necessario includere il controllo all&amp;#39;interno di un contenitore come Panel o Tabella. 
&lt;/p&gt;
&lt;p&gt;Il codice corretto sar&amp;agrave;, quindi: 
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id="F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:9be9d466-48a4-4bee-9ee9-9310325b5440" class="wlWriterSmartContent" style="margin:0px;padding:0px;display:inline;float:none;"&gt;
&lt;pre&gt;&lt;div&gt;&lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt;&lt;span style="color:#000000;"&gt; btn &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;As&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;New&lt;/span&gt;&lt;span style="color:#000000;"&gt; Button &lt;br /&gt;
    btn.Text &lt;/span&gt;&lt;span style="color:#000000;"&gt;=&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;Click&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;br /&gt;
    &amp;lsquo; aggiunge il controllo al panel &lt;br /&gt;
    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;Me&lt;/span&gt;&lt;span style="color:#000000;"&gt;.Panel1.Controls.Add(btn) &lt;br /&gt;
&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;End Sub&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;In questo modo il controllo sar&amp;agrave; aggiunto correttamente alla pagina :-)&lt;/p&gt;&lt;img src="http://dotnetside.org/aggbug.aspx?PostID=2473" width="1" height="1"&gt;</description><category domain="http://dotnetside.org/blogs/tips/archive/tags/Asp.Net/default.aspx">Asp.Net</category></item><item><title>Caricare dinamicamente uno User Control</title><link>http://dotnetside.org/blogs/tips/archive/2006/07/14/caricare-dinamicamente-usercontrol.aspx</link><pubDate>Fri, 14 Jul 2006 07:42:00 GMT</pubDate><guid isPermaLink="false">2d5e8256-a19a-4586-a65e-031f7ebe8345:1697</guid><dc:creator>VitoA</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnetside.org/blogs/tips/rsscomments.aspx?PostID=1697</wfw:commentRss><comments>http://dotnetside.org/blogs/tips/archive/2006/07/14/caricare-dinamicamente-usercontrol.aspx#comments</comments><description>&lt;p&gt;&lt;b&gt;&lt;span style="font-family:Arial;font-size:small;"&gt;&lt;span&gt;&lt;span style="font-size:xx-small;"&gt;Autore: &lt;a href="http://dotnetside.org/user/Profile.aspx?UserID=2103"&gt;&lt;span style="color:blue;"&gt;&lt;span style="text-decoration:underline;"&gt;Mario Ferrante&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-family:Verdana;font-size:x-small;"&gt;Normalmente quando in una pagina aspx sono presenti User Controls, essi devono essere &amp;ldquo;registrati&amp;rdquo; nella direttiva @Register della pagina che lo contiene:&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class="coloredcode"&gt;&lt;span class="dir"&gt;&amp;lt;%@ Register Src=&amp;quot;[path dello User Control]&amp;quot; TagName=&amp;quot;myUC&amp;quot; TagPrefix=&amp;quot;uc1&amp;quot; %&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style="font-family:Verdana;font-size:x-small;"&gt;Quindi possono essere richiamati in qualsiasi parte del corpo della pagina attraverso una sintassi di questo tipo:&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class="coloredcode"&gt;&amp;lt;&lt;span class="tag"&gt;uc1:myUC&lt;/span&gt;&lt;span class="attr"&gt; ID=&lt;/span&gt;&lt;span class="attrv"&gt;&amp;quot;myUC1&amp;quot;&lt;/span&gt;&lt;span class="attr"&gt; runat=&lt;/span&gt;&lt;span class="attrv"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; /&amp;gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style="font-family:Verdana;font-size:x-small;"&gt;L&amp;rsquo;IDE di Visual Studio esegue tutto questo lavoro automaticamente, basta trascinare lo User Control appena costruito dalla finestra Solution Explorer all&amp;rsquo;interno della pagina per vedere comparire la direttiva Register e tutto il resto.&lt;br /&gt;&lt;br /&gt;Tuttavia possono capitare situazioni in cui abbiamo la necessit&amp;agrave; di caricare degli User Control dinamicamente in base ad alcuni eventi, tipo il cambio di valore della Querystring.&lt;br /&gt;Ad esempio, supponiamo di avere tre User Control per gestire l&amp;rsquo;aggiunta, la visualizzazione e la modifica di clienti in un&amp;rsquo;applicazione di Commercio Elettronico.&lt;br /&gt;Mettiamo caso che nella pagina customers.aspx, in base al valore della chiave action della querystring, dobbiamo caricare l&amp;rsquo;User Control appropriato.&lt;br /&gt;La pagina &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:x-small;"&gt;customers&lt;/span&gt;&lt;span style="font-family:Verdana;font-size:x-small;"&gt;.aspx conterr&amp;agrave; sempilecemente un controllo Panel:&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class="coloredcode"&gt;&lt;b id="1"&gt;1    &lt;/b&gt;&lt;span class="dir"&gt;&amp;lt;%@ Page Language=&amp;quot;C#&amp;quot; AutoEventWireup=&amp;quot;true&amp;quot; CodeFile=&amp;quot;customers.aspx.cs&amp;quot; Inherits=&amp;quot;customers&amp;quot; %&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;b id="2"&gt;2    &lt;/b&gt;&lt;br /&gt;&lt;b id="3"&gt;3    &lt;/b&gt;&amp;lt;&lt;span class="tag"&gt;!DOCTYPE&lt;/span&gt; html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;br /&gt;&lt;b id="4"&gt;4    &lt;/b&gt;&lt;br /&gt;&lt;b id="5"&gt;5    &lt;/b&gt;&amp;lt;&lt;span class="tag"&gt;html&lt;/span&gt;&lt;span class="attr"&gt; xmlns=&lt;/span&gt;&lt;span class="attrv"&gt;&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;/span&gt; &amp;gt;&lt;br /&gt;&lt;b id="6"&gt;6    &lt;/b&gt;&amp;lt;&lt;span class="tag"&gt;head&lt;/span&gt;&lt;span class="attr"&gt; runat=&lt;/span&gt;&lt;span class="attrv"&gt;&amp;quot;server&amp;quot;&lt;/span&gt;&amp;gt;&lt;br /&gt;&lt;b id="7"&gt;7    &lt;/b&gt;    &amp;lt;&lt;span class="tag"&gt;title&lt;/span&gt;&amp;gt;Untitled Page&amp;lt;/&lt;span class="tag"&gt;title&lt;/span&gt;&amp;gt;&lt;br /&gt;&lt;b id="8"&gt;8    &lt;/b&gt;&amp;lt;/&lt;span class="tag"&gt;head&lt;/span&gt;&amp;gt;&lt;br /&gt;&lt;b id="9"&gt;9    &lt;/b&gt;&amp;lt;&lt;span class="tag"&gt;body&lt;/span&gt;&amp;gt;&lt;br /&gt;&lt;b id="10"&gt;10   &lt;/b&gt;    &amp;lt;&lt;span class="tag"&gt;form&lt;/span&gt;&lt;span class="attr"&gt; id=&lt;/span&gt;&lt;span class="attrv"&gt;&amp;quot;form1&amp;quot;&lt;/span&gt;&lt;span class="attr"&gt; runat=&lt;/span&gt;&lt;span class="attrv"&gt;&amp;quot;server&amp;quot;&lt;/span&gt;&amp;gt;&lt;br /&gt;&lt;b id="11"&gt;11   &lt;/b&gt;    &amp;lt;&lt;span class="tag"&gt;div&lt;/span&gt;&amp;gt;&lt;br /&gt;&lt;b id="12"&gt;12   &lt;/b&gt;        &amp;lt;&lt;span class="tag"&gt;asp:Panel&lt;/span&gt;&lt;span class="attr"&gt; ID=&lt;/span&gt;&lt;span class="attrv"&gt;&amp;quot;Panel1&amp;quot;&lt;/span&gt;&lt;span class="attr"&gt; runat=&lt;/span&gt;&lt;span class="attrv"&gt;&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span class="attr"&gt; Width=&lt;/span&gt;&lt;span class="attrv"&gt;&amp;quot;80%&amp;quot;&lt;/span&gt;&amp;gt;&lt;br /&gt;&lt;b id="13"&gt;13   &lt;/b&gt;        &amp;lt;/&lt;span class="tag"&gt;asp:Panel&lt;/span&gt;&amp;gt;   &lt;br /&gt;&lt;b id="14"&gt;14   &lt;/b&gt;    &amp;lt;/&lt;span class="tag"&gt;div&lt;/span&gt;&amp;gt;&lt;br /&gt;&lt;b id="15"&gt;15   &lt;/b&gt;    &amp;lt;/&lt;span class="tag"&gt;form&lt;/span&gt;&amp;gt;&lt;br /&gt;&lt;b id="16"&gt;16   &lt;/b&gt;&amp;lt;/&lt;span class="tag"&gt;body&lt;/span&gt;&amp;gt;&lt;br /&gt;&lt;b id="17"&gt;17   &lt;/b&gt;&amp;lt;/&lt;span class="tag"&gt;html&lt;/span&gt;&amp;gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style="font-family:Verdana;font-size:x-small;"&gt;Nel Code Behind associato alla pagina, customers.aspx.cs avremo:&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class="coloredcode"&gt;&lt;b id="1"&gt;1    &lt;/b&gt;&lt;span class="kwd"&gt;protected void&lt;/span&gt; Page_Load(&lt;span class="kwd"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;br /&gt;&lt;b id="2"&gt;2    &lt;/b&gt;    {&lt;br /&gt;&lt;b id="3"&gt;3    &lt;/b&gt;        System.Web.UI.Control myUserControl;&lt;br /&gt;&lt;b id="4"&gt;4    &lt;/b&gt;        &lt;span class="kwd"&gt;string&lt;/span&gt; action = Request.QueryString[&lt;span class="st"&gt;&amp;quot;action&amp;quot;&lt;/span&gt;];&lt;br /&gt;&lt;b id="5"&gt;5    &lt;/b&gt;        &lt;span class="kwd"&gt;switch&lt;/span&gt; (action) { &lt;br /&gt;&lt;b id="6"&gt;6    &lt;/b&gt;            &lt;span class="kwd"&gt;case&lt;/span&gt; &lt;span class="st"&gt;&amp;quot;add&amp;quot;&lt;/span&gt;:&lt;br /&gt;&lt;b id="7"&gt;7    &lt;/b&gt;                myUserControl = LoadControl(&lt;span class="st"&gt;&amp;quot;../Controls/addCustomer.ascx&amp;quot;&lt;/span&gt;);&lt;br /&gt;&lt;b id="8"&gt;8    &lt;/b&gt;                &lt;span class="kwd"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;b id="9"&gt;9    &lt;/b&gt;            &lt;span class="kwd"&gt;case&lt;/span&gt; &lt;span class="st"&gt;&amp;quot;update&amp;quot;&lt;/span&gt;:&lt;br /&gt;&lt;b id="10"&gt;10   &lt;/b&gt;                myUserControl = LoadControl(&lt;span class="st"&gt;&amp;quot;../Controls/updateCustomer.ascx&amp;quot;&lt;/span&gt;);&lt;br /&gt;&lt;b id="11"&gt;11   &lt;/b&gt;                &lt;span class="kwd"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;b id="12"&gt;12   &lt;/b&gt;            &lt;span class="kwd"&gt;case&lt;/span&gt; &lt;span class="st"&gt;&amp;quot;view&amp;quot;&lt;/span&gt;:&lt;br /&gt;&lt;b id="13"&gt;13   &lt;/b&gt;                myUserControl = LoadControl(&lt;span class="st"&gt;&amp;quot;../Controls/viewCustomers.ascx&amp;quot;&lt;/span&gt;);&lt;br /&gt;&lt;b id="14"&gt;14   &lt;/b&gt;                &lt;span class="kwd"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;b id="15"&gt;15   &lt;/b&gt;            &lt;span class="kwd"&gt;default&lt;/span&gt;:&lt;br /&gt;&lt;b id="16"&gt;16   &lt;/b&gt;                myUserControl = LoadControl(&lt;span class="st"&gt;&amp;quot;../Controls/homeCustomers.ascx&amp;quot;&lt;/span&gt;);&lt;br /&gt;&lt;b id="17"&gt;17   &lt;/b&gt;                &lt;span class="kwd"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;b id="18"&gt;18   &lt;/b&gt;        }&lt;br /&gt;&lt;b id="19"&gt;19   &lt;/b&gt;        &lt;span class="kwd"&gt;this&lt;/span&gt;.Panel1.Controls.Add(myUserControl);&lt;br /&gt;&lt;b id="20"&gt;20   &lt;/b&gt;    }&lt;/pre&gt;
&lt;p&gt;&lt;span style="font-family:Verdana;font-size:x-small;"&gt;Nell&amp;rsquo;esempio, il caricamento dinamico dello UC viene inserito nell&amp;rsquo;evento Load della pagina in base al valore assunto da una querystring, ma &amp;egrave; possibile eseguire questa azione all&amp;rsquo;interno di altri eventi quali il Click di una Button e cos&amp;igrave; via.&lt;br /&gt;&lt;br /&gt;Da notare che nella pagina aspx non vi &amp;egrave; traccia alcuna della direttiva @Register.&lt;/span&gt;&lt;/p&gt;
&amp;nbsp;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://dotnetside.org/aggbug.aspx?PostID=1697" width="1" height="1"&gt;</description><category domain="http://dotnetside.org/blogs/tips/archive/tags/Asp.Net/default.aspx">Asp.Net</category></item><item><title>Logiche di business mediante trigger</title><link>http://dotnetside.org/blogs/tips/archive/2006/07/12/logiche-business-trigger.aspx</link><pubDate>Wed, 12 Jul 2006 06:57:00 GMT</pubDate><guid isPermaLink="false">2d5e8256-a19a-4586-a65e-031f7ebe8345:1681</guid><dc:creator>VitoA</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnetside.org/blogs/tips/rsscomments.aspx?PostID=1681</wfw:commentRss><comments>http://dotnetside.org/blogs/tips/archive/2006/07/12/logiche-business-trigger.aspx#comments</comments><description>&lt;p&gt;&lt;b&gt;&lt;span style="font-family:Arial;font-size:small;"&gt;&lt;span&gt;&lt;span style="font-size:xx-small;"&gt;Autore: &lt;a href="http://dotnetside.org/members/Francesco+Quaratino.aspx"&gt;&lt;span style="color:blue;"&gt;&lt;span style="text-decoration:underline;"&gt;Francesco Quaratino&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:blue;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-family:Verdana;font-size:x-small;"&gt;I trigger sono, talvolta, l&amp;#39;estremo rimedio a problemi altrimenti insormontabili. Anche se Microsoft tende a scoraggiarne l&amp;#39;uso, in alcuni casi &amp;egrave; bene prenderli in seria&amp;nbsp; considerazione, come, per esempio, l&amp;#39;implementazione di logiche aziendali complesse che l&amp;#39;integrit&amp;agrave; referenziale non &amp;egrave; in grado di supportare. &lt;br /&gt;&lt;br /&gt;Questo tips presenta un caso concreto in cui l&amp;#39;uso dei trigger favorisce le performance di un&amp;#39;applicazione. Mi riferisco a un&amp;#39;applicazione gestionale abbastanza comune, legata alla gestione acquisti di un prodotto: il calcolo dell&amp;#39;ultimo costo d&amp;#39;acquisto del prodotto. &lt;br /&gt;&lt;br /&gt;Conoscere il costo ultimo di un prodotto &amp;egrave; di fondamentale importanza per riordinarlo dal fornitore pi&amp;ugrave; conveniente, cos&amp;igrave; come per fissarne un prezzo di vendita.&lt;br /&gt;&lt;br /&gt;Spesso i progettisti software decidono di far calcolare il costo ultimo nel momento stesso in cui viene richiesto dall&amp;#39;utente, motivando tale scelta col fatto che si tratta di un &amp;ldquo;campo calcolabile&amp;rdquo;, il quale non necessit&amp;agrave; di essere ospitato permanentemente nel database (e di conseguenza trattato in fase di inserimento/modifica/cancellazione).&lt;br /&gt;&lt;br /&gt;Se, per&amp;ograve;, questa decisione non &amp;egrave; supportata da un&amp;#39;analisi preventiva del carico di lavoro a cui sar&amp;agrave; soggetta l&amp;#39;applicazione, la procedura che si occupa di calcolare il costo ultimo, rischia di diventare il collo di bottiglia di funzionalit&amp;agrave; vitali della nostra applicazione (come, per esempio, la fase di riordino dei prodotti la cui giacenza va sotto la soglia della scorta minima&amp;nbsp; prestabilita, che in alcune realt&amp;agrave; commerciali &amp;egrave; un&amp;#39;operazione svolta giornalmente e molto onerosa da un punto di vista delle risorse di sistema impegnate).&lt;br /&gt;&lt;br /&gt;Supponiamo quindi di trovarci di fronte al seguente database, che raccoglie gli ordini a fornitore di prodotti di natura non specificata:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://dotnetside.org/photos/articoli_e_tips/images/1669/610x226.aspx" border="0" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;Per l&amp;#39;esattezza, ecco i significati delle tabelle:&lt;br /&gt;&lt;br /&gt;●&amp;nbsp;&amp;nbsp;&amp;nbsp; [OrderHeader]: i dati generali degli ordini a fornitore&lt;br /&gt;●&amp;nbsp;&amp;nbsp;&amp;nbsp; [OrderDetail]: i dati dettagliati dei prodotti ordinati&lt;br /&gt;●&amp;nbsp;&amp;nbsp;&amp;nbsp; [Fornitore]: i dati dei fornitori che ci riforniscono i nostri depositi&lt;br /&gt;●&amp;nbsp;&amp;nbsp;&amp;nbsp; [Prodotto]: i dati dei prodotti ordinabili ai ns fornitori&lt;br /&gt;&lt;br /&gt;Con questi dati a disposizione, ricavare - mediante Transact-SQL - il prezzo ultimo del prodotto per un particolare fornitore, significa scrivere questo codice:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class="coloredcode"&gt;&lt;b id="1"&gt;1    &lt;/b&gt;&lt;span class="sqlkwd"&gt;DECLARE&lt;/span&gt; &lt;br /&gt;&lt;b id="2"&gt;2    &lt;/b&gt;	@codice_prodotto &lt;span class="sqlkwd"&gt;INT&lt;/span&gt;, &lt;br /&gt;&lt;b id="3"&gt;3    &lt;/b&gt;	@codice_fornitore &lt;span class="sqlkwd"&gt;INT&lt;br /&gt;&lt;b id="4"&gt;4    &lt;/b&gt;&lt;br /&gt;&lt;b id="5"&gt;5    &lt;/b&gt;SET&lt;/span&gt; @codice_fornitore = 1&lt;br /&gt;&lt;b id="6"&gt;6    &lt;/b&gt;&lt;span class="sqlkwd"&gt;SET&lt;/span&gt; @codice_prodotto = 3&lt;br /&gt;&lt;b id="7"&gt;7    &lt;/b&gt;&lt;br /&gt;&lt;b id="8"&gt;8    &lt;/b&gt;&lt;br /&gt;&lt;b id="9"&gt;9    &lt;/b&gt;&lt;span class="sqlkwd"&gt;SELECT TOP&lt;/span&gt; 1 &lt;br /&gt;&lt;b id="10"&gt;10   &lt;/b&gt;	prezzo_acquisto &lt;br /&gt;&lt;b id="11"&gt;11   &lt;/b&gt;&lt;span class="sqlkwd"&gt;FROM&lt;/span&gt; &lt;br /&gt;&lt;b id="12"&gt;12   &lt;/b&gt;	OrderHeader H&lt;br /&gt;&lt;b id="13"&gt;13   &lt;/b&gt;&lt;span class="sqlkwd"&gt;INNER&lt;/span&gt; &lt;span class="sqlkwd3"&gt;JOIN&lt;/span&gt;&lt;br /&gt;&lt;b id="14"&gt;14   &lt;/b&gt;	OrderDetail D&lt;br /&gt;&lt;b id="15"&gt;15   &lt;/b&gt;&lt;span class="sqlkwd"&gt;ON&lt;/span&gt; &lt;br /&gt;&lt;b id="16"&gt;16   &lt;/b&gt;	D.idHeader = H.id&lt;br /&gt;&lt;b id="17"&gt;17   &lt;/b&gt;&lt;span class="sqlkwd"&gt;WHERE&lt;/span&gt; &lt;br /&gt;&lt;b id="18"&gt;18   &lt;/b&gt;	codice_prodotto = @codice_prodotto&lt;br /&gt;&lt;b id="19"&gt;19   &lt;/b&gt;&lt;span class="sqlkwd3"&gt;AND&lt;/span&gt;&lt;br /&gt;&lt;b id="20"&gt;20   &lt;/b&gt;	codice_fornitore = @codice_fornitore&lt;br /&gt;&lt;b id="21"&gt;21   &lt;/b&gt;&lt;span class="sqlkwd"&gt;ORDER BY&lt;/span&gt; &lt;br /&gt;&lt;b id="22"&gt;22   &lt;/b&gt;	data_ordine &lt;br /&gt;&lt;b id="23"&gt;23   &lt;/b&gt;&lt;span class="sqlkwd"&gt;DESC&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style="font-family:Verdana;font-size:x-small;"&gt;&lt;br /&gt;Questa query risolve il problema restituendo il dato desiderato, ma in presenza di migliaia di ordini tale risultato potrebbe giungere in tempi troppo lunghi per la pazienza di utente. Proviamo a risolvere l&amp;#39;eventuale problema di performance &amp;ldquo;materializzando&amp;rdquo; il campo calcolabile del prezzo ultimo, attraverso la tabella [CostoUltimoProdottoFornitore]:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://dotnetside.org/photos/articoli_e_tips/images/1670/620x376.aspx" border="0" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;Quindi gestiamo la nuova tabella attraverso il seguente trigger creato sulla tabella [OrderDetail] che scatta in fase di inserimento e modifica:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class="coloredcode"&gt;&lt;b id="1"&gt;1    &lt;/b&gt;&lt;span class="sqlkwd"&gt;CREATE TRIGGER&lt;/span&gt; tr_insert_update_costo_ultimo&lt;br /&gt;&lt;b id="2"&gt;2    &lt;/b&gt;	&lt;span class="sqlkwd"&gt;ON&lt;/span&gt; dbo.OrderDetail&lt;br /&gt;&lt;b id="3"&gt;3    &lt;/b&gt;AFTER &lt;br /&gt;&lt;b id="4"&gt;4    &lt;/b&gt;	&lt;span class="sqlkwd"&gt;INSERT&lt;/span&gt;, &lt;span class="sqlkwd"&gt;UPDATE&lt;br /&gt;&lt;b id="5"&gt;5    &lt;/b&gt;AS&lt;br /&gt;&lt;b id="6"&gt;6    &lt;/b&gt;&lt;br /&gt;&lt;b id="7"&gt;7    &lt;/b&gt;	IF&lt;/span&gt; &lt;span class="sqlkwd2"&gt;@@ROWCOUNT&lt;/span&gt; = 0&lt;br /&gt;&lt;b id="8"&gt;8    &lt;/b&gt;		&lt;span class="sqlkwd"&gt;RETURN&lt;/span&gt; &lt;br /&gt;&lt;b id="9"&gt;9    &lt;/b&gt;&lt;br /&gt;&lt;b id="10"&gt;10   &lt;/b&gt;	&lt;span class="sqlcmt"&gt;/* 	verifico l&amp;#39;esistenza nella tabella [CostoUltimoProdottoFornitore] della riga &lt;br /&gt;&lt;b id="11"&gt;11   &lt;/b&gt;		relativa al prodotto inserito o aggiornato nell&amp;#39;ordine */&lt;/span&gt;&lt;br /&gt;&lt;b id="12"&gt;12   &lt;/b&gt;	&lt;span class="sqlkwd"&gt;IF&lt;/span&gt; &lt;span class="sqlkwd3"&gt;EXISTS&lt;/span&gt; &lt;br /&gt;&lt;b id="13"&gt;13   &lt;/b&gt;	(&lt;br /&gt;&lt;b id="14"&gt;14   &lt;/b&gt;		&lt;span class="sqlkwd"&gt;SELECT&lt;/span&gt; * &lt;br /&gt;&lt;b id="15"&gt;15   &lt;/b&gt;			&lt;span class="sqlkwd"&gt;FROM&lt;/span&gt; CostoUltimoProdottoFornitore C &lt;br /&gt;&lt;b id="16"&gt;16   &lt;/b&gt;		&lt;span class="sqlkwd"&gt;INNER&lt;/span&gt; &lt;span class="sqlkwd3"&gt;JOIN&lt;/span&gt; Inserted i &lt;br /&gt;&lt;b id="17"&gt;17   &lt;/b&gt;			&lt;span class="sqlkwd"&gt;ON&lt;/span&gt; C.codice_prodotto = i.codice_prodotto&lt;br /&gt;&lt;b id="18"&gt;18   &lt;/b&gt;		&lt;span class="sqlkwd"&gt;INNER&lt;/span&gt; &lt;span class="sqlkwd3"&gt;JOIN&lt;/span&gt; OrderHeader H &lt;br /&gt;&lt;b id="19"&gt;19   &lt;/b&gt;			&lt;span class="sqlkwd"&gt;ON&lt;/span&gt; H.id = i.idHeader &lt;br /&gt;&lt;b id="20"&gt;20   &lt;/b&gt;		&lt;span class="sqlkwd3"&gt;AND&lt;/span&gt; H.codice_fornitore = C.codice_fornitore&lt;br /&gt;&lt;b id="21"&gt;21   &lt;/b&gt;	)&lt;br /&gt;&lt;b id="22"&gt;22   &lt;/b&gt;		&lt;span class="sqlcmt"&gt;/* ne aggiorno il costo ultimo */&lt;/span&gt;&lt;br /&gt;&lt;b id="23"&gt;23   &lt;/b&gt;		&lt;span class="sqlkwd"&gt;UPDATE&lt;/span&gt; C&lt;br /&gt;&lt;b id="24"&gt;24   &lt;/b&gt;			&lt;span class="sqlkwd"&gt;SET&lt;/span&gt;  costo_ultimo = i.prezzo_acquisto&lt;br /&gt;&lt;b id="25"&gt;25   &lt;/b&gt;		&lt;span class="sqlkwd"&gt;FROM&lt;/span&gt; CostoUltimoProdottoFornitore C &lt;br /&gt;&lt;b id="26"&gt;26   &lt;/b&gt;			&lt;span class="sqlkwd"&gt;INNER&lt;/span&gt; &lt;span class="sqlkwd3"&gt;JOIN&lt;/span&gt;  Inserted i&lt;br /&gt;&lt;b id="27"&gt;27   &lt;/b&gt;		&lt;span class="sqlkwd"&gt;ON&lt;/span&gt; C.codice_prodotto = I.codice_prodotto&lt;br /&gt;&lt;b id="28"&gt;28   &lt;/b&gt;			&lt;span class="sqlkwd"&gt;INNER&lt;/span&gt; &lt;span class="sqlkwd3"&gt;JOIN&lt;/span&gt; OrderHeader H &lt;br /&gt;&lt;b id="29"&gt;29   &lt;/b&gt;		&lt;span class="sqlkwd"&gt;ON&lt;/span&gt; H.id = i.idHeader &lt;br /&gt;&lt;b id="30"&gt;30   &lt;/b&gt;			&lt;span class="sqlkwd3"&gt;AND&lt;/span&gt; H.codice_fornitore = C.codice_fornitore&lt;br /&gt;&lt;b id="31"&gt;31   &lt;/b&gt;	&lt;span class="sqlkwd"&gt;ELSE&lt;/span&gt;&lt;br /&gt;&lt;b id="32"&gt;32   &lt;/b&gt;		&lt;span class="sqlcmt"&gt;/* inserisco la riga corrispondete */&lt;/span&gt;&lt;br /&gt;&lt;b id="33"&gt;33   &lt;/b&gt;		&lt;span class="sqlkwd"&gt;INSERT INTO&lt;/span&gt; CostoUltimoProdottoFornitore &lt;br /&gt;&lt;b id="34"&gt;34   &lt;/b&gt;			( codice_prodotto, codice_fornitore, costo_ultimo)&lt;br /&gt;&lt;b id="35"&gt;35   &lt;/b&gt;		&lt;span class="sqlkwd"&gt;SELECT&lt;/span&gt; i.codice_prodotto, H.codice_fornitore, i.prezzo_acquisto&lt;br /&gt;&lt;b id="36"&gt;36   &lt;/b&gt;			&lt;span class="sqlkwd"&gt;FROM&lt;/span&gt; Inserted i &lt;br /&gt;&lt;b id="37"&gt;37   &lt;/b&gt;		&lt;span class="sqlkwd"&gt;INNER&lt;/span&gt; &lt;span class="sqlkwd3"&gt;JOIN&lt;/span&gt; OrderHeader H &lt;br /&gt;&lt;b id="38"&gt;38   &lt;/b&gt;			&lt;span class="sqlkwd"&gt;ON&lt;/span&gt; H.id = i.idHeader&lt;br /&gt;&lt;b id="39"&gt;39   &lt;/b&gt;&lt;br /&gt;&lt;b id="40"&gt;40   &lt;/b&gt;&lt;span class="sqlkwd"&gt;RETURN&lt;/span&gt;&lt;br /&gt;&lt;b id="41"&gt;41   &lt;/b&gt;GO&lt;/pre&gt;
&lt;p&gt;&lt;span style="font-family:Verdana;font-size:x-small;"&gt;&lt;br /&gt;In realt&amp;agrave;, la gestione della tabella&amp;nbsp; [CostoUltimoProdottoFornitore] non si esaurisce con questo trigger. In genere, infatti, occorrerebbe trattare l&amp;#39;eventuale cancellazione del prodotto dall&amp;#39;ordine, cos&amp;igrave; come la modifica del fornitore dell&amp;#39;ordine e tutte gli altri eventi che le applicazioni costruite sul database sono in grado di attivare. Potrebbe essere opportuno anche strutturare diversamente la tabella in modo da conservare un numero ragionevole di costi ultimi e non uno soltanto come nel nostro esempio, la cui complessit&amp;agrave; &amp;egrave; stata volutamente mantenuta ridotta.&lt;br /&gt;&lt;br /&gt;N.B.: scarica lo script allegato per generare il database e il trigger di esempio.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&amp;nbsp;
&lt;pre class="coloredcode"&gt;&lt;b id="24"&gt; &lt;/b&gt;&lt;br /&gt;&lt;/pre&gt;
&amp;nbsp;&amp;nbsp;
&lt;pre class="coloredcode"&gt;&lt;b id="1"&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;/pre&gt;
&amp;nbsp;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://dotnetside.org/aggbug.aspx?PostID=1681" width="1" height="1"&gt;</description><enclosure url="http://dotnetside.org" length="1140" type="application/x-unknown-application-x-zip-compressed" /><category domain="http://dotnetside.org/blogs/tips/archive/tags/Sql/default.aspx">Sql</category></item><item><title>Recuperare i dati da una cella del DataGridView</title><link>http://dotnetside.org/blogs/tips/archive/2006/06/30/Recuperare-dati--cella-DataGridView.aspx</link><pubDate>Fri, 30 Jun 2006 21:36:00 GMT</pubDate><guid isPermaLink="false">2d5e8256-a19a-4586-a65e-031f7ebe8345:1586</guid><dc:creator>VitoA</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnetside.org/blogs/tips/rsscomments.aspx?PostID=1586</wfw:commentRss><comments>http://dotnetside.org/blogs/tips/archive/2006/06/30/Recuperare-dati--cella-DataGridView.aspx#comments</comments><description>&lt;p&gt;&lt;span style="font-family:Verdana;font-size:x-small;"&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span style="font-family:Verdana;font-size:x-small;"&gt;&lt;span style="font-size:xx-small;"&gt;&lt;b&gt;&lt;span style="font-family:Arial;"&gt;Autore: &lt;/span&gt;&lt;/b&gt;&lt;a href="http://dotnetside.org/user/Profile.aspx?UserID=2102"&gt;&lt;span style="font-family:Arial;color:blue;"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;b&gt;Michele 
Locuratolo&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;a&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:blue;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-family:Verdana;font-size:x-small;"&gt;&lt;span style="font-family:Verdana;font-size:x-small;"&gt;Spesso si ha la necessit&amp;agrave; di recuperare i dati da una cella di una DataGrid. La regola vuole che tali elementi vengano recuperati dal DataSource e non dalla DataGridView in quanto, come spesso accade, nella gliglia potrebbero non essere mostrati tutti i dati.&lt;br /&gt;Per farlo, usiamo il seguente codice:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class="coloredcode"&gt;&lt;span style="font-family:Verdana;font-size:x-small;"&gt;&lt;b id="1"&gt;1    &lt;/b&gt;&lt;span class="kwd"&gt;private object&lt;/span&gt; GetCurrentBindedObject(DataGridView dgv) {&lt;br /&gt;&lt;b id="2"&gt;2    &lt;/b&gt;&lt;br /&gt;&lt;b id="3"&gt;3    &lt;/b&gt;    &lt;span class="kwd"&gt;if&lt;/span&gt; (dgv == &lt;span class="kwd"&gt;null&lt;/span&gt; || dgv.DataSource == &lt;span class="kwd"&gt;null&lt;/span&gt;) {&lt;br /&gt;&lt;b id="4"&gt;4    &lt;/b&gt;        &lt;span class="kwd"&gt;return null&lt;/span&gt;;&lt;br /&gt;&lt;b id="5"&gt;5    &lt;/b&gt;    }&lt;br /&gt;&lt;b id="6"&gt;6    &lt;/b&gt;&lt;br /&gt;&lt;b id="7"&gt;7    &lt;/b&gt;    BindingManagerBase bmb = dgv.BindingContext[dgv.DataSource];&lt;br /&gt;&lt;b id="8"&gt;8    &lt;/b&gt;&lt;br /&gt;&lt;b id="9"&gt;9    &lt;/b&gt;    &lt;span class="kwd"&gt;if&lt;/span&gt; (bmb == &lt;span class="kwd"&gt;null&lt;/span&gt;) {&lt;br /&gt;&lt;b id="10"&gt;10   &lt;/b&gt;        &lt;span class="kwd"&gt;return null&lt;/span&gt;;&lt;br /&gt;&lt;b id="11"&gt;11   &lt;/b&gt;    }&lt;br /&gt;&lt;b id="12"&gt;12   &lt;/b&gt;&lt;br /&gt;&lt;b id="13"&gt;13   &lt;/b&gt;    &lt;span class="kwd"&gt;return&lt;/span&gt; bmb.Current;&lt;br /&gt;&lt;b id="14"&gt;14   &lt;/b&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;Il tipo di ritorno &amp;egrave; un object che, in caso la sorgente dati sia una DataTable, dovr&amp;agrave; essere castato a DataRowView. &lt;br /&gt;A questo punto, per accedere al dato che ci interessa leggere, possiamo usare il seguente codice:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="coloredcode"&gt;&lt;span style="font-family:Verdana;font-size:x-small;"&gt;&lt;b id="1"&gt;1    &lt;/b&gt;DataRowView drv = (DataRowView)GetCurrentBindedObject(dgvUsers); &lt;br /&gt;&lt;b id="2"&gt;2    &lt;/b&gt;&lt;span class="kwd"&gt;string&lt;/span&gt; strNome = drv[&lt;span class="st"&gt;&amp;quot;Nome&amp;quot;&lt;/span&gt;].ToString(); &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;font-size:x-small;"&gt;Il .NET Framework 2.0 per&amp;ograve;, ci permette di creare in modo semplice delle collection di oggetti bindabili ad elementi della UI. &lt;br /&gt;Usando questa nuova caratteristica ed i comodi Generics, possiamo modificare il codice di GetCurrentBindedObject per farci ritornare direttamente il tipo che ci interessa.&lt;br /&gt;Supponiamo di avere un oggetto User che rappresenta l&amp;rsquo;utente e la collection Users, che deriva da BinsingList&amp;lt;T&amp;gt; che rappresenta l&amp;rsquo;elenco dei nostri utenti (vedi codice allegato). &lt;br /&gt;Il nostro codice pu&amp;ograve; essere modificato come segue:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="coloredcode"&gt;&lt;span style="font-family:Verdana;font-size:x-small;"&gt;&lt;b id="1"&gt;1    &lt;/b&gt;&lt;span class="kwd"&gt;private&lt;/span&gt; T GetCurrentBindedObject(DataGridView dgv) where T: &lt;span class="kwd"&gt;class&lt;/span&gt; {&lt;br /&gt;&lt;b id="2"&gt;2    &lt;/b&gt;&lt;br /&gt;&lt;b id="3"&gt;3    &lt;/b&gt;    &lt;span class="kwd"&gt;if&lt;/span&gt; (dgv == &lt;span class="kwd"&gt;null&lt;/span&gt; || dgv.DataSource == &lt;span class="kwd"&gt;null&lt;/span&gt;) {&lt;br /&gt;&lt;b id="4"&gt;4    &lt;/b&gt;        &lt;span class="kwd"&gt;return null&lt;/span&gt;;&lt;br /&gt;&lt;b id="5"&gt;5    &lt;/b&gt;    }&lt;br /&gt;&lt;b id="6"&gt;6    &lt;/b&gt;&lt;br /&gt;&lt;b id="7"&gt;7    &lt;/b&gt;    BindingManagerBase bmb = dgv.BindingContext[dgv.DataSource];&lt;br /&gt;&lt;b id="8"&gt;8    &lt;/b&gt;&lt;br /&gt;&lt;b id="9"&gt;9    &lt;/b&gt;    &lt;span class="kwd"&gt;if&lt;/span&gt; (bmb == &lt;span class="kwd"&gt;null&lt;/span&gt;) {&lt;br /&gt;&lt;b id="10"&gt;10   &lt;/b&gt;        &lt;span class="kwd"&gt;return null&lt;/span&gt;;&lt;br /&gt;&lt;b id="11"&gt;11   &lt;/b&gt;    }&lt;br /&gt;&lt;b id="12"&gt;12   &lt;/b&gt;&lt;br /&gt;&lt;b id="13"&gt;13   &lt;/b&gt;    &lt;span class="kwd"&gt;return&lt;/span&gt; bmb.Current &lt;span class="kwd"&gt;as&lt;/span&gt; T;&lt;br /&gt;&lt;b id="14"&gt;14   &lt;/b&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;font-size:x-small;"&gt;&lt;/span&gt;&lt;span style="font-family:Verdana;font-size:x-small;"&gt;da usare  con il seguente codice:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="coloredcode"&gt;&lt;span style="font-family:Verdana;font-size:x-small;"&gt;&lt;b id="1"&gt;1    &lt;/b&gt;User user = GetCurrentBindedObject(dgvUsers);&lt;br /&gt;&lt;b id="2"&gt;2    &lt;/b&gt;&lt;span class="kwd"&gt;string&lt;/span&gt; Nome = user.Name;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style="font-family:Verdana;font-size:x-small;"&gt;&lt;span style="font-family:Verdana;font-size:x-small;"&gt;&amp;nbsp;Lo stesso metodo, essendo generico, potr&amp;agrave; essere usato per tutti gli object del nostro domain model.&lt;br /&gt;Il codice completo &amp;egrave; disponibile nel file allegato.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://dotnetside.org/aggbug.aspx?PostID=1586" width="1" height="1"&gt;</description><enclosure url="http://dotnetside.org" length="17483" type="application/x-zip-compressed" /><category domain="http://dotnetside.org/blogs/tips/archive/tags/C_2300_/default.aspx">C#</category></item><item><title>Leggere il sorgente di una pagina html</title><link>http://dotnetside.org/blogs/tips/archive/2006/06/30/sorgente-html.aspx</link><pubDate>Fri, 30 Jun 2006 09:55:00 GMT</pubDate><guid isPermaLink="false">2d5e8256-a19a-4586-a65e-031f7ebe8345:1582</guid><dc:creator>VitoA</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnetside.org/blogs/tips/rsscomments.aspx?PostID=1582</wfw:commentRss><comments>http://dotnetside.org/blogs/tips/archive/2006/06/30/sorgente-html.aspx#comments</comments><description>&lt;p&gt;&lt;b&gt;&lt;span style="font-family:Arial;font-size:small;"&gt;&lt;span&gt;&lt;span style="font-size:xx-small;"&gt;Autore: &lt;a href="http://dotnetside.org/user/Profile.aspx?UserID=2114"&gt;&lt;span style="color:blue;"&gt;&lt;span style="text-decoration:underline;"&gt;Vito Arconzo&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Verdana;font-size:x-small;"&gt;
Ecco una funzione che restituisce il codice HTML di una pagina web.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;span style="font-family:mon;"&gt;&lt;span style="font-weight:bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class="coloredcode"&gt;&lt;b id="1"&gt;1    &lt;/b&gt;    &lt;span class="kwd"&gt;Function&lt;/span&gt; GetHtmlPageSource(&lt;span class="kwd"&gt;ByVal&lt;/span&gt; url &lt;span class="kwd"&gt;As String&lt;/span&gt;, _
&lt;b id="2"&gt;2    &lt;/b&gt;            &lt;span class="kwd"&gt;Optional ByVal&lt;/span&gt; username &lt;span class="kwd"&gt;As String&lt;/span&gt; = &lt;span class="kwd"&gt;Nothing&lt;/span&gt;, _
&lt;b id="3"&gt;3    &lt;/b&gt;            &lt;span class="kwd"&gt;Optional ByVal&lt;/span&gt; password &lt;span class="kwd"&gt;As String&lt;/span&gt; = &lt;span class="kwd"&gt;Nothing&lt;/span&gt;) &lt;span class="kwd"&gt;As String
&lt;b id="4"&gt;4    &lt;/b&gt;        Dim&lt;/span&gt; st &lt;span class="kwd"&gt;As&lt;/span&gt; System.IO.Stream
&lt;b id="5"&gt;5    &lt;/b&gt;        &lt;span class="kwd"&gt;Dim&lt;/span&gt; sr &lt;span class="kwd"&gt;As&lt;/span&gt; System.IO.StreamReader
&lt;b id="6"&gt;6    &lt;/b&gt;
&lt;b id="7"&gt;7    &lt;/b&gt;        &lt;span class="kwd"&gt;Try&lt;/span&gt;
&lt;b id="8"&gt;8    &lt;/b&gt;            &lt;span class="cmt"&gt;&amp;#39; invia una Web request&lt;/span&gt;
&lt;b id="9"&gt;9    &lt;/b&gt;            &lt;span class="kwd"&gt;Dim&lt;/span&gt; req &lt;span class="kwd"&gt;As&lt;/span&gt; System.Net.WebRequest = System.Net.WebRequest.Create(url)
&lt;b id="10"&gt;10   &lt;/b&gt;
&lt;b id="11"&gt;11   &lt;/b&gt;            &lt;span class="cmt"&gt;&amp;#39; se sono specificati username/password usa le credenziali&lt;/span&gt;
&lt;b id="12"&gt;12   &lt;/b&gt;            &lt;span class="kwd"&gt;If Not&lt;/span&gt; username &lt;span class="kwd"&gt;Is Nothing AndAlso Not&lt;/span&gt; password &lt;span class="kwd"&gt;Is Nothing Then&lt;/span&gt;
&lt;b id="13"&gt;13   &lt;/b&gt;                req.Credentials = &lt;span class="kwd"&gt;New&lt;/span&gt; System.Net.NetworkCredential(username, password)
&lt;b id="14"&gt;14   &lt;/b&gt;            &lt;span class="kwd"&gt;End If&lt;/span&gt;
&lt;b id="15"&gt;15   &lt;/b&gt;
&lt;b id="16"&gt;16   &lt;/b&gt;            &lt;span class="cmt"&gt;&amp;#39; ricava la risposta e legge lo stream coi risultati&lt;/span&gt;
&lt;b id="17"&gt;17   &lt;/b&gt;            &lt;span class="kwd"&gt;Dim&lt;/span&gt; resp &lt;span class="kwd"&gt;As&lt;/span&gt; System.Net.WebResponse = req.GetResponse
&lt;b id="18"&gt;18   &lt;/b&gt;            st = resp.GetResponseStream
&lt;b id="19"&gt;19   &lt;/b&gt;            sr = &lt;span class="kwd"&gt;New&lt;/span&gt; System.IO.StreamReader(st)
&lt;b id="20"&gt;20   &lt;/b&gt;
&lt;b id="21"&gt;21   &lt;/b&gt;            &lt;span class="kwd"&gt;Return&lt;/span&gt; sr.ReadToEnd
&lt;b id="22"&gt;22   &lt;/b&gt;        &lt;span class="kwd"&gt;Catch&lt;/span&gt; ex &lt;span class="kwd"&gt;As&lt;/span&gt; Exception
&lt;b id="23"&gt;23   &lt;/b&gt;            &lt;span class="kwd"&gt;Return&lt;/span&gt; &lt;span class="st"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;b id="24"&gt;24   &lt;/b&gt;        &lt;span class="kwd"&gt;Finally&lt;/span&gt;
&lt;b id="25"&gt;25   &lt;/b&gt;            sr.Close()
&lt;b id="26"&gt;26   &lt;/b&gt;            st.Close()
&lt;b id="27"&gt;27   &lt;/b&gt;        &lt;span class="kwd"&gt;End Try
&lt;b id="28"&gt;28   &lt;/b&gt;    End Function&lt;/span&gt;
&lt;/pre&gt;
&amp;nbsp;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://dotnetside.org/aggbug.aspx?PostID=1582" width="1" height="1"&gt;</description><category domain="http://dotnetside.org/blogs/tips/archive/tags/VB.net/default.aspx">VB.net</category></item></channel></rss>