<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">Mauro Minella' Blog</title><subtitle type="html" /><id>http://blogs.msdn.com/mauromi/atom.xml</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/mauromi/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/mauromi/atom.xml" /><generator uri="http://communityserver.org" version="2.1.61025.2">Community Server</generator><updated>2007-10-31T12:18:26Z</updated><entry><title>Come impostare VS2008 per scegliere l’istanza predefinita di SQL Server fra le disponibili</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/mauromi/archive/2009/11/01/come-impostare-vs2008-per-scegliere-l-istanza-predefinita-di-sql-server-fra-le-disponibili.aspx" /><id>http://blogs.msdn.com/mauromi/archive/2009/11/01/come-impostare-vs2008-per-scegliere-l-istanza-predefinita-di-sql-server-fra-le-disponibili.aspx</id><published>2009-11-01T22:42:25Z</published><updated>2009-11-01T22:42:25Z</updated><content type="html">&lt;p&gt;Recentemente ho installato la beta2 di Visual Studio 2010 su una macchina dove era già installato Visual Studio 2008.&lt;/p&gt;  &lt;p&gt;I due ambienti di sviluppo possono coesistere senza problemi, tuttavia bisogna tenere presente che SQL Server Express 2005 -installato automaticamente da VS2008- viene sostituito dal setup di VS2010 con SQL Server Express 2008.&lt;/p&gt;  &lt;p&gt;A prima vista questo potrebbe essere considerato un non-problema, considerato che anche un progetto creato con la versione 2008 di Visual Studio può aprire un DB di SQL Server 2008. Tuttavia, l’IDE di VS2008 –e in particolare la sua finestra “Esplora Server”– non sono in grado di aprire database di SQL Server 2008, riportando uno dei due errori di seguito elencati:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeimpostareVS2008persceglierelistanzap_14D2C/image_3.png" width="459" height="169" /&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeimpostareVS2008persceglierelistanzap_14D2C/image_9.png" width="457" height="336" /&gt; &lt;/p&gt;  &lt;p&gt;Per essere precisi, il primo messaggio di errore compare aprendo un comune database di formato SQL Server 2008, mentre il secondo viene mostrato quando si tenta di aprire il database creato automaticamente dal programma WSA (Web Site Administration tool) di ASP.NET, che serve ad impostare i criteri di protezione, gli account utente ed altre impostazioni del sito ASP.NET che state creando.&lt;/p&gt;  &lt;p&gt;Per ovviare al problema e per poter continuare a tenere le mie presentazioni in pubblico su ASP.NET con la versione 2005 di Visual Studio 2005 (incluse le funzionalità integrate di accesso ai dati), ho installato nuovamente SQL Server 2005 chiamandolo SQLSERVER2005 per distinguerlo dalla versione 2008 già installata (per default con il nome di SQLEXPRESS), ritrovandomi così due servizi distinti:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeimpostareVS2008persceglierelistanzap_14D2C/image_22.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeimpostareVS2008persceglierelistanzap_14D2C/image_thumb_8.png" width="511" height="36" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Ora, da una parte il problema è risolto ricordandosi di specificare il corretto motore di SQL Server quando si crea un database SQL Server dall’interno della finestra “Esplora Server” di Visual Studio 2005:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeimpostareVS2008persceglierelistanzap_14D2C/image_21.png" width="426" height="444" /&gt; &lt;/p&gt;  &lt;p&gt;Dall’altra parte però il problema persiste quando creo un database dal menu contestuale “Aggiungi nuovo elemento” sul progetto (perché non fa comparire la finestra di cui sopra, e usa la connessione a SQLEXPRESS di default). &lt;/p&gt;  &lt;p&gt;Ma soprattutto il problema si presenta quando lancio il WSA che menzionavo prima, il quale pure usa la stringa di connessione “LocalSqlServer” definita per default a livello di macchina.&lt;/p&gt;  &lt;p&gt;Il primo di questi due problemi si risolve modificando le seguenti due voci all’interno del menu “Strumenti – Opzioni – Strumenti di database” di Visual Studio 2005, facendo così puntare l’istanza corretta del database:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Connessioni dati&lt;/li&gt;    &lt;li&gt;Database di convalida&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;L’altro problema, relativo al WSA, si può risolvere in due modi:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Sovrascrivere, in ogni applicativo WSA dove si vogliano mantenere le connessioni sull’istanza SQL Server 2005, la stringa di connessione “LocalSqlServer” con una che punti a server corretto, all’interno del file WEB.CONFIG; nel mio caso l’ho modificata come segue:     &lt;br /&gt;&amp;lt;connectionStrings&amp;gt;      &lt;br /&gt;&amp;#160; &amp;lt;remove name=&amp;quot;LocalSqlServer&amp;quot;/&amp;gt;      &lt;br /&gt;&amp;#160; &amp;lt;add      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; name=&amp;quot;LocalSqlServer&amp;quot;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; connectionString=&amp;quot;data source=.\SQLEXPRESSEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true&amp;quot;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; providerName=&amp;quot;System.Data.SqlClient&amp;quot;/&amp;gt;      &lt;br /&gt;&amp;lt;/connectionStrings&amp;gt;      &lt;br /&gt;      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;L’altro metodo è più radicale &lt;u&gt;e bisogna tenere in considerazione che tale impostazione influenza anche Visual Studio 2010&lt;/u&gt;; esso consiste nel modificare la stringa di connessione “LocalSqlServer” accessibile dal pannello di amministrazione di IIS, facendola puntare nel mio caso all’istanza di SQLSERVER2005:      &lt;br /&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeimpostareVS2008persceglierelistanzap_14D2C/image_23.png" width="469" height="383" /&gt;       &lt;br /&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeimpostareVS2008persceglierelistanzap_14D2C/image_24.png" width="471" height="383" /&gt; &lt;/li&gt; &lt;/ol&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9915960" width="1" height="1"&gt;</content><author><name>europe\mauromi</name><uri>http://blogs.msdn.com/members/europe%5cmauromi.aspx</uri></author></entry><entry><title>Sessione Remix Creare un Sito WEB con ASP.NET: Slide e Demo</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/mauromi/archive/2009/06/18/sessione-remix-creare-un-sito-web-con-asp-net-slide-e-demo.aspx" /><id>http://blogs.msdn.com/mauromi/archive/2009/06/18/sessione-remix-creare-un-sito-web-con-asp-net-slide-e-demo.aspx</id><published>2009-06-18T21:09:59Z</published><updated>2009-06-18T21:09:59Z</updated><content type="html">&lt;p&gt;Come promesso al termine della sessione che ho tenuto ieri al Remix, vi metto a disposizione slide e demo utilizzate durante la mia presentazione: le trovate dunque &lt;a href="http://maurominella.members.winisp.net/Remix/2009-06-17 RemixGS01-CreareUnSitoWebConASPNET.zip" target="_blank"&gt;a questo indirizzo&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Chi è interessato trova &lt;a href="http://blogs.msdn.com/mauromi/archive/2007/09/10/esercitazioni-di-laboratorio-su-asp-net-2-0-tratte-dal-materiale-per-seminari-universitari.aspx" target="_blank"&gt;a questo link&lt;/a&gt;, qui sul mio blog, le esercitazioni complete di database e script che guidano passo passo alla realizzazione di un sito WEB di commercio elettronico in ASP.NET.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Buon lavoro&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9776920" width="1" height="1"&gt;</content><author><name>europe\mauromi</name><uri>http://blogs.msdn.com/members/europe%5cmauromi.aspx</uri></author></entry><entry><title>WPF: Indipendenza dalla Risoluzione Video</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/mauromi/archive/2008/06/20/wpf-indipendenza-dalla-risoluzione-video.aspx" /><id>http://blogs.msdn.com/mauromi/archive/2008/06/20/wpf-indipendenza-dalla-risoluzione-video.aspx</id><published>2008-06-20T13:51:22Z</published><updated>2008-06-20T13:51:22Z</updated><content type="html">&lt;p&gt;Una delle caratteristiche chiave di WPF, che lo differenzia da architetture alternative come le Windows Form e ASP.NET, consiste nel suo sistema di misura &lt;u&gt;indipendente dalla risoluzione&lt;/u&gt;. In altre parole, WPF non utilizza pi&amp;#249; il PIXEL come unit&amp;#224; di misura per indicare la dimensione di un bottone, di un rettangolo o di un video; infatti, il pixel non ha una dimensione standard: ce ne stanno per esempio 96 in un pollice (2,54 cm) per un monitor LCD da 19&amp;#8217;&amp;#8217;, ma ben 130 in uno schermo di un notebook recente; per rendersi conto di questo serve solo un righello: misurate la larghezza del vostro monitor (33,87 cm nel primo caso, 32,82 nel secondo) e la dividete per la risoluzione orizzontale (1280 nel primo, 1680 nel secondo), otterrete cos&amp;#236; la larghezza di un pixel in centimetri, che poi potete trasformare in DPI (pixel per pollice) con una semplice equivalenza. &lt;/p&gt;  &lt;p&gt;L&amp;#8217;immediata conseguenza di indicare le misure in pixel, e questo lo sanno anche i sassi, &amp;#232; che l'interfaccia risulta pi&amp;#249; grande al diminuire della densit&amp;#224;: se cambiate la risoluzione del vostro schermo da 1280x1024 a 800x600 e mantenete uguale l&amp;#8217;area visibile vi troverete gli oggetti pi&amp;#249; grandi del 60% perch&amp;#233; di fatto questa &amp;#232; la crescita che ciascun pixel ha avuto; apro e chiudo una parentesi, anche questo tutti lo sanno ma &lt;i&gt;repetita iuvant&lt;/i&gt;: i monitor LCD hanno una risoluzione nativa e cambiarla equivale a fare s&amp;#236; che il software del monitor (NON della scheda grafica) riscali la nuova risoluzione su quella nativa, con un peggioramento evidente della qualit&amp;#224;; come vedremo pi&amp;#249; avanti, la strada da seguire per ingrandire l&amp;#8217;immagine &amp;#232; agire sui DPI, NON sulla risoluzione.&lt;/p&gt;  &lt;p&gt;Ma allora, che unit&amp;#224; di misura utilizza WPF? Il millimetro, il centimetro, il pollice, il metro? Fuochino. Nel senso che utilizza un&amp;#8217;unit&amp;#224; di misura appunto &lt;u&gt;indipendente&lt;/u&gt; dalla risoluzione; quindi invece di dire che un bottone &amp;#232; largo 100 pixel, imposta per esempio la sua misura a 2 centimetri; a quel punto, quando l&amp;#8217;utente si sposta su un monitor che ha una densit&amp;#224; di pixel diversa &amp;#8211;come negli esempi sopra- il bottone dovrebbe continuare a misurare 2 centimetri.&lt;/p&gt;  &lt;p&gt;Perch&amp;#233; dico &lt;em&gt;dovrebbe&lt;/em&gt;? Beh, perfino chi ha gi&amp;#224; sviluppato in WPF -e non si &amp;#232; posto il problema- probabilmente non non ha ancora notato la differenza nel sistema di misura di WPF rispetto agli altri; anzi, avr&amp;#224; notato il contrario: cambiando monitor, anche gli oggetti WPF cambiano di dimensione; addirittura, rimanendo sullo stesso monitor e cambiando risoluzione, le applicazioni WPF scalano esattamente come le Windows Forms e le applicazioni WEB. Spiegher&amp;#242; il perch&amp;#233; di tutto questo fra un momento.&lt;/p&gt;  &lt;p&gt;Lasciatemi prima dire, anche se &amp;#232; un dettaglio, qual &amp;#232; l&amp;#8217;unit&amp;#224; di misura indipendente dalla risoluzione (che di seguito chiamer&amp;#242; &lt;b&gt;DIU&lt;/b&gt;: &lt;i&gt;Device Independent Unit&lt;/i&gt;) che usa WPF; tenetevi forte: &lt;font color="#ff0000"&gt;0,026458333333 centimetri&lt;/font&gt;; comodo da ricordare, vero ;-) ? Per avere un&amp;#8217;idea pi&amp;#249; pratica, considerate che &amp;#232; circa un quarto di millimetro. Ma probabilmente la fissiamo meglio in mente se consideriamo che ci sono esattamente 96 DIU ogni 2,54 centimetri. In altre parole 1 DIU = 1/96 di pollice. Quindi se vogliamo fare un bottone largo 1 pollice dovremo indicare &lt;font face="Courier New"&gt;&lt;font color="#ff0000"&gt;Width&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;96&amp;quot;&lt;/font&gt;&lt;/font&gt;, e ovviamente 10 centimetri misurano 377,95 DIU.&lt;/p&gt;  &lt;p&gt;Torniamo all'osservazione di prima: prendo un righello, lancio Visual Studio, metto sulla form WPF un bottone da 96 DIU, lo misuro e... mi accorgo che NON &amp;#232; largo necessariamente un centimetro! Abbasso la risoluzione, diventa pi&amp;#249; largo, vado su un altro PC e cambia ancora... ma allora dov&amp;#8217;&amp;#232; la blasonata RESOLUTION INDEPENDENCE di WPF? Il punto &amp;#232; che WPF si basa sulle impostazioni &lt;b&gt;&lt;u&gt;di sistema&lt;/u&gt;&lt;/b&gt;, non sulle impostazioni &lt;b&gt;&lt;u&gt;del device fisico&lt;/u&gt;&lt;/b&gt; (il monitor); se ci pensate un momento, questo ha perfettamente senso: come fa il vostro sistema a sapere quanti centimetri &amp;#232; largo il vostro monitor? Come fa a sapere la distanza del telo dal prioettore collegato alla vostra uscita video, visto che le dimensioni dell&amp;#8217;immagine dipendono da questa? &lt;u&gt;Non lo sa. A meno che non siate voi a dirglielo&lt;/u&gt;. Come? Fate le misurazioni (vedi l&amp;#8217;esempio introduttivo di questo post, dove calcolavo 130 DPI) e specificatele nel Pannello di Controllo (sezione &lt;strong&gt;DPI Scaling&lt;/strong&gt;) come indicato di seguito:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/WPFIndipendenzadallaRisoluzioneVideo_B4C4/dpiVista_4.jpg" target="_blank"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="456" alt="dpiVista" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/WPFIndipendenzadallaRisoluzioneVideo_B4C4/dpiVista_thumb_1.jpg" width="526" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;A questo punto impostate &lt;font face="Courier New"&gt;&lt;font color="#ff0000"&gt;Width&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;377.95&amp;quot;&lt;/font&gt;&lt;/font&gt; nei parametri del bottone (s&amp;#236;, avete letto bene: i DIU si specificano in double) , prendete il righello e verificate se non ci credete: il bottone &amp;#232; largo 10 centimetri, su qualunque monitor e, naturalmente, anche se lo stampate su una LASER da 1200 DPI o su una ad aghi!&lt;/p&gt;  &lt;p&gt;Provate a fare la stessa cosa con un&amp;#8217;applicazione tradizionale in finestra o WEB: non si pu&amp;#242;, o meglio in teoria potreste farlo ma non certo utilizzando un&amp;#8217;unica misura (377,95): dovreste contare quanti pixel ci vogliono per fare 10 centimentri e cambiare la dimensione di conseguenza di dispositivo in dispostivo; per curiosit&amp;#224; e piacere di calcolo: se impostate &lt;font face="Courier New"&gt;&lt;font color="#ff0000"&gt;Width&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;377.95&amp;quot;&lt;/font&gt;&lt;/font&gt;, WPF accende ben 512 pixel sul monitor da 130 DPI in risoluzione nativa di 1680x1050 e solo 236 su un monitor largo uguale che abbia per&amp;#242; una risoluzione nativa di 800x600, ma entrambi i casi la misura &amp;#232; sempre 10 centimetri, e in tutti i casi la misura che voi avete specificato con WPF &amp;#232; sempre la stessa (377,95 DIU)!&lt;/p&gt;  &lt;p&gt;Ora anticipo la prossima obiezione, che qualcuno di persona mi ha gi&amp;#224; fatto: &lt;i&gt;&lt;font color="#0000ff"&gt;d&amp;#8217;accordo, ora &amp;#232; chiaro come tracciare misure fisse indipendenti dalla risoluzione. Ma a me non interessa. Io voglio continuare a beneficiare del fatto che sia l&amp;#8217;utente a scegliere le dimensioni della mia applicazione semplicemente cambiando la risoluzione del monitor oppure, ma solo se &amp;#232; lui a deciderlo, modificando il DPI Scaling&lt;/font&gt;&lt;/i&gt;. Ebbene, non a caso il DIU misura 1/96 di pollice; infatti, per default quando installate Windows, la scala &amp;#232; impostata 96 DPI (vedi immagine sopra). Ci&amp;#242; significa che, se non viene cambiato il valore 96 di default, &lt;u&gt;1 DIU = 1 PIXEL&lt;/u&gt;. Quindi sviluppando in WPF avete entrambi i benefici: per default, funziona tutto come prima, ma se la vostra applicazione deve gestire dimensioni reali basta che chiediate all&amp;#8217;utente di impostare DPI Settings al valore corretto per il suo monitor (semplicmente dividendo la larghezza del monitor per la risoluzione orizzontale); immaginate per esempio una calcolatrice touch screen: sarebbe molto scomodo che, portandola sul un monitor da 52 pollici full HD, occorresse uno spillo per premere i bottoni sul video per evitare che la punta del vostro dito pigi 3 bottoni insieme.&lt;/p&gt;  &lt;p&gt;Infine, e sar&amp;#224; argomento di un prossimo post, seguendo questa strada con WPF diventa semplice &lt;i&gt;scalare&lt;/i&gt; gli oggetti di interfaccia: avete mai visto un&amp;#8217;applicazione che quando &amp;#232; portata a pieno schermo ingrandisce in proporzione tutti gli elementi contenuti nella finestra? Very complicato da implementare in un&amp;#8217;applicazione tradizionale. Questo &amp;#232; il motivo per cui spesso si leggono warning del tipo &lt;font color="#0000ff"&gt;&lt;em&gt;l&amp;#8217;applicazione richiede una risoluzione di 1024x768&lt;/em&gt; &lt;/font&gt;o simili, che vogliono appunto dire che se hai risoluzione maggiore la vedi piccola, mentre se vai in 800x600 ti occupa pi&amp;#249; dello spazio visibile... non sarebbe meglio invece vederla per tutta la larghezza disponibile, eventualmente pi&amp;#249; &lt;i&gt;&lt;strong&gt;definita&lt;/strong&gt;&lt;/i&gt; al crescere della risoluzione?&lt;/p&gt;  &lt;p&gt;Concludo con un parallelo, sempre relativo a WPF, fra Resolution Independence e Time Independence: in WPF quando portate un&amp;#8217;animazione da un PC lento ad uno molto veloce, questa non accelera: come &amp;#232; giusto che sia, semplicmente &lt;strong&gt;diventa pi&amp;#249; fluida&lt;/strong&gt;. Anche questo argomento sar&amp;#224; oggetto di un prossimo post.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Riferimenti&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Matthew MacDonald: &lt;strong&gt;Pro WPF in C# 2008&lt;/strong&gt; - &lt;em&gt;Introducing WPF&lt;/em&gt;, by Apress, capitolo in parte riportato &lt;a href="http://www.c-sharpcorner.com/UploadFile/prvn_131971/IntroducingWPF04222008000516AM/IntroducingWPF.aspx" target="_blank"&gt;qui&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Charles Petzold: &lt;strong&gt;Applications = Code + Markup&lt;/strong&gt; - &lt;em&gt;Capitolo 1&lt;/em&gt;, by Microsoft Press&lt;/li&gt;    &lt;li&gt;Adam Nathan: &lt;strong&gt;Windows Presentation Foundation Unleashed&lt;/strong&gt; - &lt;em&gt;Enter WPF&lt;/em&gt;, by SAMS&lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8625228" width="1" height="1"&gt;</content><author><name>europe\mauromi</name><uri>http://blogs.msdn.com/members/europe%5cmauromi.aspx</uri></author></entry><entry><title>ABC di WCF (con screencast)</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/mauromi/archive/2008/04/22/abc-di-wcf.aspx" /><id>http://blogs.msdn.com/mauromi/archive/2008/04/22/abc-di-wcf.aspx</id><published>2008-04-22T20:50:25Z</published><updated>2008-04-22T20:50:25Z</updated><content type="html">&lt;p&gt;In questo articolo vediamo come realizzare un'applicazione WCF partendo dall'esposizione dei principi di base, costruendone uno da zero in C# con VS2008, installandolo su IIS 7 e infine consumandolo con un client WPF.&lt;/p&gt;  &lt;p&gt;Vi suggerisco di vedere prima lo screencast che segue -dura circa 10 minuti-, per avere un'idea di come si realizza un'applicazione di questo tipo, e poi provare a realizzare nuovamente la stessa seguendo passo passo il resto di questo post. Trovate i sorgenti del progetto &lt;a href="http://maurominella.members.winisp.net/WCF/WCFService.zip" target="_blank"&gt;a questo link&lt;/a&gt;.&lt;/p&gt;  &lt;iframe style="width: 500px; height: 375px" src="http://silverlight.services.live.com/invoke/61714/ABC di WCF/iframe.html" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt; &lt;p&gt;Una volta predisposta una macchina per creare ed ospitare applicazioni WCF, il primo passo per capire come funziona WCF consiste nel studiarne l'&lt;strong&gt;&lt;font color="#ff0000"&gt;ABC&lt;/font&gt;&lt;/strong&gt;, non solo in senso figurato:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;A&lt;/strong&gt;&lt;/font&gt; sta per &lt;strong&gt;&lt;font color="#ff0000"&gt;A&lt;/font&gt;ddress&lt;/strong&gt;, ovvero &lt;strong&gt;&lt;font color="#0000ff"&gt;DOVE&lt;/font&gt;&lt;/strong&gt; avviene la comunicazione; nella pratica, questo &amp;#232; l'URL utilizzato internamente per mappare richieste e risposte. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;B&lt;/font&gt; &lt;/strong&gt;sta per &lt;strong&gt;&lt;font color="#ff0000"&gt;B&lt;/font&gt;inding&lt;/strong&gt;, cio&amp;#232; &lt;strong&gt;&lt;font color="#0000ff"&gt;COME&lt;/font&gt;&lt;/strong&gt; si comunica: tramite HTTP, TCP, NamedPipes, MSMQ, o altro &lt;u&gt;protocollo&lt;/u&gt; che client e server entrambi capiscono. &lt;/li&gt;    &lt;li&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;C&lt;/strong&gt;&lt;/font&gt; &amp;#232; il &lt;strong&gt;&lt;font color="#ff0000"&gt;C&lt;/font&gt;ontratto&lt;/strong&gt;: che &lt;strong&gt;&lt;font color="#0000ff"&gt;COSA&lt;/font&gt;&lt;/strong&gt; client e server si dicono; in particolare, esistono due tipi di contratto:       &lt;ul&gt;       &lt;li&gt;&lt;font color="#ff00ff"&gt;Data Contract&lt;/font&gt;: le informazioni che client e server si scambiano, la cui struttura &amp;#232; indicata nello schema del servizio; &lt;/li&gt;        &lt;li&gt;&lt;font color="#ff00ff"&gt;Service Contract&lt;/font&gt;: i metodi invocati sul vostro servizio dal client, la cui firma (in gergo &lt;em&gt;signature&lt;/em&gt;) &amp;#232; contenuta nel WSDL. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Partiamo lanciando Visual Studio 2008, ricordando di lanciarlo in modalit&amp;#224; Amministratore se intendete utilizzare il server WEB della vostra macchina Windows Vista; ci&amp;#242; non &amp;#232; necessario se utilizzate il Personal Web Server.&lt;/p&gt;  &lt;p&gt;Creiamo un nuovo progetto di tipo WCF (File-New Web Site...), scegliamo un nome e premiamo OK. Noterete che, come spesso succede, il progetto non &amp;#232; esattamente vuoto perch&amp;#233; Visual Studio ci ha favorito inserendo qualche piccola porzione di codice, che normalmente lo sviluppatore deve sempre scrivere; in questo caso, per&amp;#242;, poich&amp;#233; vogliamo capire esattamente i dettagli di WCF, lo &amp;quot;puliremo&amp;quot; quasi per intero.&lt;/p&gt;  &lt;p&gt;Apriamo innanzi tutto il file &lt;font color="#0000ff"&gt;App_Code\IService.cs&lt;/font&gt; e rimuoviamo tutto il codice tranne gli &lt;font color="#0000ff"&gt;using&lt;/font&gt; iniziali che referenziano i namespace. In questo file si specifica l'interfaccia del servizio in termini di &lt;font color="#ff00ff"&gt;dati&lt;/font&gt; &lt;font color="#ff00ff"&gt;&lt;font color="#000000"&gt;e&lt;/font&gt; metodi&lt;/font&gt; attraverso cui il servizio si espone all'esterno; notate la corrispondenza fra questi due termini e i due tipi di contratto che ho indicato sopra con lo stesso colore.&lt;/p&gt;  &lt;p&gt;Partiamo con il Data Contract: definiamo due tipi che useremo per comunicare; potremmo usare tipi semplici come &lt;font color="#0000ff"&gt;string&lt;/font&gt; e &lt;font color="#0000ff"&gt;int&lt;/font&gt;, ma per fare un esempio semplice e al tempo stesso estensibile user&amp;#242; per&amp;#242; due classi, ciascuna con un membro pubblico: chiamer&amp;#242; la prima &lt;strong&gt;Richiesta&lt;/strong&gt; e la seconda &lt;strong&gt;Risposta&lt;/strong&gt;:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="305" alt="wcf-01" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ABCdiWCF_116CF/wcf-01_5.jpg" width="332" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;Ora, affinch&amp;#233; la classe sia serializzabile, l'autore deve definire il data contract che dicevo sopra. L'attributo &lt;font color="#008080"&gt;[DataContract]&lt;/font&gt;, applicato ad una classe o ad un tipo, specifica che la classe (o il tipo) definisce o implementa un data contract ed &amp;#232; serializzabile da un serializatore come &lt;font color="#0000ff"&gt;System.Runtime.Serialization.DataContractSerializer&lt;/font&gt;; in modo simile, l'attributo &lt;font color="#008080"&gt;[DataMember]&lt;/font&gt; deve essere applicato ad ogni membro pubblico che si vuole esporre della classe serializzata. Ecco quindi come devono essere modificate le due classi sopra per diventare parte del data contract:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="369" alt="wcf-02" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ABCdiWCF_116CF/wcf-02_3.jpg" width="333" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;Oltre al Data Contract io voglio ora implementare il Service Contract: in altre parole, voglio esporre un metodo. Tale funzione, che chiamer&amp;#242; &lt;strong&gt;RendiMaiuscolo&lt;/strong&gt;, accetta un oggetto di classe &lt;strong&gt;Richiesta&lt;/strong&gt; e restituisce un oggetto di classe &lt;strong&gt;Risposta&lt;/strong&gt; creato all'interno della funzione stessa; si noti che cos&amp;#236; come il Data Contract richiede la coppia &lt;font color="#008080"&gt;[DataContract] &lt;/font&gt;/ &lt;font color="#008080"&gt;[DataMember]&lt;/font&gt;, in modo simile il Service Contract richiede l'attributo &lt;font color="#008080"&gt;[ServiceContract]&lt;/font&gt; prima della definizione dell'interfaccia, e &lt;font color="#008080"&gt;[OperationContract]&lt;/font&gt; per la definizione del metodo; in pratica, scriveremo cos&amp;#236; la sua signature:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="98" alt="wcf-03" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ABCdiWCF_116CF/wcf-03_3.jpg" width="372" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Il prossimo passo consiste nell'implementare il contratto (in particolare il suo Service Contract) appena definito: apriamo il file &lt;font color="#0000ff"&gt;App_Code\Service.cs&lt;/font&gt;, rimuoviamo tutto il codice e implementiamo l'interfaccia; si pu&amp;#242; anche chiedere a Visual Studio di generare il metodo automaticamente premendo il tasto destro sul nome dell'interfaccia &lt;strong&gt;IService&lt;/strong&gt; da cui si eredita, come mostrato di seguito:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="237" alt="wcf-04" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ABCdiWCF_116CF/wcf-04_3.jpg" width="590" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;Le seguenti tre righe di codice creano un nuovo oggetto di tipo &lt;strong&gt;Risposta&lt;/strong&gt; ed assegnano al suo membro &lt;strong&gt;StringaRisposta&lt;/strong&gt; la stringa contenuta nell'oggetto &lt;strong&gt;richiesta&lt;/strong&gt; che viene passato al metodo, trasformata in maiuscolo:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="203" alt="wcf-05" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ABCdiWCF_116CF/wcf-05_3.jpg" width="552" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;Per completezza di informazione aggiungo che l'ultimo snippet di codice avrebbe potuto contenere l'attributo &lt;font color="#008080"&gt;[ServiceBehaviour]&lt;/font&gt; prima della definizione della classe &lt;strong&gt;Service&lt;/strong&gt; che deriva dall'interfaccia &lt;strong&gt;IService&lt;/strong&gt;, e l'attributo &lt;font color="#008080"&gt;[OperationBehaviour]&lt;/font&gt; prima dell'implementazione del metodo &lt;strong&gt;RendiMaiuscolo&lt;/strong&gt;; tuttavia, questi attributi sono opzionali.&lt;/p&gt;  &lt;p&gt;Con l'ultima operazione abbiamo terminato la scrittura del servizio; provate a compilarlo, non devono esserci errori. &amp;#200; giunto quindi il momento di consumarlo.&lt;/p&gt;  &lt;p&gt;A questo proposito aggiungiamo alla soluzione un nuovo progetto di tipo WPF (nel mio caso l'ho chiamato &lt;strong&gt;WpfApplication1&lt;/strong&gt;) e un riferimento all'oggetto che implementa l'interfaccia &lt;strong&gt;IService&lt;/strong&gt; appena sviluppata; si noti che premendo il bottone &lt;strong&gt;Discover&lt;/strong&gt;, Visual Studio analizza la soluzione e ne mostra i servizi disponibili, quindi non dobbiamo far altro che selezionare l'oggetto che ci serve specificando un namespace per noi significativo (io l'ho chiamato &lt;strong&gt;ServizioDiTest&lt;/strong&gt;):&lt;/p&gt;  &lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="317" alt="wcf-06" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ABCdiWCF_116CF/wcf-06_5.jpg" width="318" border="0" /&gt;&amp;#160;&amp;#160; &lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="318" alt="wcf-07" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ABCdiWCF_116CF/wcf-07_7.jpg" width="388" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;Da questo momento in avanti &amp;#232; possibile utilizzare propriet&amp;#224; e metodi pubblici del servizio attraverso l'oggetto &lt;strong&gt;ServizioDiTest.ServiceClient&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Per testarlo, aggiungete un oggetto TextBox e un Button nel file &lt;font color="#0000ff"&gt;Window1.XAML&lt;/font&gt;:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="154" alt="wcf-08" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ABCdiWCF_116CF/wcf-08_3.jpg" width="548" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;in modo da generare l'event handler dell'evento Click nel file &lt;font color="#0000ff"&gt;Window1.xaml.cs&lt;/font&gt;, che riempiremo con queste 6 righe di codice che instanziano il servizio, usano il suo riferimento per creare l'oggetto &lt;strong&gt;richiesta &lt;/strong&gt;e per creare un riferimento &lt;strong&gt;risposta&lt;/strong&gt; alla classe &lt;strong&gt;Risposta&lt;/strong&gt; di cui il servizio crea l'istanza nel metodo &lt;strong&gt;RendiMaiuscolo&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="205" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ABCdiWCF_116CF/image_5.png" width="552" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;Impostate ore l'applicazione WPF come startup project e lanciatela: premendo il bottone, la stringa verr&amp;#224; convertita in maiuscolo:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="305" alt="wcf-09" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ABCdiWCF_116CF/wcf-09_3.jpg" width="305" border="0" /&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8416963" width="1" height="1"&gt;</content><author><name>europe\mauromi</name><uri>http://blogs.msdn.com/members/europe%5cmauromi.aspx</uri></author></entry><entry><title>LINQ (Language Integrated Query): le slide dei seminari</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/mauromi/archive/2008/04/08/linq-language-integrated-query-le-slide-dei-seminari.aspx" /><id>http://blogs.msdn.com/mauromi/archive/2008/04/08/linq-language-integrated-query-le-slide-dei-seminari.aspx</id><published>2008-04-08T16:38:47Z</published><updated>2008-04-08T16:38:47Z</updated><content type="html">&lt;p&gt;La notizia, sempre gradita dal pubblico, che anticipo quando presento LINQ &amp;#232; che la sessione ha pochissime slide e molte demo.&lt;/p&gt;  &lt;p&gt;In effetti l'argomento non &amp;#232; dei pi&amp;#249; intuitivi, specie per chi proviene da un tipo di sviluppo procedurale classico e non ha particolare esperienza di programmazione procedurale. Inoltre, al fine di cogliere appieno i vantaggi di questa tecnologia, occorre conoscere concetti quali i delegate, le lambda expression, il linguaggio SQL, i Dataset, un po' di XML e chiaramente il framework .NET con almeno un linguaggio fra C# e VB.NET.&lt;/p&gt;  &lt;p&gt;Ci&amp;#242; premesso, i takeaways dell'intera presentazione su LINQ sono essenzialmente i seguenti:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;il linguaggio di interrogazione, SQL-like, si integra nel linguaggio di sviluppo (al momento C# 3.0 e VB.NET 9.0)&lt;/li&gt;    &lt;li&gt;tratta i dati come oggetti, e viceversa&lt;/li&gt;    &lt;li&gt;permette il passaggio dalla modalit&amp;#224; imperativa a quella dichiarativa: &amp;#232; un po' la differenza che passa fra dare indicazioni di svolta a destra/sinistra/avanti/indietro ad un tassista invece che comunicargli una volta solamente l'indirizzo di destinazione&lt;/li&gt;    &lt;li&gt;funziona in modo molto simile per la gestione di dati, oggetti e stream XML&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Le slide che trovate quindi &lt;a href="http://maurominella.members.winisp.net/LinQ/Seminario%20LinQ.zip" target="_blank"&gt;a questo link&lt;/a&gt; sono quindi in minor numero rispetto al solito -fra l'altro, le prime tre riprendono i concetti (necessari) del Framework .NET-, ma come vi dicevo gran parte della presentazione prevede la scrittura di demo live per circa 90 minuti. &lt;/p&gt;  &lt;p&gt;Seppure corredata di demo live che svolgo al momento, la sessione &amp;#232; pur sempre teorica; viene per questo completata da una esercitazione pratica, che i ragazzi possono svolgere sui PC dell'Universit&amp;#224; o personali. &lt;a href="http://maurominella.members.winisp.net/LinQ/LINQ_Hands_on_Lab.zip" target="_blank"&gt;Trovate qui&lt;/a&gt; gli script di laboratorio, e &lt;a href="http://blogs.msdn.com/mauromi/archive/2008/03/05/configurazione-laboratori-per-esercitazioni-in-universit-su-tecnologie-microsoft-net.aspx" target="_blank"&gt;in questo mio post precedente&lt;/a&gt; le istruzioni per predisporre la vostra macchina.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Ho presentato questo argomento recentemente a Salerno e Catania. Se siete in zona, e interessati, mi trovate a Venezia il 10 aprile, a Napoli il 15/4, a Milano Bicocca il 17/4, a Bologna il 27/5 e a Torino l'11 giugno; pi&amp;#249; in generale, trovate le date dei nostri eventi pubblicate sul sito degli studenti (&lt;a title="http://www.microsoft.com/italy/studenti/" href="http://www.microsoft.com/italy/studenti/"&gt;http://www.microsoft.com/italy/studenti/&lt;/a&gt;).&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8369084" width="1" height="1"&gt;</content><author><name>europe\mauromi</name><uri>http://blogs.msdn.com/members/europe%5cmauromi.aspx</uri></author></entry><entry><title>Dependency Property in Windows Presentation Foundation (con screencast)</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/mauromi/archive/2008/04/08/dependency-property-in-windows-presentation-foundation-con-screencast.aspx" /><id>http://blogs.msdn.com/mauromi/archive/2008/04/08/dependency-property-in-windows-presentation-foundation-con-screencast.aspx</id><published>2008-04-08T12:50:59Z</published><updated>2008-04-08T12:50:59Z</updated><content type="html">&lt;p&gt;Inizialmente si potrebbe approcciare questo argomento con scetticismo, dal momento che complica il panorama di tipi .NET conosciuti che tipicamente presentano campi semplici, propriet&amp;#224;, metodi ed eventi; ma si cambier&amp;#224; idea non appena cap&amp;#236;ti i problemi risolti attraverso le dependency property, che possono essere sfruttate per abilitare il data binding automatico, le animazioni, gli stili e molto altro. Diventa cos&amp;#236; possibile, per esempio, scrivere nel codice di markup (XAML) operazioni di layout (dipendenti per esempio dalla posizione del mouse) che altrimenti si dovrebbero gestire da codice procedurale (C# o VB.NET).&lt;/p&gt;  &lt;p&gt;Una dependency property &lt;i&gt;dipende&lt;/i&gt; da diversi provider per determinare il suo valore in ogni momento; l&amp;#8217;obiettivo &amp;#232; di permettere funzionalit&amp;#224; avanzate direttamente dall&amp;#8217;interno del linguaggio di markup, senza bisogno di impostare le propriet&amp;#224; con codice procedurale.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;font color="#0000ff"&gt;Implementazione di una Dependency Property&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Le dependency property sono normali propriet&amp;#224; di classi .NET che hanno una particolare struttura che le rende fruibili da WPF in modo speciale; nessun altro linguaggio .NET a parte XAML le riconosce come tali.&lt;/p&gt;  &lt;p&gt;Per convenzione, tutti i campi DependencyProperty sono pubblici, statici e hanno il suffisso Property.&lt;/p&gt;  &lt;p&gt;Poich&amp;#233; le dependency property sono campi statici, esse consumano una quantit&amp;#224; di memoria di molto inferiore rispetto a che se fossero tipiche propriet&amp;#224; .NET di cui esiste in memoria una copia per istanza. Non a caso, 78 propriet&amp;#224; su 96 dei bottoni sono dependency property.&lt;/p&gt;  &lt;p&gt;Una dependency property &amp;#232; implementata attraverso una chiamata al metodo statico &lt;i&gt;DependencyProperty.Register&lt;/i&gt; che richiede un nome (es. &lt;i&gt;IsMouseOver&lt;/i&gt;), un tipo (es. &lt;i&gt;bool&lt;/i&gt;), il tipo della classe che le espone (es. &lt;i&gt;Button&lt;/i&gt;) e, nella maggioranza dei casi, il nome della funzione di callback che viene chiamata quando tale propriet&amp;#224; cambia.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;font color="#0000ff"&gt;Change Notification&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;L&amp;#8217;implementazione della callback nelle dependency property prende il nome di &lt;i&gt;Change Notification&lt;/i&gt;; per rimanere nell&amp;#8217;esempio precedente, la propriet&amp;#224; &lt;i&gt;IsMouseOver&lt;/i&gt; permette di legare il suo valore (che dice quindi se il mouse si trova effettivamente sul controllo che la utilizza) ad un&amp;#8217;altra propriet&amp;#224; del controllo stesso, come &lt;i&gt;Background&lt;/i&gt;. Ci&amp;#242; significa che in questo caso non &amp;#232; necessario gestire il background del controllo andando a scrivere codice per l&amp;#8217;event handler di &lt;i&gt;MouseEnter&lt;/i&gt; e &lt;i&gt;MouseLeave&lt;/i&gt; come vorrebbe il metodo classico, il quale fra l&amp;#8217;altro &amp;#8220;sporca&amp;#8221; la business logic del file C# con codice di gestione del layout.&lt;/p&gt;  &lt;p&gt;Grazie all&amp;#8217;implementazione descritta nel punto precedente, &amp;#232; invece possibile legare il cambiamento di valore di &lt;i&gt;IsMouseOver&lt;/i&gt; (da &lt;i&gt;True&lt;/i&gt; a &lt;i&gt;False&lt;/i&gt; o viceversa) al valore della propriet&amp;#224; Background del bottone. &lt;/p&gt;  &lt;p&gt;Il video che segue mostra appunto come sfuttare le dependency property per impostare il colore di un bottone quando il mouse ci passa sopra. Normalmente potremmo implementare questo comportamento andando a definire e poi implementare, in codice procedurale C# o VB.NET, gli event handler per gli eventi di &lt;em&gt;MouseEnter&lt;/em&gt; e &lt;em&gt;MouseLeave&lt;/em&gt;. Grazie alle dependency property, invece, &amp;#232; possibile implementare questo comportamento solamente usando il codice di markup (XAML). Vediamo quindi come effettuare questa operazione, prima con il metodo classico e poi con le dependency property. Buona visione.&lt;/p&gt; &lt;iframe style="width: 500px; height: 375px" src="http://silverlight.services.live.com/invoke/61714/DependencyPropertiesinWPF/iframe.html" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8368500" width="1" height="1"&gt;</content><author><name>europe\mauromi</name><uri>http://blogs.msdn.com/members/europe%5cmauromi.aspx</uri></author></entry><entry><title>Command Binding in Windows Presentation Foundation (con screencast)</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/mauromi/archive/2008/03/28/command-binding-in-windows-presentation-foundation.aspx" /><id>http://blogs.msdn.com/mauromi/archive/2008/03/28/command-binding-in-windows-presentation-foundation.aspx</id><published>2008-03-28T20:39:03Z</published><updated>2008-03-28T20:39:03Z</updated><content type="html">&lt;p&gt;WPF fornisce supporto integrato per i &lt;em&gt;&lt;font color="#ff0000"&gt;comandi&lt;/font&gt;&lt;/em&gt;, permettendo di associare a ciascuno di essi una funzione di risposta alle &lt;font color="#808000"&gt;&lt;strong&gt;principali azioni&lt;/strong&gt;&lt;/font&gt; che su di essi si possono compiere; per &lt;em&gt;&lt;font color="#ff0000"&gt;comandi&lt;/font&gt; &lt;/em&gt;si intende quelle operazioni classiche di Windows quali &lt;em&gt;Copy&lt;/em&gt;, &lt;em&gt;Paste&lt;/em&gt;, &lt;em&gt;AlignRight&lt;/em&gt;, &lt;em&gt;Close&lt;/em&gt;, &lt;em&gt;Open&lt;/em&gt;, &lt;em&gt;Undo&lt;/em&gt;, &lt;em&gt;ScrollDown&lt;/em&gt;, &lt;em&gt;PreviousTrack&lt;/em&gt; ed un altro centinaio, che WPF raggruppa in cinque classi: ApplicationCommands, ComponentCommands, MediaCommands, NavigationCommands ed EditingCommands, di cui trovate ampia documentazione su MSDN e in generale sulla rete.&lt;/p&gt;  &lt;p&gt;Le &amp;quot;&lt;font color="#808000"&gt;&lt;strong&gt;principali azioni&lt;/strong&gt;&lt;/font&gt;&amp;quot; relative ai comandi sono tre: 1) la loro esecuzione, 2) la verifica sul fatto che possano essere effettivamente eseguite e 3) la notifica dello stato di cambiamento della loro disponibilit&amp;#224;; per fare un esempio, la funzione &lt;em&gt;incolla&lt;/em&gt; prevede come &lt;u&gt;esecuzione&lt;/u&gt; l'estrazione dell'informazione dalla clipboard e la sua scrittura nell'elemento di destinazione (es. una TextBox), prevede come &lt;u&gt;verifica&lt;/u&gt; il fatto che esista un'informazione in clipboard e come &lt;u&gt;notifica&lt;/u&gt; il fatto che la clipboard passi da vuota a piena o viceversa; in questo modo posso utilizzare le tre funzioni per abilitare o disabilitare un bottone che ne implementa il comportamento.&lt;/p&gt;  &lt;p&gt;Una volta associato il comando ai nomi delle tre funzioni di risposta (per la precisione questa operazione si chiama &lt;em&gt;&lt;strong&gt;CommandBinding&lt;/strong&gt;&lt;/em&gt;), &amp;#232; possibile sfruttare un altro potente servizio offerto da WPF per legare il comando ad un controllo che pu&amp;#242; essere di tipo &lt;em&gt;Button&lt;/em&gt;, &lt;em&gt;CheckBox&lt;/em&gt; o &lt;em&gt;MenuItem&lt;/em&gt;; da quel momento, premere il bottone richiamer&amp;#224; la funzione designata alla &lt;u&gt;esecuzione&lt;/u&gt;, e la propriet&amp;#224; &lt;em&gt;IsEnabled&lt;/em&gt; dello stesso sar&amp;#224; automaticamente legata al risultato della funzione di &lt;u&gt;verifica&lt;/u&gt;. In pi&amp;#249;, se il comando prevede una combinazione di tastiera (come il CTRL-V per la funzione &lt;em&gt;Incolla&lt;/em&gt;), digitando la stessa otteniamo gratis il biding dello shortcut alla funzione di esecuzione, esattamente come se avessimo premuto il bottone ad essa riferito.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Non vi ho convinto? In effetti, per chi proviene come me da esperienza di programmazione procedurale, risulta a volte difficile percepire il vantaggio di un sistema -come WPF- che fornisce gi&amp;#224; integrato il supporto per operazioni che siamo sempre stati finora abituati a gestire manualmente: &lt;em&gt;che problema c'&amp;#232;? -&lt;/em&gt; mi sono chiesto la prima volta che ho studiato questo argomento - &lt;em&gt;basta scrivere l'operazione nella funzione di risposta al click del bottone&lt;/em&gt;.&amp;#160; &lt;/p&gt;  &lt;p&gt;Per meglio rendermi conto della differenza ho provato ad implementare la funzione &lt;em&gt;incolla&lt;/em&gt; in modo tradizionale e poi sono passato al command binding di WPF, e devo confessarvi che mi sono ricreduto: quasi per magia (il mio collega e amico &lt;a href="http://blogs.msdn.com/darioait/" target="_blank"&gt;Dario Airoldi&lt;/a&gt; , scherzando, mi ha chiamato &lt;em&gt;Silvan&lt;/em&gt; quando ha visto la mia piccola demo :-)), continuavo a rimuovere decine di righe di codice che avevo scritto fino a scendere a &lt;strong&gt;zero istruzioni&lt;/strong&gt; C# e &lt;strong&gt;due soli attributi &lt;/strong&gt;del bottone in XAML, e il programma continuava a funzionare anche meglio di prima (per esempio, potevo evitare di monitorare&amp;#160; lo stato della clipboard con un timer)!&lt;/p&gt;  &lt;p&gt;In effetti, riflettendoci bisogna ammettere che &amp;#232; quasi imbarazzante che io spieghi a Windows che quando premo CTRL-V lui deve andare a prendere il contenuto della clipboard e scriverlo nel controllo con il focus: dovrei solo potergli dire &lt;em&gt;incolla!&lt;/em&gt; e poi sapr&amp;#224; ben lui come fare, non vi pare?&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Se vi ho incuriosito a sufficienza, potete guardarvi lo screencast del mio test che ho descritto sopra, che ho registrato in modo amatoriale (dovrete alzare un po' il volume, ed &amp;#232; sicuramente migliorabile) per il mio archivio personale ma che credo possa aiutare nella comprensione di questo argomento. &lt;/p&gt;  &lt;p&gt;Vi auguro buona visione. Alla prossima&lt;/p&gt;  &lt;p&gt;&lt;iframe style="width: 500px; height: 375px" src="http://silverlight.services.live.com/invoke/61714/WPF_Commands/iframe.html" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8342138" width="1" height="1"&gt;</content><author><name>europe\mauromi</name><uri>http://blogs.msdn.com/members/europe%5cmauromi.aspx</uri></author></entry><entry><title>Configurazione laboratori per esercitazioni in università su tecnologie Microsoft .NET</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/mauromi/archive/2008/03/05/configurazione-laboratori-per-esercitazioni-in-universit-su-tecnologie-microsoft-net.aspx" /><id>http://blogs.msdn.com/mauromi/archive/2008/03/05/configurazione-laboratori-per-esercitazioni-in-universit-su-tecnologie-microsoft-net.aspx</id><published>2008-03-05T13:18:05Z</published><updated>2008-03-05T13:18:05Z</updated><content type="html">&lt;p&gt;Anche la seconda serie di seminari che sto portando in giro per l'Italia prevede, nella maggioranza dei casi, una mattinata dedicata all'approfondimento teorico di alcune architetture e tecnologie, ed esercitazioni pratiche il pomeriggio sugli argomenti prima presentati.&lt;/p&gt;  &lt;p&gt;Per sfruttare al meglio il tempo a disposizione, &amp;#232; necessario preparare i PC in anticipo; si tenga presente che a seconda della configurazione di partenza del PC, della disponibilit&amp;#224; del materiale da installare (su DVD o con download dal sito Microsoft), la &lt;u&gt;configurazione pu&amp;#242; richiedere anche alcune ore&lt;/u&gt;; in questo post riassumo le istruzioni, che variano a seconda della tipologia di esercizi da svolgere. In particolare, occorre avere installati:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Sistema Operativo Microsoft Windows XP SP2 o Windows Vista, aggiornati attraverso il sito &lt;a href="http://windowsupdate.microsoft.com" target="_blank"&gt;windowsupdate.microsoft.com&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.WindowsUpdate.com"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Per le esercitazioni su &lt;font color="#0000ff"&gt;&lt;strong&gt;ASP.NET&lt;/strong&gt;&lt;/font&gt;, &lt;font color="#0000ff"&gt;&lt;strong&gt;ADO.NET&lt;/strong&gt;&lt;/font&gt; e &lt;font color="#0000ff"&gt;&lt;strong&gt;Master Pages&lt;/strong&gt;&lt;/font&gt;, scaricare il file &lt;a href="http://maurominella.members.winisp.net/HOL.ZIP" target="_blank"&gt;HOL.ZIP&lt;/a&gt; e seguire istruzioni per la configurazione contenute &lt;a href="http://blogs.msdn.com/mauromi/archive/2007/09/10/esercitazioni-di-laboratorio-su-asp-net-2-0-tratte-dal-materiale-per-seminari-universitari.aspx" target="_blank"&gt;in questo post&lt;/a&gt; o nel file &lt;font color="#0000ff"&gt;00-INSTALLAZIONE LABORATORIO.PDF&lt;/font&gt; contenuto in HOL.ZIP &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Le esercitazioni su &lt;font color="#0000ff"&gt;&lt;strong&gt;LINQ&lt;/strong&gt;&lt;/font&gt; richiedono come configurazione minima una versione qualunque di &lt;font color="#0000ff"&gt;Microsoft Visual Studio 2008 (*)&lt;/font&gt; installata con i parametri di default, e la presenza sul PC di &lt;font color="#0000ff"&gt;SQL Server 2005&lt;/font&gt; (versione Express, installata da Visual Studio, oppure un&amp;#8217;altra versione commerciale); servono inoltre i seguenti due file:       &lt;ul&gt;       &lt;li&gt;Il database &lt;a href="http://maurominella.members.winisp.net/linq/northwind.zip" target="_blank"&gt;NorthWind&lt;/a&gt;, da aggiungere ai database di SQL Server, per gli esercizi di LinQ to Dataset e LinQ to SQL &lt;/li&gt;        &lt;li&gt;Il file &lt;a href="http://maurominella.members.winisp.net/linq/customers.zip" target="_blank"&gt;Customers.XML&lt;/a&gt;, per gli esercizi di LinQ to XML &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Per le esercitazioni su &lt;b&gt;&lt;font color="#0000ff"&gt;Sviluppo Mobile&lt;/font&gt;&lt;/b&gt;, serve avere installati:       &lt;ul&gt;       &lt;li&gt;il software &lt;b&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=it&amp;amp;FamilyID=9e641c34-6f7f-404d-a04b-dc09f8141141" target="_blank"&gt;Activesync 4.5&lt;/a&gt;&lt;/b&gt; (per Windows XP) o il &lt;b&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=46F72DF1-E46A-4A5F-A791-09F07AAA1914&amp;amp;displaylang=it" target="_blank"&gt;Centro gestione dispositivi Windows Mobile 6.1&lt;/a&gt;&lt;/b&gt; (per Windows Vista) scaricabili dal sito Microsoft &lt;/li&gt;        &lt;li&gt;la versione &lt;b&gt;&lt;u&gt;Professional&lt;/u&gt;&lt;/b&gt; di Microsoft Visual Studio 2008 (*) &lt;/li&gt;        &lt;li&gt;Il file &lt;a href="http://maurominella.members.winisp.net/mobility/Orders.zip" target="_blank"&gt;Orders.sdf&lt;/a&gt;&lt;/li&gt;        &lt;li&gt;La cartella &lt;a href="http://maurominella.members.winisp.net/mobility/Images.zip" target="_blank"&gt;Images&lt;/a&gt;&lt;/li&gt;        &lt;li&gt;Componenti &lt;b&gt;&lt;u&gt;facoltativi&lt;/u&gt;&lt;/b&gt;, solo per testare l&amp;#8217;applicazione su ulteriori emulatori:           &lt;ul&gt;           &lt;li&gt;&lt;a href="http://www.microsoft.com/italy/msdn/risorsemsdn/mobile/default.mspx" target="_blank"&gt;Windows Mobile 6 SDK&lt;/a&gt; (professional e standard) &lt;/li&gt;            &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=38c46aa8-1dd7-426f-a913-4f370a65a582&amp;amp;DisplayLang=en" target="_blank"&gt;Windows Mobile 6 Localized Emulator Images&lt;/a&gt; (Professional + Standard italiano) &lt;/li&gt;         &lt;/ul&gt;       &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;(*) Le seguenti opzioni sono disponibili per ottenere Microsoft Visual Studio 2008:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Utilizzare l&amp;#8217;account MSDN-AA (Academic Alliance) fornito dall&amp;#8217;Universit&amp;#224;, che consente a tutti gli studenti afferenti del dipartimento che lo ha sottoscritto di accedere gratuitamente al software Microsoft, fra cui tutti i sistemi operativi, i prodotti server e i prodotti di sviluppo, incluso Visual Studio 2008 Professional; &lt;/li&gt;    &lt;li&gt;Scaricare la &lt;a href="http://msdn2.microsoft.com/it-it/vstudio/products/aa700831(en-us).aspx" target="_blank"&gt;versione gratuita di valutazione di Visual Studio Professional 2008&lt;/a&gt;, completamente funzionante per 3 mesi. &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8050304" width="1" height="1"&gt;</content><author><name>europe\mauromi</name><uri>http://blogs.msdn.com/members/europe%5cmauromi.aspx</uri></author></entry><entry><title>Visual Studio Team System: le slide dei seminari</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/mauromi/archive/2008/02/27/visual-studio-team-system-le-slide-dei-seminari.aspx" /><id>http://blogs.msdn.com/mauromi/archive/2008/02/27/visual-studio-team-system-le-slide-dei-seminari.aspx</id><published>2008-02-27T18:24:24Z</published><updated>2008-02-27T18:24:24Z</updated><content type="html">&lt;p&gt;Recentemente ho presentato un seminario all'Universit&amp;#224; Tor Vergata di Roma ad un pubblico di studenti che includeva in maggioranza persone del Corso di Ingegneria del Software.&lt;/p&gt;  &lt;p&gt;Con il Prof. D'Ambrogio abbiamo quindi concordato di dare particolare risalto alle tematiche di gestione del ciclo di vita del software; come probabilmente sapete, Microsoft ha sviluppato negli anni una serie di metodologie, best practice, mentalit&amp;#224;, modelli, discipline e altre esperienze che ha poi raccolto e pubblicato, in diverse fasi, sotto il nome di MFS (Microsoft Solution Framework).&lt;/p&gt;  &lt;p&gt;La prima versione risale all'inizio degli anni '90, &amp;#232; stata resa pubblica nel 1993 ed &amp;#232; poi stata aggiornata nel corso degli anni: nel 1998 con la versione 2 e nel 2003 con la versione 3, fino ad arrivare all&amp;#8217;ultima versione (la 4) rilasciata nel 2006 assieme alla famiglia Visual Studio Team System e al Team Foundation Server.&lt;/p&gt;  &lt;p&gt;A partire dalla versione 4, MSF &amp;#232; utilizzabile sia senza uno strumento, sia in combinazione con Team Foundation Server, Team Explorer, Windows Sharepoint Services, Reporting Services, Microsoft Project e Microsoft Excel, che danno accesso alle funzionalit&amp;#224; di pianificazione, gestione della documentazione e del codice sorgente, tracciamento di attivit&amp;#224;, bug, rischi e molto altro ancora.&lt;/p&gt;  &lt;p&gt;Il mio intervento si &amp;#232; focalizzato prima sull'analisi delle cause principali di fallimento di progetti IT, ne ha cercato di identificare le soluzioni pi&amp;#249; efficaci, ha presentato il framework MSF utilizzato internamente dalla stessa Microsoft per la gestione dei suoi prodotti e infine ha coperto la parte di strumenti software client e server -Visual Studio Team System- che sfruttano i principi prima discussi integrandosi perfettamente con MSF 4.&lt;/p&gt;  &lt;p&gt;Spero di farvi cosa gradita mettendovi a disposizione &lt;a href="http://maurominella.members.winisp.net/VSTS/Visual Studio Team System.zip" target="_blank"&gt;le slide della mia presentazione&lt;/a&gt;; se non avete usato un tool di supporto al ciclo di vita del software finora, vi invito a considerare seriamente la soluzione proposta da Microsoft: che dobbiate sviluppare un piccolo software per l'esame del corso universitario insieme ad un compagno, o che siate responsabili di progetti IT di gradi dimensioni, avere una metodologia agile, flessibile e potente ripagher&amp;#224; ampiamente il tempo investito e vi consentir&amp;#224; di arrivare al termine del progetto &lt;em&gt;on budget&lt;/em&gt;, &lt;em&gt;on time&lt;/em&gt; e &lt;em&gt;on target&lt;/em&gt; ;-)!&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="341" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/VisualStudioTeamSystemleslidedeiseminari_E6B6/image_3.png" width="526" border="0" /&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7919272" width="1" height="1"&gt;</content><author><name>europe\mauromi</name><uri>http://blogs.msdn.com/members/europe%5cmauromi.aspx</uri></author></entry><entry><title>Sviluppo Embedded con VS2008: le slide dei seminari</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/mauromi/archive/2008/02/27/sviluppo-embedded-con-vs2008-le-slide-dei-seminari.aspx" /><id>http://blogs.msdn.com/mauromi/archive/2008/02/27/sviluppo-embedded-con-vs2008-le-slide-dei-seminari.aspx</id><published>2008-02-27T17:20:49Z</published><updated>2008-02-27T17:20:49Z</updated><content type="html">&lt;p&gt;Durante i seminari su ASP.NET che ho portato in giro per l'Italia nel primo semestre dell'anno accademico 2007-2008, come di consueto abbiamo raccolto feedback che ci aiutino a migliorarli e spunti per gli argomenti di successivi approfondimenti.&lt;/p&gt;  &lt;p&gt;Uno dei pi&amp;#249; richiesti &amp;#232; lo sviluppo per dispositivi mobili, che ho provveduto ad inserire nel ciclo di seminari del secondo semestre. &lt;/p&gt;  &lt;p&gt;La presentazione, di circa 90 minuti, parte dalla esposizione delle tre piattaforme embedded di Microsoft (Micro Framework, Windows CE e XP Embedded) per focalizzarsi poi sui sistemi operativi dedicati a Windows CE (da Handled PC a Windows Mobile 6) e in particolare sui loro allestimenti (come gli Smartphone); a questo proposito trovate maggiori approfondimenti &lt;a href="http://blogs.msdn.com/mauromi/archive/2007/08/29/sviluppo-per-dispositivi-mobili-passato-presente-e-futuro.aspx" target="_blank"&gt;su questo mio post precedente&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;La presentazione passa poi ad analizzare le due modalit&amp;#224; di programmazione (Managed e Nativa) e in particolare la prima delle due, grazie all'ultima versione del Compact Framework (la 3.5) che &amp;#232; disponibile in Visual Studio 2008; BTW: il Compact Framework 3.5 copre il 30% delle funzionalit&amp;#224; del Framework .NET 3.5 nell'8% di spazio, ovvero per installarlo vi occorrono solamente 6.2 MB liberi sul dispositivo. Fra le altre cose supporta WCF, Link, Direct3D ed integra SQL Embedded.&lt;/p&gt;  &lt;p&gt;Risalto particolare viene dato agli &lt;strong&gt;emulatori&lt;/strong&gt;, ora giunti alla versione 3, che permettono di provare le vostre applicazioni su decine di diverse configurazioni senza doverli avere fisicamente disponibili; personalmente trovo che la &amp;quot;user experience&amp;quot; &amp;#232; enormemente migliorata con l'ultima versione del device emulator, permettendo di simulare operazioni quali la connessione al cradle, l'installazione una rete 3G ed &amp;#232; possibile perfino effettuare chiamate telefoniche e mandare SMS. Provare per credere. &lt;/p&gt;  &lt;p&gt;Naturalmente, se avete un dispositivo basato su Windows CE (come un Pocket PC o uno Smartphone), e questo non &amp;#232; bloccato, potete anche fare il deployment delle vostre applicazioni, magari via Bluetooth, che a me personalmente ha dato una notevole soddisfazione. Maggiori informazioni sul collegamento ActiveSync via bluetooth sono disponibili &lt;a href="http://blogs.msdn.com/mauromi/archive/2008/01/18/come-stabilire-connessione-activesync-via-bluetooth-fra-dispositivo-mobile-e-pc.aspx" target="_blank"&gt;a questo indirizzo&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Spero di fare cosa gradita mettendovi a disposizione &lt;a href="http://maurominella.members.winisp.net/mobility/Sviluppo%20Mobile%20con%20Visual%20Studio%202008.zip" target="_blank"&gt;la mia presentazione&lt;/a&gt;. Quanto ai laboratori, se volete esercitarvi con uno script che vi guidi passo passo alla realizzazione di un progetto completo, vi suggerisco &lt;a href="http://blogs.msdn.com/mauromi/archive/2008/01/22/come-accedere-a-sql-mobile-3-5-da-un-applicazione-mobile.aspx" target="_blank"&gt;questo mio post precedente&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Se poi qualcuno si trova nei paraggi ed &amp;#232; interessato, ne parler&amp;#242; a La Sapienza (Dip. di Informatica e Sistemistica &amp;quot;Antonio Ruberti&amp;quot; di Via Ariosto n. 25 a Roma) il 4 marzo 2008, poi ancora a Salerno (Universit&amp;#224; di Fisciano) il 4 aprile, a Milano Bicocca il 17 aprile e pi&amp;#249; in generale trovate i nostri eventi aggiornati &lt;a href="http://www.microsoft.com/italy/studenti/eventi.mspx" target="_blank"&gt;sul sito Microsoft 4U&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7918691" width="1" height="1"&gt;</content><author><name>europe\mauromi</name><uri>http://blogs.msdn.com/members/europe%5cmauromi.aspx</uri></author></entry><entry><title>Dagli Anonymous Delegate alle Lambda Expression di C#3.0</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/mauromi/archive/2008/01/23/dagli-anonymous-delegate-alle-lambda-expression-di-c-3-0.aspx" /><id>http://blogs.msdn.com/mauromi/archive/2008/01/23/dagli-anonymous-delegate-alle-lambda-expression-di-c-3-0.aspx</id><published>2008-01-23T21:27:56Z</published><updated>2008-01-23T21:27:56Z</updated><content type="html">&lt;p&gt;Un mio &lt;a href="http://blogs.msdn.com/mauromi/archive/2007/09/27/come-usare-gli-oggetti-delegate-in-c.aspx" target="_blank"&gt;post precedente sull'uso dei delegate&lt;/a&gt; ha generato un lungo follow-up con sviluppatori interessati ad approfondire l'argomento; in particolare, numerose domande riguardavano l'utilizzo dei delegate in funzioni di callback, in chiamate asincrone, nello scorrimento di liste generiche e, naturalmente, nell'integrazione dei delegate in LinQ. Approfitto di questa nota anche per ricordare che &amp;#232; preferibile e pi&amp;#249; efficiente postare le vostre domande in fondo ai miei blog, invece di scrivermi per mail, cos&amp;#236; da condividere le nostre interazioni con il resto della community ;-).&lt;/p&gt;  &lt;p&gt;L'utilizzo dei delegati negli scenari descritti sopra prevede l'approfondimento di un tipo particolare di delegate, ovvero gli &lt;strong&gt;Anonymous Delegate&lt;/strong&gt;. A questo scopo ho preparato il seguente listato che mostra l'implementazione degli anonymous delegate in diverse situazioni; non cercate di leggerlo subito perch&amp;#233; &amp;#232; commentato nel resto del post, ma magari stampate l'immagine linkata che &amp;#232; ad alta definizione per prendere appunti durante la lettura del resto di questo post:&lt;a href="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeusaregliAnonymousDelegate_F61B/image_14.png" target="_blank"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="437" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeusaregliAnonymousDelegate_F61B/image_thumb_6.png" width="532" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Come dicevo, ho riassunto tutto il codice insieme per poter meglio confrontare i dettagli che ora vado a spiegare, relativi al pezzettino di volta in volta evidenziato.&lt;/p&gt;  &lt;p&gt;Iniziamo ricapitolando il normale uso dei delegati NON anonimi; in pratica, definita una funzione (&lt;font color="#0000ff"&gt;somma&lt;/font&gt; nel mio esempio), la richiamo attraverso un oggetto delegate -che ho chiamato &lt;font color="#0000ff"&gt;CalcoloDelegatoEsplicito&lt;/font&gt;) di &lt;font color="#0000ff"&gt;CalcoloDelegato&lt;/font&gt; che &amp;#232; una classe &amp;quot;&lt;font color="#ff0000"&gt;tipo puntatore a funzione&lt;/font&gt;&amp;quot; (buona definizione di &lt;font color="#ff0000"&gt;delegate&lt;/font&gt;) ad una generica funzione che riceve due interi (&lt;font color="#0000ff"&gt;a&lt;/font&gt; e &lt;font color="#0000ff"&gt;b&lt;/font&gt;) e ne restituisce un terzo; si noti che &amp;#232; stata necessaria una &lt;font color="#0000ff"&gt;New&lt;/font&gt; per instanziare &lt;font color="#0000ff"&gt;CalcoloDelegatoEsplicito&lt;/font&gt;, a sostegno del fatto che i delegate non sono semplici alias bens&amp;#236; delle classi del .NET framework:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeusaregliAnonymousDelegate_F61B/image_16.png" target="_blank"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="442" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeusaregliAnonymousDelegate_F61B/image_thumb_7.png" width="538" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Ora facciamo la stessa cosa utilizzando per&amp;#242; un &lt;strong&gt;Anonymous Delegate&lt;/strong&gt;, ovvero rimuovendo la funzione &lt;font color="#0000ff"&gt;somma&lt;/font&gt; e spostandone l'implementazione inline. Si noti che in questo caso non &amp;#232; necessario usare la &lt;font color="#0000ff"&gt;New &lt;/font&gt;per creare l'istanza del delegate; infatti, il compilatore C# &amp;#232; in grado di capire da solo che deve effettuare le seguenti operazioni:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Inferire i valori di ritorno della funzione anonima (ovvero capire che restituisce un intero)&lt;/li&gt;    &lt;li&gt;Istanziare un nuovo oggetto delegate del tipo dedotto al punto precedente&lt;/li&gt;    &lt;li&gt;Wrappare il nuovo delegate intorno al metodo anonimo&lt;/li&gt;    &lt;li&gt;Assegnare quest'ultimo allo specifico delegate CalcoloDelegato&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Le uniche istruzioni necessarie a ottenere il risultato sono dunque quelle di seguito evidenziate:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeusaregliAnonymousDelegate_F61B/image_18.png" target="_blank"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="464" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeusaregliAnonymousDelegate_F61B/image_thumb_8.png" width="564" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Ora facciamo un salto di astrazione: usiamo la funzione &lt;font color="#0000ff"&gt;InvocaDelegateSpecifico&lt;/font&gt; che accetta come parametro uno &lt;strong&gt;&lt;u&gt;&lt;font color="#ff0000"&gt;SPECIFICO&lt;/font&gt;&lt;/u&gt;&lt;/strong&gt;&amp;#160; delegate (in questo caso si aspetta un delegate della classe &lt;font color="#0000ff"&gt;CalcolaDelegato&lt;/font&gt;, che noi le passiamo dopo averlo creato inline come anonymous delegate):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeusaregliAnonymousDelegate_F61B/image_20.png" target="_blank"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="474" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeusaregliAnonymousDelegate_F61B/image_thumb_9.png" width="577" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Vediamo l'ultimo caso: funzioni che prendono un delegate astratto, come la &lt;font color="#0000ff"&gt;InvocaDelegateAstratto(Delegate calcolodelegatoastratto)&lt;/font&gt;; in questo caso dovete prima effettuare il cast ad uno specifico delegate:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeusaregliAnonymousDelegate_F61B/image_22.png" target="_blank"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="477" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeusaregliAnonymousDelegate_F61B/image_thumb_10.png" width="580" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Infine, il caso pi&amp;#249; interessante: un esempio utile e concreto in cui il costruttore della classe &lt;font color="#0000ff"&gt;Thread&lt;/font&gt; (ma potrebbe essere il metodo &lt;font color="#0000ff"&gt;Find&lt;/font&gt; delle collection) richiede il nome di una funzione senza parametri da lanciare in un thread separato; in questo caso noi gli passiamo un delegate anonimo costruendogli inline le istruzioni da eseguire, che lui riceve come delegate astratto:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeusaregliAnonymousDelegate_F61B/image_24.png" target="_blank"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="480" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeusaregliAnonymousDelegate_F61B/image_thumb_11.png" width="583" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Un'ultima cosa prima di concludere: nel paragrafo precedente menzionavo che le collection hanno un metodo &lt;font color="#0000ff"&gt;Find&lt;/font&gt; che, in un'unica istruzione, consente di estrarre l'elemento desiderato semplicemente passando a questa funzione la condizione di ricerca (che fa anche uscire dal ciclo); immaginate per esempio di avere una classe &lt;strong&gt;Cliente&lt;/strong&gt; (con un paio di metodi pubblici come nome e citt&amp;#224;) e una collezione di clienti (che chiamate &lt;strong&gt;Clienti&lt;/strong&gt;) definita con l'istruzione &lt;font color="#0000ff"&gt;List&amp;lt;Cilente&amp;gt; Clienti = new List&amp;lt;Cliente&amp;gt;(); &lt;/font&gt;Ora, per trovare il primo cliente della lista la cui citt&amp;#224; &amp;#232; Milano, possiamo scrivere la seguente singola istruzione:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;font color="#0000ff"&gt;Cliente cliente = Clienti.Find(&lt;u&gt;delegate (Cliente c) {return c.Citt&amp;#224;=&amp;quot;Milano&amp;quot;;}&lt;/u&gt;);&lt;/font&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Ebbene, la parte che ho sottolineato &amp;#232; proprio un delegate anonimo che prende in ingresso un parametro di classe &lt;font color="#0000ff"&gt;Cliente &lt;/font&gt;che viene passato alla funzione &lt;font color="#0000ff"&gt;Find&lt;/font&gt; che si aspetta un delegate astratto contenente l'istruzione di ricerca (quella fra parenti graffe).&lt;/p&gt;  &lt;p&gt;Ma c'&amp;#232; di pi&amp;#249;: il C# 3.0 che &amp;#232; parte di Visual Studio 2008 consente di ridurre ulteriormente l'istruzione sopra sfruttando le cosiddette &lt;strong&gt;LAMBDA EXPRESSION&lt;/strong&gt;: infatti potete ridurre il codice alla seguente istruzione, che significa esattamente la stessa cosa:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;font color="#0000ff"&gt;Cliente cliente = Clienti.Find(c =&amp;gt; c.Citt&amp;#224;=&amp;quot;Milano&amp;quot;);&lt;/font&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Mi rendo conto che l'argomento &amp;#232; un po' ostico, e probabilmente se non venite da esperienza di programmazione funzionale vi troverete un po' perplessi a valutare l'utilit&amp;#224; di comprimere il codice cos&amp;#236; tanto. Se vi pu&amp;#242; consolare, vi confermo che l'alternativa c'&amp;#232;, ovvero scirversi un bel ciclo &lt;font color="#0000ff"&gt;ForEach&lt;/font&gt; che si spazzoli tutti gli elementi della collezione; a quel punto per&amp;#242; perdereste il vantaggio di poter passare come parametro la funzione che contiene la condizione di ricerca, che dovrebbe essere sostituita per esempio da una stringa (di cui dovreste fare i parsing) oppure da una serie di parametri per valutare condizioni quali i record con le citt&amp;#224; che iniziano per una certa lettera, o quelli con il nome utente composto da due parole, o quelli con il nome utente uguale al nome della citt&amp;#224;... ovviamente questi sono esempi di pura teoria visto che ho creato per semplicit&amp;#224; una tabella con due soli campi stringa, ma vi possono dare un'idea del vantaggio di utilizzare funzioni generiche sfruttando gli anonymous delegate.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Se vi interessa approfondire l'argomento, io ho trovato ispirazione in &lt;a href="http://msdn.microsoft.com/msdnmag/issues/04/05/C20/" target="_blank"&gt;questo articolo&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Fatemi sapere se il post vi &amp;#232; piaciuto. Cordialit&amp;#224;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7211261" width="1" height="1"&gt;</content><author><name>europe\mauromi</name><uri>http://blogs.msdn.com/members/europe%5cmauromi.aspx</uri></author></entry><entry><title>Come accedere a SQL Mobile 3.5 da un'applicazione mobile</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/mauromi/archive/2008/01/22/come-accedere-a-sql-mobile-3-5-da-un-applicazione-mobile.aspx" /><id>http://blogs.msdn.com/mauromi/archive/2008/01/22/come-accedere-a-sql-mobile-3-5-da-un-applicazione-mobile.aspx</id><published>2008-01-22T17:01:48Z</published><updated>2008-01-22T17:01:48Z</updated><content type="html">&lt;p&gt;Dopo i primi post introduttivi sulla piattaforma Windows Mobile, necessari per approcciare questo argomento, in molti mi hanno chiesto di mostrare come creare nella pratica un'applicazione da zero. Oggi realizzeremo quindi un programma per Smartphone completo e funzionante basato su Compact Framework 3.5, Microsoft SQL Server Compact 3.5 e le classi legate al Pocket Outlook preistallato sul dispositivo, utilizzando la versione Professional di Visual Studio 2008.&lt;/p&gt;  &lt;p&gt;Inizieremo con la teoria, esaminando gli oggetti del Compact Framework 3.5 che consentono l'accesso a SQL Mobile; vi dar&amp;#242; poi un breve esempio di come creare le classi per accedere ad un database mobile vero (che potete scaricare dai link sotto riportati), quindi vi guider&amp;#242; a realizzare un esempio passo passo testandolo sull'emulatore incluso in Visual Studio 2008 o, se avete letto il mio &lt;a href="http://blogs.msdn.com/mauromi/archive/2008/01/18/come-stabilire-connessione-activesync-via-bluetooth-fra-dispositivo-mobile-e-pc.aspx" target="_blank"&gt;post sul collegamento bluetooth&lt;/a&gt;, anche su un dispositivo fisico. Se avete un minimo di basi tecniche sullo sviluppo .NET, e avete letto il mio post di &lt;a href="http://blogs.msdn.com/mauromi/archive/2007/08/29/sviluppo-per-dispositivi-mobili-passato-presente-e-futuro.aspx" target="_blank"&gt;introduzione alla piattaforma mobile&lt;/a&gt;, in meno di un'oretta sarete in grado di creare da soli la prossima applicazione. E allora, che cosa stiamo aspettando? Mettiamoci all'opera!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Iniziamo dalla definizione di &lt;b&gt;DataSet&lt;/b&gt;, valida in generale con ADO.NET: tale oggetto rappresenta un insieme di viste -chiamate &lt;strong&gt;DataTable&lt;/strong&gt;- associate al nome del DataSet. Per esempio, un DataSet potrebbe chiamarsi &lt;font color="#0000ff"&gt;ANAGRAFICA&lt;/font&gt; e contenere una vista relativa all'anagrafica clienti (chiamata &lt;font color="#0000ff"&gt;CLIENTI&lt;/font&gt;), una dei fornitori (&lt;font color="#0000ff"&gt;FORNITORI&lt;/font&gt;) e una per i dipendenti (&lt;font color="#0000ff"&gt;DIPENDENTI&lt;/font&gt;). Nell'esempio che segue avremo un dataset &lt;font color="#0000ff"&gt;OrdersDataSet&lt;/font&gt; contentente una singola vista chiamata &lt;font color="#0000ff"&gt;Inventory&lt;/font&gt;.&lt;/p&gt;  &lt;p&gt;Nota: in questa esposizione, &lt;font color="#0000ff"&gt;i caratteri evdienziati in blu &lt;/font&gt;rappresentano i nomi scelti dallo sviluppatore assegnati agli oggetti, mentre &lt;font color="#ff0000"&gt;la parte in rosso&lt;/font&gt; &amp;#232; quella aggiunta da Visual Studio. &lt;strong&gt;In grassetto&lt;/strong&gt; sono invece indicate le keyword della class library e del linguaggio C#.&lt;/p&gt;  &lt;p&gt;Quando si crea un &lt;strong&gt;DataSet&lt;/strong&gt; (&lt;font color="#0000ff"&gt;NomeDataset&lt;/font&gt;) contenente una &lt;strong&gt;DataTable&lt;/strong&gt; (&lt;font color="#0000ff"&gt;NomeVista&lt;/font&gt;) utilizzando il Visual Studio 2008, viene generato in particolare un file &lt;font color="#0000ff"&gt;NomeDataset&lt;/font&gt;&lt;font color="#ff0000"&gt;.XSD&lt;/font&gt; che rappresenta il dataset in formato XML &amp;#8211;che il designer mostra in formato grafico- e in pi&amp;#249; il file &lt;font color="#0000ff"&gt;NomeDataset&lt;/font&gt;&lt;font color="#ff0000"&gt;.Designer.cs&lt;/font&gt; che contiene, fra altro, la definizione delle seguenti quattro classi:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;La classe &lt;font color="#0000ff"&gt;NomeDataset&lt;/font&gt;, che rappresenta appunto il dataset &lt;/li&gt;    &lt;li&gt;Le seguenti classi figlie di &lt;font color="#0000ff"&gt;NomeDataset&lt;/font&gt;:       &lt;ul&gt;       &lt;li&gt;&lt;font color="#0000ff"&gt;NomeVista&lt;/font&gt;&lt;font color="#ff0000"&gt;DataTable&lt;/font&gt;, che rappresenta la vista all&amp;#8217;interno del dataset &lt;/li&gt;        &lt;li&gt;&lt;font color="#0000ff"&gt;NomeVista&lt;/font&gt;&lt;font color="#ff0000"&gt;Row&lt;/font&gt;, che rappresenta un record di &lt;font color="#0000ff"&gt;NomeVista&lt;/font&gt;&lt;font color="#ff0000"&gt;DataTable&lt;/font&gt; &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;font color="#0000ff"&gt;NomeVista&lt;/font&gt;&lt;font color="#ff0000"&gt;TableAdapter&lt;/font&gt;, che indica come la vista &amp;#232; riempita dalla sorgente dati. Quindi un TableAdapter contiene principalmente:       &lt;ul&gt;       &lt;li&gt;La stringa di connessione &lt;/li&gt;        &lt;li&gt;I comandi per &lt;b&gt;SELECT&lt;/b&gt;, &lt;b&gt;INSERT&lt;/b&gt;, &lt;b&gt;UPDATE&lt;/b&gt;, &lt;b&gt;DELETE&lt;/b&gt; &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Le due classi &lt;font color="#0000ff"&gt;NomeVista&lt;/font&gt;&lt;font color="#ff0000"&gt;DataTable &lt;/font&gt;e &lt;font color="#0000ff"&gt;NomeVista&lt;/font&gt;&lt;font color="#ff0000"&gt;Row &lt;/font&gt;sono fortemente tipizzate e rappresentano i dettagli della vista definita nel DataSet; possono quindi essere usate nel codice sfruttando le propriet&amp;#224; che si mappano 1:1 sui campi della vista corrispondente; in altre parole, per ogni campo della vista &lt;font color="#0000ff"&gt;NomeVista &lt;/font&gt;esiste una corrispondente propriet&amp;#224; nell&amp;#8217;oggetto &lt;font color="#0000ff"&gt;NomeVista&lt;/font&gt;&lt;font color="#ff0000"&gt;Row&lt;/font&gt;.&lt;/p&gt;  &lt;p&gt;Un&amp;#8217;applicazione mobile che deve leggere i record di un datatable utilizza gli oggetti DataSet e TableAdapter spiegati sopra; in pi&amp;#249;, deve creare un oggetto &lt;strong&gt;BindingSource&lt;/strong&gt;, che serve a eseguire le operazioni di spostamento, conteggio dei record, calcolo della posizione, recupero del record corrente etc. Tale oggetto contiene, fra gli altri, anche l&amp;#8217;evento &lt;strong&gt;CurrentChanged&lt;/strong&gt; che viene richiamato ogni volta che ci si sposta di record in record. La creazione dell&amp;#8217;oggetto &lt;strong&gt;BindingSource&lt;/strong&gt; e relativa configurazione con &lt;strong&gt;DataSet&lt;/strong&gt; e &lt;strong&gt;TableAdapter&lt;/strong&gt; pu&amp;#242; essere effettuata automaticamente dal Visual Studio se trascinate sulla form un campo (o un&amp;#8217;intera tabella) prendendola dalla finestra &amp;#8220;Data Sources&amp;#8221;; by default, l&amp;#8217;oggetto cos&amp;#236; creato si chiamer&amp;#224; &lt;font color="#0000ff"&gt;NomeVista&lt;/font&gt;&lt;font color="#ff0000"&gt;BindingSource&lt;/font&gt;, di tipo &lt;strong&gt;BindingSource&lt;/strong&gt;, che contiene anche l&amp;#8217;evento &lt;font color="#ff0000"&gt;&lt;font color="#0000ff"&gt;NomeVista&lt;/font&gt;BindingSource_CurrentChanged&lt;/font&gt; che viene richiamato ogni volta che un record viene mostrato sulla form.&lt;/p&gt;  &lt;h2&gt;&lt;b&gt;&lt;u&gt;Esempio &lt;/u&gt;&lt;/b&gt;&lt;/h2&gt;  &lt;p&gt;Prendiamo un database di tipo Microsoft SQL Server Compact 3.5 chiamato &lt;font color="#0000ff"&gt;&lt;a href="http://maurominella.members.winisp.net/mobility/Orders.zip" target="_blank"&gt;Orders.sdf&lt;/a&gt;&lt;/font&gt;, che contiene la tabella &lt;font color="#0000ff"&gt;Inventory&lt;/font&gt;. Creiamo un &lt;strong&gt;data source&lt;/strong&gt; (che chiamiamo &lt;font color="#0000ff"&gt;OrdersDataSet&lt;/font&gt;) di tipo Microsoft SQL Server Compact 3.5, leghiamolo a &lt;font color="#0000ff"&gt;Orders.sdf &lt;/font&gt;e includiamo &lt;font color="#0000ff"&gt;Inventory &lt;/font&gt;nella configurazione del DataSource. Se eseguiamo questa operazione utilizzando il menu &lt;strong&gt;Data &amp;#8211; Add New Data Source...&lt;/strong&gt;, il VS 2008 crea automaticamente le seguenti classi nel file &lt;font color="#ff0000"&gt;&lt;font color="#0000ff"&gt;OrdersDataSet&lt;/font&gt;.Designer.cs&lt;/font&gt;:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;classe &lt;font color="#ff0000"&gt;&lt;font color="#0000ff"&gt;OrdersDataSet&lt;/font&gt;&lt;/font&gt;       &lt;ul&gt;       &lt;li&gt;classe &lt;font color="#ff0000"&gt;&lt;font color="#0000ff"&gt;OrdersDataSet&lt;/font&gt;&lt;/font&gt;.&lt;font color="#0000ff"&gt;Inventory&lt;/font&gt;&lt;font color="#ff0000"&gt;DataTable&lt;/font&gt; &lt;/li&gt;        &lt;li&gt;classe &lt;font color="#ff0000"&gt;&lt;font color="#0000ff"&gt;OrdersDataSet&lt;/font&gt;&lt;/font&gt;.&lt;font color="#0000ff"&gt;Inventory&lt;/font&gt;&lt;font color="#ff0000"&gt;Row&lt;/font&gt; &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;classe &lt;font color="#0000ff"&gt;Inventory&lt;/font&gt;&lt;font color="#ff0000"&gt;BindingSource&lt;/font&gt; &lt;/li&gt;    &lt;li&gt;classe &lt;font color="#0000ff"&gt;Inventory&lt;/font&gt;&lt;font color="#ff0000"&gt;TableAdapter&lt;/font&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;La propriet&amp;#224; &lt;strong&gt;Current&lt;/strong&gt; di &lt;font color="#0000ff"&gt;Inventory&lt;/font&gt;&lt;font color="#ff0000"&gt;BindingSource &lt;/font&gt;mantiene un riferimento ad un oggetto &lt;strong&gt;DataRowView&lt;/strong&gt; che corrisponde alla riga mostrata; in pratica, rappresenta un record di una tabella e come tale pu&amp;#242; essere utilizzato attraverso le sue propriet&amp;#224; per essere cancellato, modificato, letto etc. &lt;/p&gt;  &lt;p&gt;&lt;u&gt;Ma in particolare la sua propriet&amp;#224; &lt;strong&gt;Row&lt;/strong&gt; &amp;#232; un oggetto di tipo &lt;font color="#ff0000"&gt;&lt;font color="#0000ff"&gt;OrdersDataSet&lt;/font&gt;&lt;/font&gt;.&lt;font color="#0000ff"&gt;Inventory&lt;/font&gt;&lt;font color="#ff0000"&gt;Row&lt;/font&gt;&lt;/u&gt;. &lt;/p&gt;  &lt;p&gt;Ci&amp;#242; significa che posso dichiarare un oggetto di tipo &lt;font color="#ff0000"&gt;&lt;font color="#0000ff"&gt;OrdersDataSet&lt;/font&gt;&lt;/font&gt;.&lt;font color="#0000ff"&gt;Inventory&lt;/font&gt;&lt;font color="#ff0000"&gt;Row &lt;/font&gt;e poi assegnargli &lt;font color="#0000ff"&gt;Inventory&lt;/font&gt;&lt;font color="#ff0000"&gt;BindingSource&lt;/font&gt;&lt;strong&gt;.Current.Row&lt;/strong&gt;; poich&amp;#233; per&amp;#242; &lt;strong&gt;Current&lt;/strong&gt; &amp;#232; di tipo &lt;strong&gt;Object&lt;/strong&gt;, devo fare due cast:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;font color="#0000ff" size="2"&gt;DataRowView rowView = (DataRowView) InventoryBindingSource.Current;&lt;/font&gt; &lt;/li&gt;    &lt;li&gt;&lt;font color="#0000ff" size="2"&gt;OrdersDataSet.InventoryRow row = (OrdersDataSet.InventoryRow) rowView.Row;&lt;/font&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;A dimostrazione del fatto che le classi create dal designer sono fortemente tipizzate, si noti che il campo &lt;font color="#0000ff"&gt;ImageFileName&lt;/font&gt; (di tipo stringa) della tabella &lt;font color="#0000ff"&gt;Inventory &lt;/font&gt;&amp;#232; rappresentato da &lt;font color="#0000ff"&gt;row&lt;b&gt;.&lt;/b&gt;ImageFileName&lt;/font&gt;, e per esempio pu&amp;#242; essere utilizzato per creare e mostrare l&amp;#8217;immagine in un oggetto di tipo &lt;strong&gt;PictureBox&lt;/strong&gt; chiamato &lt;font color="#0000ff"&gt;MyPictureBox&lt;/font&gt; che posizioniamo sulla form:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;font color="#0000ff"&gt;MyPictureBox.Image = new Bitmap(row.ImageFileName)&lt;/font&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;&lt;b&gt;&lt;u&gt;Step by Step &lt;/u&gt;&lt;/b&gt;&lt;/h2&gt;  &lt;p&gt;Lanciamo il Visual Studio 2008 Porfessional (le versioni Express non includono la parte di sviluppo mobile) e creiamo un nuovo progetto di tipo Smart Device chiamato &lt;font color="#0000ff"&gt;OrderManager&lt;/font&gt;, basato sul Compact Framework 3.5, il C#, piattaforma Windows Mobile 5 per Smartphone e template per Device Application; in altre parole, stiamo creando un&amp;#8217;applicazione finestra da far girare su uno Smartphone che monta il Compact Framework 3.5:&lt;a href="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeaccedereaSQL.5daunapplicazionemobile_A209/image_2.png" target="_blank"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="251" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeaccedereaSQL.5daunapplicazionemobile_A209/image_thumb.png" width="373" border="0" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeaccedereaSQL.5daunapplicazionemobile_A209/image_4.png" target="_blank"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="284" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeaccedereaSQL.5daunapplicazionemobile_A209/image_thumb_1.png" width="377" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Scarichiamo il file di database &lt;a href="http://maurominella.members.winisp.net/mobility/Orders.zip" target="_blank"&gt;Orders.sdf&lt;/a&gt; di tipo SQL Server Compact 3.5, che mettiamo in una cartella temporanea.&lt;/p&gt;  &lt;p&gt;Dal menu Data, aggiungiamo un nuovo data source e leghiamolo al database scaricato al punto precedente creando una nuova connessione: &lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="87" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeaccedereaSQL.5daunapplicazionemobile_A209/image_7.png" width="429" border="0" /&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="175" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeaccedereaSQL.5daunapplicazionemobile_A209/image_16.png" width="211" border="0" /&gt;&amp;#160;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="178" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeaccedereaSQL.5daunapplicazionemobile_A209/image_15.png" width="310" border="0" /&gt;&lt;/p&gt;  &lt;p&gt;Rispondete s&amp;#236; alla domanda che chiede di includerlo nel progetto:    &lt;br /&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeaccedereaSQL.5daunapplicazionemobile_A209/image_18.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="155" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeaccedereaSQL.5daunapplicazionemobile_A209/image_thumb_6.png" width="394" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Scegliete di includere la tabella &lt;font color="#0000ff"&gt;Inventory&lt;/font&gt; -che &amp;#232; anche l'unica- e chiamate &lt;font color="#0000ff"&gt;OrdersDataSet&lt;/font&gt; il &lt;strong&gt;DataSet&lt;/strong&gt; cos&amp;#236; creato:     &lt;br /&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="402" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeaccedereaSQL.5daunapplicazionemobile_A209/image_14.png" width="519" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;Ora prendiamo la form, dove &amp;#232; rappresentato in anteprima il device su cui verr&amp;#224; installata la vostra applicazione, e creiamo i menu &lt;font color="#0000ff"&gt;Avanti&lt;/font&gt; e &lt;font color="#0000ff"&gt;Uscita&lt;/font&gt;; non vi indico i passi dettagliati perch&amp;#233; sono veramente banali per chi ha una minima esperienza di utilizzo del Visual Studio; per tutti i dettagli potete comunque consultare &lt;a href="http://msdn2.microsoft.com/en-us/library/aa454889.aspx" target="_blank"&gt;questo articolo&lt;/a&gt;:     &lt;br /&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="331" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeaccedereaSQL.5daunapplicazionemobile_A209/image_21.png" width="220" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;Togliamoci subito il pensiero e implementiamo la risposta al menu di uscita; chiamatelo per esempio menuUscita poi fate doppio click su di esso e scrive questa singola istruzione:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font color="#0000ff"&gt;private void menuUscita_Click(object sender, EventArgs e)        &lt;br /&gt;{         &lt;br /&gt;&amp;#160;&amp;#160; Application.Exit();         &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Ora dal menu &lt;strong&gt;Data&lt;/strong&gt; scegliete &lt;strong&gt;Show Data Sources&lt;/strong&gt; e poi selezionate &lt;strong&gt;Details&lt;/strong&gt; dalla lista a discesa:     &lt;br /&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeaccedereaSQL.5daunapplicazionemobile_A209/image_23.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="162" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeaccedereaSQL.5daunapplicazionemobile_A209/image_thumb_8.png" width="195" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Tale scelta far&amp;#224; in modo che trascinando la tabella Inventory sulla form, verranno creati tante &lt;strong&gt;TextBox&lt;/strong&gt; quanti sono i (quattro) campi della tabella; si noti che oltre alle &lt;strong&gt;TextBox&lt;/strong&gt;, nella parte inferiore della form vengono creati (e automaticamente configurati) anche gli oggetti che servono a estrarre i dati, ovvero il &lt;strong&gt;DataSet&lt;/strong&gt; (&lt;font color="#0000ff"&gt;ordersDataSet&lt;/font&gt;),&amp;#160; il &lt;strong&gt;BindingSource&lt;/strong&gt; (&lt;font color="#0000ff"&gt;inventory&lt;/font&gt;&lt;font color="#ff0000"&gt;BindingSource&lt;/font&gt;) e il &lt;strong&gt;TableAdapter&lt;/strong&gt; (inventory&lt;font color="#ff0000"&gt;TableAdapter&lt;/font&gt;), come avevo anticipato nella sezione &lt;strong&gt;Esempio&lt;/strong&gt; di questo post:     &lt;br /&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="469" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeaccedereaSQL.5daunapplicazionemobile_A209/image_26.png" width="498" border="0" /&gt;&lt;/p&gt;  &lt;p&gt;Ora rispondiamo alla pressione del tasto &lt;font color="#0000ff"&gt;Avanti&lt;/font&gt;: fate doppio click sul menu e scrivete questa istruzione che incrementa il puntatore di uno, sfruttando anche l'operatore modulo (%) per consentire di ritornare al primo record se si preme Avanti quando ci si trova sull'ultimo record:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font color="#0000ff"&gt;private void menuAvanti_Click(object sender, EventArgs e)        &lt;br /&gt;{         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; inventoryBindingSource.Position = (inventoryBindingSource.Position + 1)         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; % inventoryBindingSource.Count;         &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Vogliamo prenderci un po' di soddisfazione e provare l'applicazione? Premete F5 e selezionate l'emulatore per Windows Mobile 5; potrebbe volerci anche qualche minuto se la vostra immagine &amp;#232; pulita perch&amp;#233; nel caso il Visual Studio deve installare prima il Compact Framework 3.5:    &lt;br /&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="286" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeaccedereaSQL.5daunapplicazionemobile_A209/image_59.png" width="451" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;Se tutto va come deve, ecco comparire la vostra applicazione; verificate il funzionamento premendo il tasto Avanti e, alla fine, il tasto di uscita:    &lt;br /&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="492" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeaccedereaSQL.5daunapplicazionemobile_A209/image_31.png" width="221" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;Che cosa possiamo aggiungere adesso? Beh, io direi che sarebbe meglio vedere le immagini che rappresentano i prodotti, piuttosto che leggerne solamente il nome del file, voi che ne dite? Allora, avanti...&lt;/p&gt;  &lt;p&gt;Chiudete l'applicazione utilizzando il menu di uscita, ma lasciate attivo l'emulatore: risparmieremo cos&amp;#236; il tempo necessario a installare nuovamente il compact framework.&lt;/p&gt;  &lt;p&gt;La prossima operazione consiste nel copiare nel dispositivo &lt;a href="http://maurominella.members.winisp.net/mobility/images.zip" target="_blank"&gt;le immagini da mostrare&lt;/a&gt;; esse infatti non risiedono nel database; per accedere al &amp;quot;disco&amp;quot; del dispositivo si pu&amp;#242; procedere in vari modi, io vi suggerisco di stabilire una connessione via ActiveSynch verificando che le impostazioni del Windows Mobile Device Center prevedano l'ascolto sulla porta DMA (che &amp;#232; quella attraverso cui comunica l'emulatore):     &lt;br /&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeaccedereaSQL.5daunapplicazionemobile_A209/image_33.png" target="_blank"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="293" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeaccedereaSQL.5daunapplicazionemobile_A209/image_thumb_12.png" width="387" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;A questo punto, in Visual Studio lanciate il Device Emulator Manager:    &lt;br /&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="96" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeaccedereaSQL.5daunapplicazionemobile_A209/image_38.png" width="513" border="0" /&gt;&lt;/p&gt;  &lt;p&gt;Localizzate l'immagine dell'emulatore che avete ancora in esecuzione in background e dal menu contestuale scegliete &lt;strong&gt;Cradle&lt;/strong&gt;; tale operazione simula il collegamento fisico del dispositivo al PC e fa partire l'ActiveSync:&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="383" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeaccedereaSQL.5daunapplicazionemobile_A209/image_41.png" width="479" border="0" /&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;Dall'interno del Mobile Device Center scegliete &amp;quot;Browse the content of your device&amp;quot;:    &lt;br /&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="349" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeaccedereaSQL.5daunapplicazionemobile_A209/image_44.png" width="463" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;Ora con una semplice operazione di Drag&amp;amp;Drop copiate la cartella &lt;a href="http://maurominella.members.winisp.net/mobility/images.zip" target="_blank"&gt;images&lt;/a&gt; dentro la root del dispositivo.&lt;/p&gt;  &lt;p&gt;Bene: le immagini JPG ci sono. Ora dobbiamo solamente mostrarle ;-).&lt;/p&gt;  &lt;p&gt;Riprendiamo la form, cancelliamo tutte le label tranne &lt;font color="#0000ff"&gt;Price&lt;/font&gt; ed eliminiamo pure la &lt;strong&gt;TextBox&lt;/strong&gt; che mostra il nome di file; infine trasciniamo nella form dalla barra degli strumenti un oggetto di tipo &lt;strong&gt;PictureBox&lt;/strong&gt; (che chiamiamo &lt;font color="#0000ff"&gt;myPicture&lt;/font&gt;) e impostiamone la propriet&amp;#224; &lt;strong&gt;SizeMode&lt;/strong&gt; a &lt;strong&gt;StretchImage&lt;/strong&gt;:     &lt;br /&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="355" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeaccedereaSQL.5daunapplicazionemobile_A209/image_60.png" width="429" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;Vi ricordate quando all'inizio dicevo che l'oggetto &lt;strong&gt;BindingSource &lt;/strong&gt;ha un metodo &lt;strong&gt;CurrentChanged&lt;/strong&gt; che viene richiamato ogni volta che ci si sposta di record in record? E' arrivato il momento di usarlo: fate doppio click su &lt;font color="#0000ff"&gt;Inventory&lt;/font&gt;&lt;font color="#ff0000"&gt;BindingSource&lt;/font&gt; nella parte bassa della finestra Form1.cs ed inserite queste quattro istruzioni:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font color="#0000ff"&gt;DataRowView rowView = (DataRowView)inventoryBindingSource.Current;        &lt;br /&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#0000ff"&gt;OrdersDataSet.InventoryRow row =        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; (OrdersDataSet.InventoryRow)rowView.Row; &lt;/font&gt;&lt;/p&gt;   &lt;font color="#0000ff"&gt;     &lt;p&gt;       &lt;br /&gt;Bitmap myBitmap = new Bitmap(row.ImageFilename);         &lt;br /&gt;&lt;/p&gt;      &lt;p&gt;myPicture.Image = myBitmap; &lt;/p&gt;   &lt;/font&gt;&lt;/blockquote&gt;  &lt;p&gt;Come avevo anticipato sopra nella sezione &lt;strong&gt;Esempio&lt;/strong&gt;, la propriet&amp;#224; &lt;strong&gt;Current&lt;/strong&gt; di &lt;font color="#0000ff"&gt;Inventory&lt;/font&gt;&lt;font color="#ff0000"&gt;BindingSource &lt;/font&gt;mantiene un riferimento ad un oggetto &lt;strong&gt;DataRowView&lt;/strong&gt; che corrisponde alla riga mostrata. Tale oggetto pu&amp;#242; essere utilizzato attraverso le sue propriet&amp;#224; per essere cancellato, modificato, letto etc. &lt;u&gt;Ma in particolare la sua propriet&amp;#224; &lt;strong&gt;Row&lt;/strong&gt; &amp;#232; un oggetto di tipo &lt;font color="#ff0000"&gt;&lt;font color="#0000ff"&gt;OrdersDataSet&lt;/font&gt;&lt;/font&gt;.&lt;font color="#0000ff"&gt;Inventory&lt;/font&gt;&lt;font color="#ff0000"&gt;Row&lt;/font&gt;&lt;/u&gt;. Ci&amp;#242; significa che posso dichiarare un oggetto di tipo &lt;font color="#ff0000"&gt;&lt;font color="#0000ff"&gt;OrdersDataSet&lt;/font&gt;&lt;/font&gt;.&lt;font color="#0000ff"&gt;Inventory&lt;/font&gt;&lt;font color="#ff0000"&gt;Row &lt;/font&gt;e poi assegnargli &lt;font color="#0000ff"&gt;Inventory&lt;/font&gt;&lt;font color="#ff0000"&gt;BindingSource&lt;/font&gt;&lt;strong&gt;.Current.Row&lt;/strong&gt;; poich&amp;#233; per&amp;#242; &lt;strong&gt;Current&lt;/strong&gt; &amp;#232; di tipo &lt;strong&gt;Object&lt;/strong&gt;, ho dobuto effettuare due cast.&lt;/p&gt;  &lt;p&gt;Che altro possiamo fare per complicarci la vita e rendere questa applicazione ancora pi&amp;#249; interessante? Che ne dite, potremmo aggiungere una funzione che invia la bitmap per mail utilizzando Pocket Outlook dello Smartphone... Avanti allora.&lt;/p&gt;  &lt;p&gt;Inannzi tutto, aggiungiamo i riferimenti agli assembly che gestiscono il &lt;strong&gt;Contact Picker&lt;/strong&gt;, che &amp;#232; l'oggetto del Compact Framework che fornisce un facile accesso alla lista dei contatti; prendete il menu contestuale della cartella &lt;strong&gt;References&lt;/strong&gt;, selezionate &lt;strong&gt;Microsoft.WindowsMobile.Forms&lt;/strong&gt; e &lt;strong&gt;Microsoft.WindowsMobile.PocketOutlook&lt;/strong&gt; e premete OK:&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="417" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeaccedereaSQL.5daunapplicazionemobile_A209/image_49.png" width="494" border="0" /&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;A proposito: se state facendo il deployment sull'emulatore, allora non vi sono contatti definiti, createne quindi un paio di prova. Spero non ci sia bisogno di istruzioni per questo... ;-)&lt;/p&gt;  &lt;p&gt;Adesso aggiungete la dichiarazione Using all'inizio del file Form1.cs:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font color="#0000ff"&gt;using Microsoft.WindowsMobile.Forms;        &lt;br /&gt;using Microsoft.WindowsMobile.PocketOutlook;&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Ora aggiungiamo una voce &amp;quot;Invia&amp;quot; al Menu di destra, facciamo doppio click su di essa e inseriamo le istruzioni per recuperare le informazioni da inserire nel messaggio:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;prima creiamo un'istanza dell'oggetto ChooseContactDialog che chiamiamo contactPicker:      &lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;#160;&amp;#160; ChooseContactDialog contactPicker = new ChooseContactDialog();&lt;/font&gt; &lt;/li&gt;    &lt;li&gt;poi facciamo comparire la finestra di richiesta di selezione contatto e verifichiamo se ne &amp;#232; stato selezionato uno:      &lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;#160;&amp;#160; if (contactPicker.ShowDialog() == DialogResult.OK) { }&lt;/font&gt; &lt;/li&gt;    &lt;li&gt;adesso, all'interno delle parentesi graffe al punto precedente, scriviamo le istruzioni per creare il messaggio e spedirlo con allegata la bitmap; a questo scopo dichiariamo una variabile chiamata &lt;font color="#ff0000"&gt;rowView&lt;/font&gt; di tipo &lt;strong&gt;DataRowView&lt;/strong&gt; e le assegnamo il valore della propriet&amp;#224; &lt;strong&gt;Current&lt;/strong&gt; di &lt;font color="#ff0000"&gt;inventory&lt;/font&gt;&lt;font color="#0000ff"&gt;BindingSource&lt;/font&gt;; notate che i passi sono molto simili a quelli utilizzati in precedenza per creare la bitmap:       &lt;br /&gt;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;DataRowView rowView = (DataRowView)inventoryBindingSource.Current;&lt;/font&gt; &lt;/li&gt;    &lt;li&gt;Infine creiamo la variabile &lt;font color="#ff0000"&gt;selectedProduct &lt;/font&gt;di tipo &lt;font color="#ff0000"&gt;&lt;font color="#0000ff"&gt;OrdersDataSet&lt;/font&gt;&lt;/font&gt;.&lt;font color="#0000ff"&gt;Inventory&lt;/font&gt;&lt;font color="#ff0000"&gt;Row&lt;/font&gt; e assegnamole il valore di &lt;font color="#ff0000"&gt;rowView&lt;/font&gt;&lt;font color="#000000"&gt;:        &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;#160;&amp;#160; OrdersDataSet.InventoryRow row = (OrdersDataSet.InventoryRow)rowView.Row;&lt;/font&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Adesso che abbiamo recuperato le informazioni da spedire, creiamo il messaggio di posta; a questo scopo dichiariamo un oggetto message di tipo &lt;strong&gt;EmailMessage&lt;/strong&gt; e gli associamo i classici campi oggetto, corpo, destinatario e allegato:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font color="#0000ff"&gt;EmailMessage message = new EmailMessage();        &lt;br /&gt;message.Subject = &amp;quot;The picture you requested&amp;quot;;         &lt;br /&gt;message.BodyText = &amp;quot;Attached is the picture we discussed&amp;quot;; &lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#0000ff"&gt;Recipient client =        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; new Recipient(contactPicker.SelectedContact.Email1Address);         &lt;br /&gt;message.To.Add(client); &lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#0000ff"&gt;Attachment attachedImage = new Attachment(row.ImageFilename);        &lt;br /&gt;message.Attachments.Add(attachedImage); &lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Da ultimo, spediamo il messaggio con l'istruzione &lt;strong&gt;Send&lt;/strong&gt;; questo metodo richiede il nome dell'account di email da cui spedire, quindi se state usando l'emulatore via ActiveSync scrivete &lt;font color="#ff0000"&gt;ActiveSync&lt;/font&gt; come nell'istruzione che segue:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font color="#0000ff"&gt;message.Send(&amp;quot;ActiveSync&amp;quot;);&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Abbiamo terminato: verificate di avere almeno un contatto con indirizzo di e-mail valido ed eseguite l'applicazione. Per testarla uscite dall'applicazione, lanciate Pocket Outlook e verificate che il messaggio si trovi in posta in uscita:    &lt;br /&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="693" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComeaccedereaSQL.5daunapplicazionemobile_A209/image_58.png" width="313" border="0" /&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;That's all folks. &lt;a href="http://maurominella.members.winisp.net/mobility/OrderManager.zip" target="_blank"&gt;Qui trovate i sorgenti completi&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Mi scuso per il post un po' lungo, ma spero vi siate divertiti e lo abbiate trovato abbastanza chiaro. Lasciate pure i vostri commenti qui sotto, risponder&amp;#242; a tutti. Grazie dell'attenzione, vi auguro buon lavoro. Alla prossima.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7198571" width="1" height="1"&gt;</content><author><name>europe\mauromi</name><uri>http://blogs.msdn.com/members/europe%5cmauromi.aspx</uri></author></entry><entry><title>Come stabilire connessione ActiveSync via Bluetooth fra dispositivo mobile e PC</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/mauromi/archive/2008/01/18/come-stabilire-connessione-activesync-via-bluetooth-fra-dispositivo-mobile-e-pc.aspx" /><id>http://blogs.msdn.com/mauromi/archive/2008/01/18/come-stabilire-connessione-activesync-via-bluetooth-fra-dispositivo-mobile-e-pc.aspx</id><published>2008-01-18T18:17:00Z</published><updated>2008-01-18T18:17:00Z</updated><content type="html">&lt;p&gt;Per stabilire una connessione Activesync fra un dispositivo mobile su cui &amp;#232; montato un sistema operativo Microsoft -come Pocket PC, Smartphone o Windows Mobile-, tipicamente si utilizza un normale cavetto USB; rispetto ad altri tipi di collegamento, infatti, questa scelta risulta pi&amp;#249; affidabile, pi&amp;#249; veloce e pi&amp;#249; pratica.&lt;/p&gt;  &lt;p&gt;Tuttavia, &amp;#232; previsto poter anche effettuare il collegamento sfruttando il Bluetooth, a patto ovviamente che sia il dispositivo mobile che il PC siano dotati di questa interfaccia.&lt;/p&gt;  &lt;p&gt;Nonostante i passi da seguire non siano in teoria particolarmente complessi, vi confesso che ho dovuto faticare non poco per poter raggiungere il risultato; ho pensato fosse utile quindi riassumere la procedura da seguire.&lt;/p&gt;  &lt;p&gt;Nota: questa esposizione si basa sui componenti hardware e software elencati di seguito; potrebbe risultare lievemente differente utilizzandone altri o diverse versioni, per questo motivo ho cercato di spiegare nel dettaglio che cosa produce ogni singolo passaggio:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Computer: Notebook Port&amp;#233;ge M400 con sistema operativo Windows Vista Ultimate      &lt;br /&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="240" alt="portegem400" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/portegem400_3.jpg" width="240" border="0" mce_src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/portegem400_3.jpg" /&gt; &lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="240" alt="vistaultimate" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/vistaultimate_3.jpg" width="218" border="0" mce_src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/vistaultimate_3.jpg" /&gt; &lt;/li&gt;    &lt;li&gt;Dispositivo mobile: I-Mate Smartphone SP5 con sistema operativo Windows Mobile 5      &lt;br /&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="240" alt="imatesp5" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/imatesp5_3.jpg" width="103" border="0" mce_src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/imatesp5_3.jpg" /&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Iniziamo con la configurazione del sistema operativo sul notebook; Windows Vista Ultimate arriva gi&amp;#224; con pre-installato il Windows Mobile Device Center (Centro Gestione Dispositivi Windows Mobile per chi ha la versione italiana). Tuttavia, suggerisco in ogni caso di aggiornarlo scaricando dal nostro sito &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=46f72df1-e46a-4a5f-a791-09f07aaa1914&amp;amp;DisplayLang=it" target="_blank" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=46f72df1-e46a-4a5f-a791-09f07aaa1914&amp;amp;DisplayLang=it"&gt;la versione 6.1&lt;/a&gt;; &amp;#232; disponibile in diverse lingue fra cui l&amp;#8217;italiano, e c&amp;#8217;&amp;#232; anche a 64 bit.&lt;/p&gt;  &lt;p&gt;Lato Smartphone, attiviamo il Bluetooth:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Communication Manager - Bluetooth - Attivato (o Raggiungibile)      &lt;br /&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/image_15.png" width="184" border="0" mce_src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/image_15.png" /&gt; &lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/image_16.png" width="184" border="0" mce_src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/image_16.png" /&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Lato PC, dopo avere aggiornato o installato il Gestione Dispositivi Windows Mobile e verificato di avere l'ultima versione dello Stack Bluetooth (che per il PC in oggetto si chiama &amp;quot;v51012T_20070531.EXE&amp;quot; e si trova sul sito di supporto tecnico del produttore), occorre per prima cosa verificare che sto stack Bluetooth stia eseguendo il servizio di emulazione delle porte seriali; nel mio caso si procede facendo click con il tasto destro sull'icona Bluetooth della system tray area e impostando la casella apposita nel menu opzioni, oltre alla richiesta di autenticazione e della crittografia disponibile nel tab &amp;quot;Sicurezza&amp;quot;:    &lt;br /&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/impostazionibluetooth_2.jpg" target="_blank" mce_href="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/impostazionibluetooth_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="414" alt="impostazionibluetooth" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/impostazionibluetooth_thumb.jpg" width="498" border="0" mce_src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/impostazionibluetooth_thumb.jpg" /&gt;&lt;/a&gt;     &lt;br /&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="612" alt="sicurezza" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/sicurezza_3.jpg" width="497" border="0" mce_src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/sicurezza_3.jpg" /&gt; &lt;/p&gt;  &lt;p&gt;A questo punto aggiungete una porta COM virtuale bluetooth che resti in ascolto sulle connessioni in ingresso; nel mio caso ho trovato libera la COM6:&lt;a href="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/addComPort_2.jpg" target="_blank" mce_href="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/addComPort_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="249" alt="addComPort" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/addComPort_thumb.jpg" width="528" border="0" mce_src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/addComPort_thumb.jpg" /&gt;&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/addComPort-2_6.jpg" target="_blank" mce_href="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/addComPort-2_6.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="226" alt="addComPort-2" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/addComPort-2_thumb_2.jpg" width="531" border="0" mce_src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/addComPort-2_thumb_2.jpg" /&gt;&lt;/a&gt;&amp;#160;&amp;#160; &lt;br /&gt;Ora bisogna impostare il sistema operativo perch&amp;#233; attivi autoamticamente il Windows Mobile Center quando viene stabilita la connessione: aprite dunque l'applet dal pannello di controllo e, nelle impostazioni di connessione, settate questi parametri; ovviamente, fondamentale &amp;#232; il numero di porta che se avete scelto diversa da COM6 dovete cambiare di conseguenza:     &lt;br /&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/addComPort-3_2.jpg" target="_blank" mce_href="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/addComPort-3_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="432" alt="addComPort-3" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/addComPort-3_thumb.jpg" width="475" border="0" mce_src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/addComPort-3_thumb.jpg" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Torniamo sullo smartphone: lanciate l'ActiveSync dal menu Start, quindi dal Menu sulla destra scegliete l'opzione 7 (Connetti tramite Bluetooth):    &lt;br /&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/image_18.png" width="184" border="0" mce_src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/image_18.png" /&gt;&amp;#160;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/image_17.png" width="184" border="0" mce_src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/image_17.png" /&gt; &lt;/p&gt;  &lt;p&gt;Ora rispondete S&amp;#236; alla domanda che vi chiede si intendete ricercare un nuovo dispositivo Bluetooth che supporti ActiveSync e impostate il pairing con il PC; come proposto dall'opzione di default, accettate la creazione di una porta in ingresso sullo Smartphone di tipo ActiveSync. ATTENZIONE: se la porta in ingresso che vi propone NON &amp;#232; ActiveSync bens&amp;#236; una generica porta seriale, non va bene; verificate che il Centro Connessione Dispositivi Mobile nel pannello di controllo sia in ascolto sulla porta COM che avete creato all'inzio.&lt;/p&gt;  &lt;p&gt;Se tutto sta procedendo come da indicazioni, tornate al menu start, rilanciate l'ActiveSync e nuovamente dal menu sulla destra scegliete l'opzione 7 (Connetti tramite Bluetooth): automaticamente partir&amp;#224; la sincronizzazione sullo smartphone e quella sul PC:    &lt;br /&gt;&lt;a href="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/connessione1_6.jpg" target="_blank" mce_href="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/connessione1_6.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="184" alt="connessione1" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/connessione1_thumb_2.jpg" width="244" border="0" mce_src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/connessione1_thumb_2.jpg" /&gt;&lt;/a&gt;&amp;#160; &lt;a href="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/connessione2_4.jpg" target="_blank" mce_href="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/connessione2_4.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="184" alt="connessione2" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/connessione2_thumb_1.jpg" width="244" border="0" mce_src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/connessione2_thumb_1.jpg" /&gt;&lt;/a&gt; &lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="image" src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/image_19.png" width="184" border="0" mce_src="http://blogs.msdn.com/blogfiles/mauromi/WindowsLiveWriter/ComestabilireconnessioneActiveSyncviaBlu_E1A8/image_19.png" /&gt; &lt;/p&gt;  &lt;p&gt;That's all folks! Spero queste indicazioni vi siano state utili, sar&amp;#242; contento se lasciate un post per comunicare l'esito delle vostre prove.&lt;/p&gt;  &lt;p&gt;Buon divertimento, buon lavoro e alla prossima.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7149828" width="1" height="1"&gt;</content><author><name>europe\mauromi</name><uri>http://blogs.msdn.com/members/europe%5cmauromi.aspx</uri></author></entry><entry><title>Microsoft ASP.NET: le slide dei seminari</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/mauromi/archive/2007/11/15/microsoft-asp-net-le-slide-dei-seminari.aspx" /><id>http://blogs.msdn.com/mauromi/archive/2007/11/15/microsoft-asp-net-le-slide-dei-seminari.aspx</id><published>2007-11-15T17:34:19Z</published><updated>2007-11-15T17:34:19Z</updated><content type="html">&lt;p&gt;Come annunciato in un &lt;a href="http://blogs.msdn.com/mauromi/archive/2007/09/10/esercitazioni-di-laboratorio-su-asp-net-2-0-tratte-dal-materiale-per-seminari-universitari.aspx" target="_blank"&gt;precedente post&lt;/a&gt;, fra ottobre e dicembre 2007 sto portando in giro per l'Italia una serie di seminari di introduzione alle tecnologie Microsoft, in particolare focalizzati sullo sviluppo di applicazioni Internet con ASP.NET e AJAX, partendo dall'architettura del .NET Framework.&lt;/p&gt;  &lt;p&gt;Fanno da contorno la realizzazione di scenari sull'integrazione di politiche di sicurezza (integrata con Active Directory o esterna con registrazione degli utenti su un server SQL), una panoramica sugli ambienti di sviluppo -anche gratuiti come Visual Web Developer-, tecniche di ottimizzazione come Pagine Master / Temi / Skin / Localizzazione della lingua, le novit&amp;#xE0; delle tecnologie di accesso ai dati con ADO.NET. Maggiori informazioni sui contenuti sono disponibili in questo &lt;a href="http://blogs.msdn.com/mauromi/archive/2007/10/31/seminari-gratuiti-in-universit-su-tecnologie-microsoft.aspx" target="_blank"&gt;mio post&lt;/a&gt; precedente.&lt;/p&gt;  &lt;p&gt;Al termine della presentazione e durante la giornata che passo con loro, molti studenti mi chiedono le slide che ho presentato; normalmente le lascio a disposizione del professore che le mette sulla intranet dell'Universit&amp;#xE0; e le copio dal mio portatile sulla chiavetta USB a chi me le chiede al momento. &lt;/p&gt;  &lt;p&gt;Ieri sono stato a Napoli alla Federico II e per qualche disguido non sono riuscito a incontrare il professore, quindi ho promesso agli studenti che le avrei postate entro oggi sul mio blog. &lt;a href="http://maurominella.members.winisp.net/Seminario%20Microsoft%20-%20Introduzione%20a%20ASP.Net.zip" target="_blank"&gt;Le trovate dunque qui&lt;/a&gt;. Ai due link pi&amp;#xF9; sopra trovate invece un riassunto dei contenuti del seminario, tutte le date previste per i seminari che rimangono e le esercitazioni di laboratorio; purtroppo ieri si sono svolte in un contesto difficile per problemi organizzativi interni, mi scuso ancora con gli studenti e rimango a loro disposizione per ogni chiarimento tecnico che non &amp;#xE8; stato possibile vedere ieri.&lt;/p&gt;  &lt;p&gt;Alla prossima. Mauro&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6262944" width="1" height="1"&gt;</content><author><name>europe\mauromi</name><uri>http://blogs.msdn.com/members/europe%5cmauromi.aspx</uri></author></entry><entry><title>Seminari gratuiti in Università su Tecnologie Microsoft</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/mauromi/archive/2007/10/31/seminari-gratuiti-in-universit-su-tecnologie-microsoft.aspx" /><id>http://blogs.msdn.com/mauromi/archive/2007/10/31/seminari-gratuiti-in-universit-su-tecnologie-microsoft.aspx</id><published>2007-10-31T13:18:26Z</published><updated>2007-10-31T13:18:26Z</updated><content type="html">&lt;p&gt;Come avevo anticipato in un mio &lt;a href="http://blogs.msdn.com/mauromi/archive/2007/09/10/esercitazioni-di-laboratorio-su-asp-net-2-0-tratte-dal-materiale-per-seminari-universitari.aspx" target="_blank"&gt;precedente post&lt;/a&gt;, sto portando avanti in questo periodo una serie di seminari su tecnologie Microsoft nelle principali città italiane.&lt;/p&gt; &lt;p&gt;Il tour prevede incontri in una ventina di Università entro Natale. Il seminario dura una giornata intera ed è gratuito; come ogni lezione in università, dunque, è dedicato agli studenti ma in ogni caso è aperto a chiunque sia interessato.&lt;/p&gt; &lt;p&gt;Vi elenco di seguito l'agenda delle giornate, l'abstract dei contenuti -entrambi questi punti possono variare leggermente da sede a sede in relazione a richieste specifiche- e le date finora programmate. &lt;/p&gt; &lt;p&gt;In base ai feedback che riceviamo e alla partecipazione degli studenti, valuteremo al termine se riproporre questo tour nel secondo semestre dell'Anno Accademico 2007-2008.&lt;/p&gt; &lt;p&gt;&lt;font color="#0080ff"&gt;AGENDA&lt;/font&gt; &lt;blockquote&gt; &lt;p&gt;L’incontro, della durata di una giornata, viene suddiviso&amp;nbsp;nelle seguenti&amp;nbsp;parti:&lt;br&gt;&amp;nbsp; - 4 ore durante la mattina in cui vengono esposti gli argomenti sotto indicati&lt;br&gt;&amp;nbsp; - 4 ore durante il pomeriggio da tenersi in laboratorio per lo svolgimento di esercizi per realizzare esempi pratici e funzionanti relativi alle nozioni esposte durante la mattina; maggiori informazioni per la configurazione del laboratorio sono disponibili &lt;a href="http://blogs.msdn.com/mauromi/archive/2007/09/10/esercitazioni-di-laboratorio-su-asp-net-2-0-tratte-dal-materiale-per-seminari-universitari.aspx" target="_blank"&gt;a questo indirizzo&lt;/a&gt;&lt;br&gt;- &lt;em&gt;Install Party&lt;/em&gt;: un paio di &lt;em&gt;happy hours &lt;/em&gt;durante cui gli studenti potranno ritirare o installare direttamente sul proprio pc software Microsoft e ottenere informazioni tecniche in un'atmosfera informale e piacevole &lt;p&gt;Verrà rilasciato un attestato di partecipazione e &lt;font color="#0000ff"&gt;a tutti gli studenti partecipanti sarà distribuita una copia di Windows Vista&lt;/font&gt;, per uso personale. &lt;p&gt;Lo speaker –possibilmente personale di Microsoft- sarà a disposizione per tutta la durata dell’evento.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;font color="#0080ff"&gt;&lt;/font&gt;&amp;nbsp; &lt;p&gt;&lt;font color="#0080ff"&gt;ABSTRACT&lt;/font&gt; &lt;blockquote&gt; &lt;p&gt;I&amp;nbsp;contenuti trattati sono stati preparati per adattarsi a qualunque percorso del piano di studi, vengono infatti trattati argomenti di livello architetturale, corredati da esempi pratici e demo live, che sulla base dell’esperienza degli eventi organizzati negli anni passati abbiamo visto essere interessanti sia per per persone che si affacciano alle tecnologie Microsoft emergenti che per sviluppatori più esperti. &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;font color="#0080ff"&gt;CONTENUTI TENCICI&lt;/font&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;- Il Framework .NET&lt;/font&gt;&lt;br&gt;&amp;nbsp; o Architettura&lt;br&gt;&amp;nbsp; o Standard ECMA&lt;br&gt;&amp;nbsp;&amp;nbsp;o Implementazioni CLI per Linux e Mac: indipendenza da piattaforma e linguaggio &lt;p&gt;&lt;font color="#ff0000"&gt;- ASP.NET&lt;br&gt;&lt;/font&gt;&amp;nbsp; o Evoluzione delle tecnologie di sviluppo per il WEB&lt;br&gt;&amp;nbsp; o Il modello si sviluppo WEB server side&lt;br&gt;&amp;nbsp; o Ciclo di vita della pagina ASPX (*) &lt;p&gt;&lt;font color="#ff0000"&gt;- Internet Information Server (IIS)&lt;br&gt;&lt;/font&gt;&amp;nbsp; o Architettura dei server WEB di Microsoft &lt;p&gt;&lt;font color="#ff0000"&gt;- Introduzione a Visual Studio .NET 2005&lt;br&gt;&lt;/font&gt;&amp;nbsp; o IDE e Controlli lato server (*)&lt;br&gt;&amp;nbsp; o Debugging e Tracing (*)&lt;/p&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;- SICUREZZA: un modello estensibile&lt;/font&gt; &lt;br&gt;&amp;nbsp; o Membership: come sfruttare la sicurezza integrata in Active Directory nella intranet (*)&lt;br&gt;&amp;nbsp; o Scenari di autenticazione sulla extranet (*)&lt;/p&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;- SORGENTI DATI E CONTROLLI DATA-BOUND&lt;br&gt;&lt;/font&gt;&amp;nbsp; o Evoluzione delle architetture di accesso ai dati&lt;br&gt;&amp;nbsp; o Lo stato dell’arte: ADO.NET&lt;br&gt;&amp;nbsp; o I DATASET, un caso particolare: accesso ai dati in modalità disconnessa(*) &lt;p&gt;&lt;font color="#ff0000"&gt;- PERSONALIZZAZIONE DELLE APPLICAZIONI&lt;/font&gt;&lt;br&gt;&amp;nbsp; o Localizzazione: l’applicazione parla la lingua del browser (*)&lt;br&gt;&amp;nbsp; o Pagine Master, Temi e Skin (*) &lt;p&gt;&lt;font color="#ff0000"&gt;-&amp;nbsp;AJAX&lt;/font&gt;&lt;br&gt;&amp;nbsp; o Concetti e Fondamenti&amp;nbsp;&lt;br&gt;&amp;nbsp; o&amp;nbsp;Da dove partire: installazione lato client e&amp;nbsp;lato server&lt;br&gt;&amp;nbsp; o&amp;nbsp;I componenti base: AJAX Extensions, Contro Toolkit, Library e Futures CTP&lt;br&gt;&amp;nbsp; o&amp;nbsp;XmlHttpRequest,&amp;nbsp;ScriptManager e UpdatePanel (*)&lt;br&gt; &lt;p&gt;(*) argomento corredato da demo live&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;font color="#0080ff"&gt;DATE PROGRAMMATE&lt;/font&gt; &lt;blockquote&gt; &lt;p&gt;9 ottobre: Trieste&lt;/p&gt; &lt;p&gt;11 ottobre: Camerino&lt;/p&gt; &lt;p&gt;16&amp;nbsp;ottobre: Crema&lt;/p&gt; &lt;p&gt;18&amp;nbsp;ottobre: Padova&lt;/p&gt; &lt;p&gt;23&amp;nbsp;ottobre: Cosenza&lt;/p&gt; &lt;p&gt;24&amp;nbsp;ottobre: Salerno&lt;/p&gt; &lt;p&gt;26&amp;nbsp;ottobre: Torino (Politecnico)&lt;/p&gt; &lt;p&gt;6 novembre: Torino (Università)&lt;/p&gt; &lt;p&gt;9 novembre: Venezia&lt;/p&gt; &lt;p&gt;14 novembre: Napoli&lt;/p&gt; &lt;p&gt;20 novembre: Catania&lt;/p&gt; &lt;p&gt;27 novembre: Genova (Università)&lt;/p&gt; &lt;p&gt;29 novembre: Genova (Politecnico)&lt;/p&gt; &lt;p&gt;11 dicembre: Bologna (sede di Rimini)&lt;/p&gt; &lt;p&gt;12 dicembre: Bologna (sede di Bologna, facoltà di Fisica)&lt;/p&gt; &lt;p&gt;18 dicembre: Roma (Tor Vergata)&lt;/p&gt; &lt;p&gt;16 gennaio: Bari&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5796293" width="1" height="1"&gt;</content><author><name>europe\mauromi</name><uri>http://blogs.msdn.com/members/europe%5cmauromi.aspx</uri></author></entry></feed>