Freeteo Pensieri e C#dice di Matteo Raumer http://blogs.dotnethell.it/freeteo/ HyperBlogs Professional v.2.0 WPF - uno UserControl per mostrare l'immagine di un oggetto nel binding http://blogs.dotnethell.it/freeteo/Post_19588.aspx Fri, 20 Jun 2014 17:06:01 +0100 Matteo Raumer <div><div><div><div><div><div><div>Qualche giorno fa rimettendo mano ad alcuni progetti WPF, mi sono imbattuto in una di quelle cose che pur essendo semplici, mi hanno aiutato in parecchie situazioni.</div><div>Si tratta di uno UserControl che che uso come visualizzatore di Immagine rappresentativa di un oggetto, ad esempio per Collection di oggetti come ItemSource di una ListBox.</div><div><span style="font-size: 10pt;">La cosa è valida anche in altre situazioni di Binding (...<i>quindi praticamente ovunque in un'applicazione WPF...</i></span><span style="font-size: 10pt;">)</span><span style="font-size: 10pt;">&nbsp;</span><span style="font-size: 10pt;">poichè </span><span style="font-size: 10pt;">l'immagine associata ad un oggetto mostrato nelle varie parti di una maschera oltre ad essere graficamente "accattivante", a volte è proprio necessaria per la User Experience.</span><div><span style="font-size: 10pt;"><br></span></div><div><span style="font-size: 10pt;">All'inizio ero tentato a far tutto nel codice XAML, ma spesso lo stato dell'oggetto cambia a seconda della situazione in cui si trova, l'immagine ad esso associata risulta diversa e riuscire a gestire tutto nello XAML a volte rischia di rendere illeggibile il markup.</span></div><div><span style="font-size: 10pt;">Basta usare un'Image di WPF, con dietro un po' codice, ed è possibile dare l'immagine giusta dell'oggetto che è in Binding in quel momento:</span></div><span style="font-size: 10pt;"><p><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&lt;</font></font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">UserControl</font></font></font><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"> x</font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">:</font></font></font><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2">Class</font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">="WpfTest.Controlli.ImmagineControl"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font></font><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2">xmlns</font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">=http://schemas.microsoft.com/winfx/2006/xaml/presentation</font></font></font><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2">&nbsp;</font></font></font><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"><br><font color="#0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"></font></font></font>xmlns</font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">:</font></font></font><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2">x</font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">="http://schemas.microsoft.com/winfx/2006/xaml"</font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&gt;<br></font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"><br><font color="#0000ff">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</font></font></font></font></font></font></font><span style="color: rgb(0, 0, 255); font-family: Consolas; font-size: small;">&lt;</span><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">Image</font></font></font><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"> Name</font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">="immagine" /&gt;<br></font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&lt;/</font></font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">UserControl</font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&gt;</font></font></font></p><div><br></div></span><div><span style="font-size: 10pt;">Il codice che lo gestisce, sostanzialmente considera una serie di situazioni in cui si trova il suo DataContext, a seconda dell'oggetto e della situazione in cui si trova (nell'esempio è se IsDisabled=true) decide che immagine visualizzare:</span></div><div><span style="font-size: 10pt;"><br></span></div><div><span style="font-size: 10pt;"><p><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">public</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">partial</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">class</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">ImmagineControl</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> : </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">UserControl<br><font color="#000000">{</font></font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;<font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"></font></font></font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">public</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> ImmagineControl() <br>&nbsp; &nbsp;{<br></font></font><span style="font-family: Consolas; font-size: small;">&nbsp; &nbsp; &nbsp; InitializeComponent();</span></p><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"></font></font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"></font></font></font>this</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">.DataContextChanged += (oo, ee) =&gt;</font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> {</font></font><p><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"></font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"></font></font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"></font></font></font>if</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> (</font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">DesignerProperties</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">.GetIsInDesignMode(</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">this</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">))<br></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"></font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"></font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"></font></font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"></font></font></font>return</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">;</font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> <br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"></font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"></font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"></font></font></font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">GetIcona(</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">this</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">.DataContext);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br></font></font><span style="font-family: Consolas; font-size: small;">}</span></p><font face="Consolas" size="2"><font face="Consolas" size="2"><p></p></font></font></span><span style="font-size: 10pt;"><p><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><br>void</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> GetIcona(</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">object</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> obj)<br></font></font><span style="font-family: Consolas; font-size: small;">{<br></span><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp; &nbsp;</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">string</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> img = </font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">"default"</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">;</font></font></p><font face="Consolas" size="2"><font face="Consolas" size="2"></font></font><p><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font></p><font color="#0000ff" face="Consolas" size="2"><p></p><font color="#0000ff" face="Consolas" size="2"><p></p><font color="#0000ff" face="Consolas" size="2"><p></p><p><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp;</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"></font></font></font>if&nbsp;<span style="color: rgb(0, 0, 0);">(obj</span><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">is</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">Ordine</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">) <br></font></font>&nbsp; &nbsp; &nbsp;&nbsp;<span style="color: rgb(0, 0, 0);">img&nbsp;</span><font face="Consolas" size="2"><font face="Consolas" size="2">= </font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">"ordine"</font></font></font></p></font></font></font></span><span style="font-size: 10pt;"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><p><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&nbsp; &nbsp;if</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;</font></font><span style="color: rgb(0, 0, 0);">(obj</span><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">is</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">Utente</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">) <br></font></font>&nbsp; &nbsp; &nbsp;&nbsp;<span style="color: rgb(0, 0, 0);">img&nbsp;</span><font face="Consolas" size="2"><font face="Consolas" size="2">= </font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">"utente"</font></font></font>;</p></font></font></font></span><span style="font-size: 10pt;"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><p><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&nbsp; &nbsp;if</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;</font></font><span style="color: rgb(0, 0, 0);">(obj</span><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">is</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">Fornitore</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">) <br></font></font>&nbsp; &nbsp; &nbsp;&nbsp;<span style="color: rgb(0, 0, 0);">img&nbsp;</span><font face="Consolas" size="2"><font face="Consolas" size="2">= </font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">"fornitore"</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">;<br></font></font><font color="#008000" face="Consolas" size="2"><font color="#008000" face="Consolas" size="2"><font color="#008000" face="Consolas" size="2"><br></font></font></font>&nbsp; &nbsp;<font color="#008000" face="Consolas" size="2"><font color="#008000" face="Consolas" size="2"><font color="#008000" face="Consolas" size="2">//--- posso gestire il fatto che sia disabilitato cambiano l'opacity&nbsp;<br></font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&nbsp; &nbsp;</font></font></font><font color="#0000ff" face="Consolas" size="2">if</font><font face="Consolas" size="2">&nbsp;</font><span style="color: rgb(0, 0, 0);">((obj</span><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">as</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">OggettoBase</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">).</font></font><span style="color: rgb(0, 0, 0);">IsDisabled</span><font face="Consolas" size="2"><font face="Consolas" size="2">)&nbsp;</font></font></p></font></font></font></span><span style="font-size: 10pt;"><p><span style="color: rgb(0, 0, 255); font-family: Consolas; font-size: small;">&nbsp; &nbsp;</span><span style="color: rgb(0, 0, 255); font-family: Consolas; font-size: small;">&nbsp; &nbsp;</span><span style="font-family: Consolas; font-size: small;">immagine.Opacity = 0.4;</span></p></span><span style="font-size: 10pt;"><p><font face="Consolas" size="2"><font face="Consolas" size="2"></font></font><span style="color: rgb(0, 0, 255); font-family: Consolas; font-size: small;">&nbsp; &nbsp;</span><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">else</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> <br></font></font><span style="color: rgb(0, 0, 255); font-family: Consolas; font-size: small;">&nbsp; &nbsp;</span><span style="color: rgb(0, 0, 255); font-family: Consolas; font-size: small;">&nbsp; &nbsp;</span><span style="font-family: Consolas; font-size: small;">immagine.Opacity = 1;</span></p></span><span style="font-size: 10pt;"><p><span style="color: rgb(0, 0, 255); font-family: Consolas; font-size: small;">&nbsp; &nbsp;</span><font face="Consolas" size="2"><font face="Consolas" size="2">immagine.Source = </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">null</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">; <br></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><br></font></font></font><span style="color: rgb(0, 0, 255); font-family: Consolas; font-size: small;">&nbsp; &nbsp;</span><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">string</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> path = </font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">"/Themes/Immagini/"</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">; <br></font></font><span style="color: rgb(0, 0, 255); font-family: Consolas; font-size: small;">&nbsp; &nbsp;</span><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">Uri</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> src = </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">new</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">Uri</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">(path + img + </font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">".png"</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">, </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">UriKind</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">.Relative);<br></font></font><span style="color: rgb(0, 0, 255); font-family: Consolas; font-size: small;">&nbsp; &nbsp;</span><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">BitmapImage</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> logo = </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">new</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">BitmapImage</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">();&nbsp;</font></font></p></span><span style="font-size: 10pt;"><p><span style="color: rgb(0, 0, 255); font-family: Consolas; font-size: small;">&nbsp; &nbsp;</span><font face="Consolas" size="2"><font face="Consolas" size="2">logo.BeginInit();&nbsp;<br></font></font><span style="color: rgb(0, 0, 255); font-family: Consolas; font-size: small;">&nbsp; &nbsp;</span><span style="font-family: Consolas; font-size: small;">logo.UriSource = src; <br></span><span style="color: rgb(0, 0, 255); font-family: Consolas; font-size: small;">&nbsp; &nbsp;</span><span style="font-family: Consolas; font-size: small;">logo.EndInit(); <br><br></span><span style="color: rgb(0, 0, 255); font-family: Consolas; font-size: small;">&nbsp; &nbsp;</span><span style="font-family: Consolas; font-size: small;">immagine.Source = logo;</span></p><font face="Consolas" size="2"><font face="Consolas" size="2"><p> }</p></font></font><br></span></div><div><span style="font-size: 10pt;">La cosa poi è utilizzabile anche per avere un template base per la ListView come ad esempio:</span></div><div><div><div><div><div><div><div><br></div><div><p><font face="Consolas" size="2"><font face="Consolas" size="2"></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&lt;</font></font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">DataTemplate</font></font></font><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"> x</font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">:</font></font></font><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2">Key</font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">="templateBase"&gt;<br>&nbsp;&nbsp; </font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&lt;</font></font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">Grid</font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&gt;</font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"> <br></font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;</font></font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">Grid.ColumnDefinitions</font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&lt;</font></font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">ColumnDefinition</font></font></font><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"> Width</font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">="40" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&lt;</font></font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">ColumnDefinition</font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"> /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&lt;/</font></font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">Grid.ColumnDefinitions<font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&gt;</font></font></font></font></font></font></p><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#008000" face="Consolas" size="2"><font color="#008000" face="Consolas" size="2"><font color="#008000" face="Consolas" size="2"><p><font color="#0000ff"><br></font><font color="#0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font>&lt;!-- il nostro controllo immagine e una textbox&nbsp;per il nome&nbsp;--&gt;&nbsp;<br><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&nbsp; &nbsp; &nbsp; &lt;</font></font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">Controlli</font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">:</font></font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">ImmagineControl</font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"> /&gt;&nbsp;</font></font></font></p></font></font></font></font></font></font><p><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&lt;</font></font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">TextBlock</font></font></font><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"> Text</font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">="{</font></font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">Binding</font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">}"</font></font></font><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"> Grid.Column</font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">="1"</font></font></font><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"> Margin</font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">="6" /&gt;<br>&nbsp;&nbsp; </font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&lt;/</font></font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">Grid</font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&gt;<br></font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&lt;/</font></font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">DataTemplate</font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&gt;</font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"> <br><br></font></font></font></p><font face="Consolas" size="2"><font face="Consolas" size="2"><p></p><p></p></font></font><p><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&lt;</font></font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">Style</font></font></font><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"> TargetType</font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">="ListBox"&gt;<br>&nbsp;&nbsp; </font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&lt;</font></font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">Setter</font></font></font><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"> Property</font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">="ItemTemplate"</font></font></font><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"> Value</font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">="{</font></font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">StaticResource</font></font></font><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"> templateBase</font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">}" /&gt;<br></font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&lt;/</font></font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">Style</font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&gt;<br></font></font></font></p><div><span style="font-size: 10pt;"><br></span></div><div><span style="font-size: 10pt;"><br></span></div><div><span style="font-size: 10pt;">E quindi a Runtime ci troviamo l'effetto desiderato:</span></div><div><span style="font-size: 10pt;"><br></span></div><div><span style="font-size: 10pt;"><img src="http://blogs.dotnethell.it/filestore/11456_ImmagineControl.png"></span></div><div><br></div><div><span style="font-size: 10pt;">La funzione che svolge è abbastanza banale, ma dimostra che a volte con poco è possibile semplificarsi notevolmente la vita.</span><br></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><div><span style="font-size: 10pt;"><br></span></div><div><span style="font-size: 10pt;"><br></span></div> Matteo Raumer 0 http://blogs.dotnethell.it/freeteo/ReadComment_19588.aspx Tips sql todo explorer http://blogs.dotnethell.it/freeteo/Post_19557.aspx Tue, 20 May 2014 10:25:27 +0100 Matteo Raumer <font face="Trebuchet MS" size="2">Vorrei segnalare un ottimo tool Open Source sviluppato dagli amici (nonchè MVP) <b><a href="http://blogs.dotnethell.it/suxstellino/">Ale</a> </b>e<b> <a href="http://blogs.dotnethell.it/Regulator/">Mike</a></b>, che si integra in&nbsp;</font><span style="font-family: 'Trebuchet MS'; font-size: small;">Sql Management Studio e permette di&nbsp;</span><font face="Trebuchet MS" size="2">gestire i task "TODO,HACK,BUG,ASK" direttamente all'interno del pacchetto.</font><div><font face="Trebuchet MS" size="2"><br></font></div><div><font face="Trebuchet MS" size="2">Trovate tutti i dettagli qui: <a href="http://damntools.github.io/SqlTodoExplorer/">http://damntools.github.io/SqlTodoExplorer/</a></font></div> Matteo Raumer 0 http://blogs.dotnethell.it/freeteo/ReadComment_19557.aspx technologia Entity Framework - recuperare il nome della tabella associata all'entita http://blogs.dotnethell.it/freeteo/Post_19544.aspx Wed, 30 Apr 2014 17:01:31 +0100 Matteo Raumer Ultimamente lavoro praticamente sempre con <a href="http://msdn.microsoft.com/en-us/data/ee712907#ef6">Entity Framework</a> per tutti i progetti a cui metto mano, ed devo dire che sono pienamente soddisfatto.<div>I vantaggi sono moltissimi e risaputi, ma se dovessi scegliere un paio di cose veramente indispensabili, sicuramente sceglierei Lambda Expression per filtrare i dati, e il drastico ma veramente drastico abbattimento del tempo di sviluppo dello strato dati.</div><div><br>Ormai grazie a questo pacchetto diciamo pure che mi sono abituato fin troppo bene <img src="http://blogs.dotnethell.it/icons/regular_smile.gif">...ma un buon sviluppatore sa bene che per quanto un prodotto sia bello e valido per un contesto, solo l'utilizzo nel tempo può dirci quanto sia veramente adattabile alle diverse situazioni...dato che si devono spesso fare acrobazie degne del Cirque du Soleil.</div><div><br></div><div>Infatti purtroppo ogni tanto mi capita di&nbsp;dover scrivere alcune query dritte senza usare Entity Framework, andando direttamente via sintassi Sql&nbsp;sul database.<br>Per casi come questo, magari avendo tutto già bello che configurato su EF, torna utile sapere il nome della tabella da poter usare nelle query che scrivo, anche nell'ottica di restare il più possibile agile.</div><div><br></div><div>Per questo ho&nbsp;preferito fare a meno di scrivere i nomi delle tabelle, ma farmi piuttosto un piccolo metodo che va nei metadati del Context, prende la stringa che genera EF&nbsp;(visibile anche in debug) e con Regex recuperare il nome della tabella:</div><div><p><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">public</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">string</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> GetNomeTabella() <br>{<br><font color="#0000ff">&nbsp;&nbsp; var</font><font face="Consolas" size="2"><font face="Consolas" size="2"> ctx = </font></font>GetContext(); <br></font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">&nbsp;&nbsp; <br>&nbsp;&nbsp; ObjectContext</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> objectContext = ((</font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">IObjectContextAdapter</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">)ctx).ObjectContext;<br></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&nbsp;&nbsp; var</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> x = objectContext.MetadataWorkspace.GetItems&lt;</font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">EntityType</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">&gt;(</font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">DataSpace</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">.SSpace);</font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> <br> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&nbsp;&nbsp; string</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> sql = objectContext.CreateObjectSet&lt;T&gt;().ToTraceString();</font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">&nbsp;&nbsp; <br>&nbsp;&nbsp; <br>&nbsp;&nbsp; Regex</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> regex = </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">new</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">Regex</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">(</font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">"FROM (?&lt;table&gt;.*) AS"</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">);<br></font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">&nbsp;&nbsp; Match</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> match = regex.Match(sql);</font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> <br><br> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&nbsp;&nbsp; return</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> = match.Groups[</font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">"table"</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">].Value;<br>}</font></font></p><p>Il DbContext corrente è dato dal metodo "GetContext()" relativo alle mappature dell'entita che nel mio caso è implementato nel BaseProvider&lt;T&gt; spiegato <a href="http://blogs.dotnethell.it/freeteo/Entity-Framework-Il-mio-approccio-Code-First-allo-strato-dati__19498.aspx">in questo post</a>, ma ovviamente può essere recuperato come meglio si crede.<br></p></div> Matteo Raumer 0 http://blogs.dotnethell.it/freeteo/ReadComment_19544.aspx Tips Entity Framework: Il mio approccio Code-First allo strato dati http://blogs.dotnethell.it/freeteo/Post_19498.aspx Thu, 27 Feb 2014 12:29:31 +0100 Matteo Raumer Negli ultimi tempi Microsoft ha sfornato versioni sempre migliori del pacchetto <a href="http://msdn.microsoft.com/en-us/data/ef.aspx">Entity Framework</a>, un "tassello" dopo l'altro ha rinforzato lo strato dati in &nbsp;maniera sempre più solida, scalabile e soprattutto agile dal punto di vista sviluppo.<div>Io ovviamente non potevo che utilizzarlo e beneficiare di un modo abbastanza standard di approcciarmi allo strato dati, che si tratti di un'applicazione Web o Windows fa poca differenza, se parlo con un Db Sql (o cmq uno qualsiasi supportato da EF) , il mio modo di procedere è <a href="http://weblogs.asp.net/scottgu/archive/2010/07/16/code-first-development-with-entity-framework-4.aspx">Code-First</a> e poi design del&nbsp;db.</div><div><span style="font-size: 10pt;">Un mio "pattern" che ha portato a migliorare i tempi/modi di sviluppo.</span></div><div><div><span style="font-size: 10pt;"><br></span></div><div><span style="font-size: 10pt;">Per quanto riguarda lo strato dati solitamente procedo così:</span></div><div><span style="font-size: 10pt;">1) Definisco a codice le entità&nbsp;che faranno parte del progetto&nbsp;</span><span style="font-size: 10pt;">(<a href="http://en.wikipedia.org/wiki/Domain-driven_design">Domain Driven Design</a>) e comincio a lavorare sul modello<br></span></div><div><span style="font-size: 10pt;"><br></span></div><div><span style="font-size: 10pt;">2) Creo il database da SqlManagement in locale, poi andrò a distribuirlo (sul server del cliente o su Azure) se posso dare il nome alle colonne uguale alle proprietà che ho degli oggetti, la mappatura si riduce al solo nome della tabella</span></div><div><span style="font-size: 10pt;"><br></span></div><div><span style="font-size: 10pt;">3) Uso Entity Framework code first con un</span><span style="font-size: 10pt;">&nbsp;BaseProvider&lt;T&gt; che si occupa della CRUD semplice, che nel caso di miglioramenti posso estendere</span></div><span style="font-size: 10pt;"></span></div><span style="font-size: 10pt;"><p><br></p></span><div>Il tutto in divenire ovviamente, parto sempre da un oggetto base (<a href="http://blogs.dotnethell.it/freeteo/Entity-Framework-Code-First-Ereditare-da-un-oggetto-base-per-campi-comuni-a-piu-tabelle__17259.aspx">vedi articolo qui</a>) , creo via via qualche classe del progetto ma man mano che vado avanti ne aggiungo di nuove e faccio la mappatura relativa, un pochi minuti.</div><div>Se poi vado a dare lo stesso nome della proprietà al nome del campo, allora proprio non scrivo nemmeno la mappatura...fantastico.</div><div>La cosa non è fattibile se si parte da un db già presente con cui integrarsi, ma poco male, basterà ritoccare un attimo le varie mappature, il processo di sviluppo cambia di poco.</div><div><br></div><div>Sostanzialmente il tutto è fatto da&nbsp;poche classi:</div><div>1) un <strong>ContextHelper</strong> per la connessione al db ed altri metodi comodi</div><div><p><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">public</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">class</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">ContextHelper<br></font></font></font>{<br><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp; public</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">const</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">string</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> NomeConnessione = </font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">"DbConnection"</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">;</font></font></p><font face="Consolas" size="2"><font face="Consolas" size="2"> <p> </p> </font></font><p><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp; public</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">virtual</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">DbContext</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> GetContext()<br>&nbsp;&nbsp;&nbsp;&nbsp; {</font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //--- importante per evitare che crei lui il db su sql<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font>Database</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">.SetInitializer&lt;</font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">ContextVideo</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">&gt;(</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">null</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#2b91af">DbContext</font><font face="Consolas" size="2"><font face="Consolas" size="2"> ctx = </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">new</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">ContextVideo</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">();</font></font></font></font></p><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> ctx;</font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> <p> &nbsp;&nbsp;&nbsp;&nbsp; }</p> </font></font><p><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&nbsp;&nbsp;&nbsp; public</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">virtual</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">SqlConnection</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> GetConnection() <br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">return</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">new</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">SqlConnection</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">(</font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">ConfigurationManager</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">.ConnectionStrings[NomeConnessione].ConnectionString);<br>&nbsp;&nbsp;&nbsp; }</font></font></p><font face="Consolas" size="2"><font face="Consolas" size="2"><p>}</p></font></font></div><div><br></div><div><br></div><div>2) <strong>il context di Entity Framework che mappa sul db</strong></div><div><p><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">public</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">partial</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">class</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">ContextVideo</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> : </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">DbContext<br></font></font></font>{<font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; public</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> ContextVideo() </font></font><font face="Consolas" size="2"><font face="Consolas" size="2">: </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">base</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">(</font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">ContextHelper</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">.NomeConnessione) <br>&nbsp;&nbsp;&nbsp; </font></font>{ }</p><font face="Consolas" size="2"><font face="Consolas" size="2"><p><br></p> <p> </p> <p> </p> </font></font><p><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&nbsp;&nbsp;&nbsp; protected</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">override</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">void</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> OnModelCreating(</font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">DbModelBuilder</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> modelBuilder)<br>&nbsp;&nbsp;&nbsp; { </font></font></p><font face="Consolas" size="2"><font face="Consolas" size="2"><p><font color="#008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //--- tutte le mappature degli oggetti del domain model</font></p> </font></font><p><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;modelBuilder.Configurations.Add(</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">new</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">MappingUtente</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">());</font></font></p><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><p><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></font><font face="Consolas" size="2"><font face="Consolas" size="2">modelBuilder.Configurations.Add(</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">new</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">MappingCategoria</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">());</font></font></p><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><p><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;....</font></font></p><font face="Consolas" size="2"><font face="Consolas" size="2"> <p> </p> </font></font><p><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">base</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">.OnModelCreating(modelBuilder);<br>&nbsp;&nbsp;&nbsp; }</font></font></p><font face="Consolas" size="2"><font face="Consolas" size="2"><p>}</p></font></font></div><div><br></div><div><br></div><div>3) Un <strong>MappingBase&lt;T&gt; che estende&nbsp;EntityTypeConfiguration&lt;T&gt;</strong>&nbsp;che si occupa dei campi base, dato che gli oggetti hanno sempre alcuni campi "vitali" come ID,Descrizione,DataModifica etc... la mappatura viene semplificata tenendo conto dei campi o meno, a seconda dell'oggetto</div><div><p><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">public</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">abstract</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">class</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">MappingBase</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">&lt;T&gt; : </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">EntityTypeConfiguration</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">&lt;T&gt; </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">where</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> T : </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">OggettoBase<br><font color="#000000" face="Trebuchet MS">{</font></font></font></font></p><p><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">public</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">bool</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> IgnoraCampiSys { </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">get</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">; </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">set</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">; }</font></font></p><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><p><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">public</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">abstract</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">void</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> Mappature(); </font></font><font color="#008000" face="Consolas" size="2"><font color="#008000" face="Consolas" size="2"><font color="#008000" face="Consolas" size="2">//--- qui mi imposti le tue mappature</font></font></font></p><font color="#008000" face="Consolas" size="2"><font color="#008000" face="Consolas" size="2"><font color="#008000" face="Consolas" size="2"> </font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> <p> </p> </font></font><p><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&nbsp;&nbsp;&nbsp; public</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> MappingBase() <br>&nbsp;&nbsp;&nbsp; {</font></font></p><font face="Consolas" size="2"><font face="Consolas" size="2"><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Mappature();</p></font></font><p><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HasKey(x =&gt; x.ID);&nbsp;&nbsp; <font color="#008000">//--- il campo ID è Identity</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Property(x =&gt; x.ID).HasDatabaseGeneratedOption(</font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">DatabaseGeneratedOption</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">.Identity);</font></font></p><p><font face="Consolas" size="2"><font face="Consolas" size="2"><br></font></font><font color="#008000" face="Consolas" size="2"><font color="#008000" face="Consolas" size="2"><font color="#008000" face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //--- campi di sistema, a volte possono essere ignorati<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">if</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> (IgnoraCampiSys)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font>{</p><font face="Consolas" size="2"><font face="Consolas" size="2"><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ignore(x =&gt; x.SysComputer);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ignore(x =&gt; x.SysData)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ignore(x =&gt; x.SysUtente);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"><p>&nbsp;&nbsp;&nbsp; }</p> <p> }</p></font></font></div><div><br></div><div><br></div><div>4) le <strong>Mappature</strong> degli oggetti (es: Utente) che appunto estendono la mappatura base di quell'oggetto:</div><div><p><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">public</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">class</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">MappingUtente</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> : </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">MappingBase</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">&lt;</font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">Utente</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">&gt;&nbsp;<br>{<br>&nbsp;</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&nbsp;&nbsp;public</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">override</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">void</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> Mappature()<br>&nbsp;&nbsp; {<br></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ToTable(</font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">"UTENTI"</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">);</font></font></p><p><font color="#008000" face="Consolas">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //--- eventuali altre configurazioni specifiche per l'entita<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font><font color="#008000" face="Consolas">//--- ma se i campi sono tutti mappati, ed il nome corrisponde alla colonna<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font><font color="#008000" face="Consolas">//--- non c'è altro da fare<br>&nbsp;&nbsp;&nbsp;</font><font face="Consolas">}<br>}</font></p><font face="Consolas" size="2"><p><br></p></font><p>5) Il mio <strong>BaseProvider&lt;T&gt;&nbsp;per la&nbsp;CRUD semplice</strong>&nbsp;è l'ultimo tassello del processo, ed è standard, infatti per diversi progetti referenzio direttamente la libreria. Il codice è questo:</p></div><div><p><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">public</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">class</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">BaseProvider</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">&lt;T&gt; </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">where</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> T : </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">OggettoBase<br></font></font></font>{</p><p><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;</font>static</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">ContextHelper</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> c;</font></font></p><p><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font></p><p><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">public</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">virtual</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">ContextHelper</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> ContextHelper <br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; </font></font><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp;</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">get<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font></font>{<br><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> (c == </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">null</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font><font face="Consolas" size="2"><font face="Consolas" size="2">c = </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">new</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">ContextHelper</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">();</font></font></p><p><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font></p><p><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">return</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> c;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }</font></font></p><p></p><font face="Consolas" size="2"><p><br></p></font><p><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&nbsp;&nbsp;&nbsp; protected</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">virtual</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">void</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> BuildObject(T item)&nbsp;<br>&nbsp;&nbsp;&nbsp; {<br></font></font><font color="#008000" face="Consolas" size="2"><font color="#008000" face="Consolas" size="2"><font color="#008000" face="Consolas" size="2"><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font>//--- utile pre l'implementazione specifica<br><font color="#000000">&nbsp;&nbsp;&nbsp; }<br></font></font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">protected</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">virtual</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">IEnumerable</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">&lt;T&gt; BuildLista(</font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">IEnumerable</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">&lt;T&gt; lista)<br>&nbsp;&nbsp;&nbsp; </font></font>{<font face="Consolas"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">foreach</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> (</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">var</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> item </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">in</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> lista)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BuildObject(item);<br><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> lista;<br>&nbsp;&nbsp;&nbsp;&nbsp;}</font></font></font></font></p><font face="Consolas" size="2"><font face="Consolas" size="2"><p><br></p></font></font><p><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&nbsp;&nbsp;&nbsp; public</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">virtual</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> T Get(</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">string</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> codice) <br> &nbsp;&nbsp;&nbsp; {<br><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> Get(x =&gt; x.Codice == codice);</font></font><br>&nbsp;&nbsp;&nbsp; }</font></font></p><font face="Consolas" size="2"><p><br></p></font><p><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">public</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">virtual</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> T Get(</font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">Expression</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">&lt;</font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">Func</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">&lt;T, </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">bool</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">&gt;&gt; filtri)<br>&nbsp;&nbsp;&nbsp; </font></font>{</p><p><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T u = </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">null</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">;</font></font></p><p><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font></p><p><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></font><font color="#008000" face="Consolas" size="2"><font color="#008000" face="Consolas" size="2"><font color="#008000" face="Consolas" size="2">//--- safety code<br><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if</font></font></font><font face="Consolas" size="2"><font color="#000000" face="Consolas" size="2"> (filtri == </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">null</font></font></font><font face="Consolas" size="2"><font color="#000000" face="Consolas" size="2">)<br><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> u;<br></font></font></font></font></font></font></font><font color="#008000" face="Consolas" size="2"><font color="#008000" face="Consolas" size="2"><font color="#008000" face="Consolas" size="2"><br></font></font></font></p><p></p><font face="Consolas" size="2"><p></p><font face="Consolas" size="2"><p> </p><p> </p><p> </p></font><p></p></font><p><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">using</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> (</font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">DbContext</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> ctx = ContextHelper.GetContext())<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; u = ctx.Set&lt;T&gt;().FirstOrDefault(filtri);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p><font face="Consolas" size="2"><font face="Consolas" size="2"><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BuildObject(u);<br><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> u;</font></font></p><p> </p></font><p></p></font><p><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</font></font></p><font face="Consolas" size="2"><p><br></p></font><p><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">public</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">virtual</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">IEnumerable</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">&lt;T&gt; GetAll()<br>&nbsp;&nbsp;&nbsp; </font></font>{<br><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> GetAll(</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">null</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">);<br>&nbsp;&nbsp;&nbsp; }<br><br></font></font></p><p><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">public</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">virtual</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">IEnumerable</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">&lt;T&gt; GetAll(</font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">Expression</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">&lt;</font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">Func</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">&lt;T, </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">bool</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">&gt;&gt; filtri)<br>&nbsp;&nbsp;&nbsp; </font></font>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">using</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> (</font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">DbContext</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> ctx = ContextHelper.GetContext())<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">var</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> q = ctx.Set&lt;T&gt;().AsQueryable();</font></font></p><p><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font></p><p><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">if</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> (filtri != </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">null</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">)</font></font></p><p></p><font face="Consolas" size="2"><p></p><font face="Consolas" size="2"><p> </p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q = q.Where(filtri);</p><p> </p></font><p></p></font><p><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">return</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> BuildLista(q.ToArray()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .OrderBy(x =&gt; x.Nome));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br><br></font></font></p><p><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;public</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">virtual</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> T Create(T item) <br>&nbsp;&nbsp;&nbsp; {</font></font></p><font face="Consolas" size="2"><font face="Consolas" size="2"><font face="Consolas" size="2"><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; item.ID = 0;</p></font><p></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Save(item);</p><p> </p></font><p></p></font><p><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">return</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> item;<br>&nbsp;&nbsp;&nbsp; }</font></font></p><font face="Consolas" size="2"><font face="Consolas" size="2"><p><br></p></font></font><p><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp; </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">public</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">virtual</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">bool</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> Save(T item)<br>&nbsp;&nbsp;&nbsp; </font></font>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font face="Consolas" size="2"><font face="Consolas" size="2">item.SysData = </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">DateTime</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">.Now;</font></font></p><p></p><font face="Consolas" size="2"><p></p><font face="Consolas" size="2"><p> </p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ControllaDate(item);</p><p> </p></font><p></p></font><p><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">using</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> (</font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">DbContext</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> ctx = ContextHelper.GetContext())<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</font></font></p><p></p><p><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">DbSet</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">&lt;T&gt; set = ctx.Set&lt;T&gt;();</font></font></p><p><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font></p><p><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">if</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> (item.ID &gt; 0)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set.Attach(item);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font face="Consolas" size="2"><font face="Consolas" size="2">ctx.Entry(item).State = </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">EntityState</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">.Modified;</font></font></p><p></p><font face="Consolas" size="2"><p></p><font face="Consolas" size="2"><p> </p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><font color="#0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set.Add(item);</font></font></p></font></font><p><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> SaveChanges(ctx);</font></font></p><p></p><font face="Consolas" size="2"><p></p><font face="Consolas" size="2"><p> </p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br></p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p></font><p></p></font><p><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">public</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">virtual</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">bool</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> Delete(T item)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font>{<br><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> Delete(item.Codice);</font></font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<font face="Consolas" size="2"><font face="Consolas" size="2"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">public</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">virtual</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">bool</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> Delete(</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">string</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> codice)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font>{<br><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> Delete(x =&gt; x.Codice == codice); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font>}<br><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">public</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">virtual</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">bool</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> Delete(</font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">Expression</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">&lt;</font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">Func</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">&lt;T, </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">bool</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">&gt;&gt; filtri)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">using</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> (</font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">DbContext</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> ctx = ContextHelper.GetContext()) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</font></font></p><p></p><font face="Consolas" size="2"><p></p></font><p><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">DbSet</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">&lt;T&gt; set = ctx.Set&lt;T&gt;();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">var</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> mm = set.Where(filtri);</font></font></p><p><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font></p><p><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">if</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> (mm != </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">null</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">)</font></font></p><p></p><font face="Consolas" size="2"><p></p><font face="Consolas" size="2"><p> </p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set.RemoveRange(mm);</p><p> </p><p> </p><p> </p></font><p></p></font><p><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">return</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> SaveChanges(ctx);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></font></p><p></p><font face="Consolas" size="2"><font face="Consolas" size="2"><p><br></p><p> </p></font><p></p></font><font face="Consolas" size="2"><p><font color="#0000ff"><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font>protected</font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">bool</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> SaveChanges(</font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">DbContext</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> ctx)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">bool</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> ok = </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">false</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">;</font></font></p><font face="Consolas" size="2"><font face="Consolas" size="2"></font></font><p><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">try<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font></font>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ok = ctx.SaveChanges() &gt; 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> { }</font></font></p><p><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">return</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> ok;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></font></p><font face="Consolas" size="2"><font face="Consolas" size="2"><p><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </strong></p></font></font><p><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">private</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">void</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> ControllaDate(T item)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">if</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> (item == </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">null</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">return</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">;</font></font><font face="Consolas" size="2"><font face="Consolas" size="2"><br></font></font></p><p><font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000" face="Consolas" size="2"><font color="#008000" face="Consolas" size="2"><font color="#008000" face="Consolas" size="2">//--- Sql e DateTime.Minvalue non vanno d'accordo<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font></font></font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">foreach</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> (</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">var</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> p </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">in</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> item.GetType().GetProperties().Where(x =&gt; x.PropertyType == </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">typeof</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">(</font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">DateTime</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">)))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">try<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#000000">{</font></font></font></font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">DateTime</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> d = (</font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">DateTime</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">)p.GetValue(item, </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">null</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">);</font></font></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">if</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> (d == </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">DateTime</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">.MinValue)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font><font face="Consolas" size="2"><font face="Consolas" size="2">p.SetValue(item, </font></font><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2"><font color="#2b91af" face="Consolas" size="2">SqlDateTime</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">.MinValue.Value, </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">null</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">);</font></font></p><font face="Consolas" size="2"><font face="Consolas" size="2"><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><font color="#0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch</font><font face="Consolas" size="2"><font face="Consolas" size="2"> { }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></font></p></font></font><p>}</p><p><em>(* come si nota, si tratta di un gestore di CRUD semplice, nel caso complesso meglio implementare un provider specifico)</em></p></font><p><br></p></div><div>A questo punto, nel momento in cui debba aggiungere una nuova entità, nel caso ppiù semplice mi basta creare l'entita&nbsp;(che estende sempre OggettoBase ovviamente), e&nbsp;creare un Manager relativo dove ci metto le logiche che usa nel caso più semplice un BaseProvider&lt;Entita&gt; e sono&nbsp;posto...fantastico.</div><div>Nel caso in cui voglia specificare delle funzioni diverse nel provider dati, creare anche il provider relativo, estendendo sempre il Base per beneficiare della CRUD "semplice" e mettendo i metodi con Join o altre migliorie relative allo strato dati.</div><div><br></div><div><br></div><div>Questa modo di operare, mi da una serie di vantaggi:</div><div>P<span style="font-size: 10pt;">er il 90% dei casi mi basta definire una proprietà con un certo nome che riporto nella colonna, EF fa il lavoro sporco per me.</span></div><div><span style="font-size: 10pt;">Creando il Manager con&nbsp;metodi&nbsp;che accettano come parametri Lambda Expression, posso avere la libertà di essere flessibile nello strato Business, con tutta l'affidabilità della tipizzazione.</span></div><div><span style="font-size: 10pt;"><br></span></div><div>Ma soprattutto,il motivo principale che mi&nbsp;fa piacere&nbsp;questo approccio,&nbsp;è che&nbsp;<b>in poco tempo riesco a partire con un progetto reale, scalabile, ed affidabile senza dover ogni volta preoccuparmi dello strato dati.</b></div><div><strong>Posso quasi&nbsp;dimenticarmi di parlare con un database e concentrarmi sulle logiche dell'applicativo,&nbsp;</strong>poi, via via che il progetto cresce, posso intervenire con poche operazioni semplici per integrare nuovi oggetti.</div><div><br></div><div>Un vero piacere, pensando poi a qualche anno fa, quando bene o male lo strato dati andava sempre fatto e testato...<img src="http://blogs.dotnethell.it/icons/regular_smile.gif"></div><div><br></div><div><br></div><div>Un progetto d'esempio lo potete trovare qui:&nbsp;<a href="http://www.dotnethell.it/users/files/1958_Freeteo.CodeFirst.zip">http://www.dotnethell.it/users/files/1958_Freeteo.CodeFirst.zip</a></div><font face="Consolas" size="2"><font face="Consolas" size="2"><p><br></p><p><br></p></font></font> Matteo Raumer 2 http://blogs.dotnethell.it/freeteo/ReadComment_19498.aspx .net JqueryMobile Treeview con css http://blogs.dotnethell.it/freeteo/Post_19387.aspx Wed, 09 Oct 2013 23:13:27 +0100 Matteo Raumer <p style="font-family: 'Trebuchet MS'; font-size: 10pt;">Nell'ultimo periodo sempre di più mi capita di dover&nbsp;fare una&nbsp;versione&nbsp;"mobile" (<em>quindi ottimizzato per il&nbsp;touch, schermo piccolo, poco traffico di rete, cross-platform...)</em> di applicazioni&nbsp;esistenti, e la scelta inevitabilmente ricade sull'accoppiata <a href="http://www.asp.net/mvc">MVC</a> - <a href="http://jquerymobile.com/">JQueryMobile</a>.<br>La facilità di sviluppo e le ottime performance lo fanno quasi uno standard "<em>de facto</em>" per queste cose, e devo dire che è veramente un bel prodotto,molte&nbsp;features ed oltretutto&nbsp;facilmente estendibile/personalizzabile anche per chi come me si trova a doverci sempre mettere le mani in profondità.<br></p><p style="font-family: 'Trebuchet MS'; font-size: 10pt;">Quello che mi è stato richiesto ultimamente, era di creare una piccola treeview per visualizzare delle informazioni gerarchiche, ed ho pensato chiaramente di risolvere il tutto con le "Nested List", visto che il pacchetto gestisce egregiamente questo caso tramite&nbsp;<a href="http://view.jquerymobile.com/1.3.2/dist/demos/widgets/collapsibles/">le liste "collapsible"</a>&nbsp; generando automaticamente l'icona, il click per gestire l'espansione o il contrarsi della collezione di tag sottostante, il tutto "out of the box"...veramente perfetto.<br></p><p style="font-family: 'Trebuchet MS'; font-size: 10pt;">Ma ovviamente la mia richiesta era leggermente "diversa" ossia avere de link cliccabili anche negli "header" di espansione, i quali appunto non si occupino di espandere/comprimere i tag sottostanti, ma rimandino a una pagina, quindi siano di fatto un link diretto...ovviamente il tutto con a sinistra un'icona di espansione, perché si voleva ripetere la treeview a cui siamo abituati da sempre in esplora risorse.</p><p style="font-family: 'Trebuchet MS'; font-size: 10pt;">Se proviamo a visualizzare dei dati gerarchici non facendo nessuna modifica alle nested list,&nbsp;apparirebbe qualcosa di questo tipo:</p><p style="font-family: 'Trebuchet MS'; font-size: 10pt;"><img src="http://blogs.dotnethell.it/filestore/11121_JqueryMobileTreeview_1.png"></p><p style="font-family: 'Trebuchet MS'; font-size: 10pt;"><br></p><p style="font-family: 'Trebuchet MS'; font-size: 10pt;">Ed effettivamente le liste sono sì annidate, ma l'aspetto è abbastanza diverso da una treeview...come spesso capita, siamo vicini alla soluzione ma ancora non è qualcosa che possa andare bene.<br>Allora è bastato affiancare un po' di css e combinare i vari tag per comporre le liste annidate, in modo da avere &lt;li&gt; con dentro altre "&lt;ul data-role="listview" e soprattutto avere un "&lt;h3&gt;" vuoto che funga poi da "+" dell'albero...</p><p style="font-family: 'Trebuchet MS'; font-size: 10pt;"><strong>Esempio di Html per la treeview </strong>(il testo "cartella" e il link "#" sono puramente d'esempio):</p><font face="Trebuchet MS" size="2"><span lang="IT"></span></font><p style="font-family: 'Trebuchet MS'; font-size: 10pt;"><font color="#0000ff" size="2"><font color="#0000ff" size="2">&lt;</font></font><font color="#a31515" size="2"><font color="#a31515" size="2">div</font></font><font size="2"> </font><font color="#ff0000" size="2"><font color="#ff0000" size="2">class</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">="treeview"&gt;<br>&nbsp;&nbsp; </font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&lt;</font></font><font color="#a31515" size="2"><font color="#a31515" size="2">ul</font></font><font size="2"> </font><font color="#ff0000" size="2"><font color="#ff0000" size="2">data-role</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">="listview"</font></font><font size="2"> </font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&lt;</font></font><font color="#a31515" size="2"><font color="#a31515" size="2">li</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&gt;&lt;</font></font><font color="#a31515" size="2"><font color="#a31515" size="2">a</font></font><font size="2"> </font><font color="#ff0000" size="2"><font color="#ff0000" size="2">href</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">="#"&gt;</font></font><font size="2">Cartella</font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&lt;/</font></font><font color="#a31515" size="2"><font color="#a31515" size="2">a</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&gt;&lt;/</font></font><font color="#a31515" size="2"><font color="#a31515" size="2">li</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&lt;</font></font><font color="#a31515" size="2"><font color="#a31515" size="2">li</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&lt;</font></font><font color="#a31515" size="2"><font color="#a31515" size="2">a</font></font><font size="2"> </font><font color="#ff0000" size="2"><font color="#ff0000" size="2">href</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">="#"&gt;</font></font><font size="2">Cartella</font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&lt;/</font></font><font color="#a31515" size="2"><font color="#a31515" size="2">a</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&lt;</font></font><font color="#a31515" size="2"><font color="#a31515" size="2">div</font></font><font size="2"> </font><font color="#ff0000" size="2"><font color="#ff0000" size="2">data-role</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">="collapsible"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&lt;</font></font><font color="#a31515" size="2"><font color="#a31515" size="2">h3</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&gt;&lt;/</font></font><font color="#a31515" size="2"><font color="#a31515" size="2">h3</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&lt;</font></font><font color="#a31515" size="2"><font color="#a31515" size="2">ul</font></font><font size="2"> </font><font color="#ff0000" size="2"><font color="#ff0000" size="2">data-role</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">="listview"</font></font><font size="2"> </font><font color="#ff0000" size="2"><font color="#ff0000" size="2">data-inset</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">="true"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2"><font color="#0000ff" size="2"><font color="#0000ff" size="2">&lt;</font></font><font color="#a31515" size="2"><font color="#a31515" size="2">li</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&gt;&lt;</font></font><font color="#a31515" size="2"><font color="#a31515" size="2">a</font></font><font color="#000000" size="2"> </font><font color="#ff0000" size="2"><font color="#ff0000" size="2">href</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">="#"&gt;</font></font><font color="#000000" size="2">Cartella</font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&lt;/</font></font><font color="#a31515" size="2"><font color="#a31515" size="2">a</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&gt;&lt;/</font></font><font color="#a31515" size="2"><font color="#a31515" size="2">li</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&gt;</font></font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .....<br></font></font><br><br><br><strong>Adesso ci applichiamo un foglio di stile</strong> (<em>wrappato tutto in un div per non intaccare l'aspetto al di fuori della treeview</em>):</p><p style="font-family: 'Trebuchet MS'; font-size: 10pt;"><font face="Consolas"> <font color="#800000" size="2"><font color="#800000" size="2"><font color="#800000" size="2"><font color="#006400">/* è il nodo root, con la classe "treeview" trascurabile&nbsp;*/</font><font face="Consolas" size="2"><font color="#000000" face="Consolas" size="2">&nbsp;</font></font><font color="#006400" face="Consolas" size="2"><font color="#006400" face="Consolas" size="2"><font color="#006400" face="Consolas" size="2">&nbsp;</font></font></font><br></font></font></font></font><font color="#800000" face="Consolas" size="2"><font color="#800000" face="Consolas" size="2"><font color="#800000" face="Consolas" size="2">.treeview</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> { </font></font><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2">display</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">:</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">block</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">; </font></font><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2">clear</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">:</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">both</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">; </font></font><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2">min-height</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">:</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">20px; <font color="#000000">}</font></font></font></font></p><font face="Consolas" size="2" style="font-family: 'Trebuchet MS'; font-size: 10pt;"><p><br></p><p><font color="#006400" face="Consolas" size="2"><font color="#006400" face="Consolas" size="2"><font color="#006400" face="Consolas" size="2">/*</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#006400" face="Consolas" size="2"><font color="#006400" face="Consolas" size="2"><font color="#006400" face="Consolas" size="2">header della lista annidata, spostato in alto e rimpicciolito</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#006400" face="Consolas" size="2"><font color="#006400" face="Consolas" size="2"><font color="#006400" face="Consolas" size="2">*/<br></font></font></font><font color="#006400"><font color="#800000" face="Consolas" size="2"><font color="#800000" face="Consolas" size="2"><font color="#800000" face="Consolas" size="2">.treeview</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#800000" face="Consolas" size="2"><font color="#800000" face="Consolas" size="2"><font color="#800000" face="Consolas" size="2">h3</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> { <br></font></font><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2">&nbsp;&nbsp; height</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">: </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">30px</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">; <font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2">width</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">: </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">40px</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">;</font></font><br>&nbsp;&nbsp; </font></font></font><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2">margin-left</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">: </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">-5px</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">!important</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">;<br></font></font><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2">&nbsp;&nbsp; margin-top</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">: </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">-45px</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">!important</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">;&nbsp;</font></font><font face="Consolas" size="2"><font face="Consolas" size="2"><br></font></font><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2">&nbsp;&nbsp; z-index</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">: </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">100</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">; <br>}</font></font></p></font><p style="font-family: 'Trebuchet MS'; font-size: 10pt;"><font color="#800000" face="Consolas" size="2"><font color="#800000" face="Consolas" size="2"><font color="#800000" face="Consolas" size="2">.treeview</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#800000" face="Consolas" size="2"><font color="#800000" face="Consolas" size="2"><font color="#800000" face="Consolas" size="2">h3</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#800000" face="Consolas" size="2"><font color="#800000" face="Consolas" size="2"><font color="#800000" face="Consolas" size="2">a</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> {<br></font></font><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2">&nbsp;&nbsp; background-color</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">:</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">transparent</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">!important</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">;<br></font></font><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2">&nbsp;&nbsp; display</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">:</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">inline</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">!important</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">;<br></font></font><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2">&nbsp;&nbsp; width</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">:</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">10pt</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">!important</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">;<br></font></font><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2">&nbsp;&nbsp; border</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">:</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">none</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">!important;</font></font></font></p><font face="Consolas" size="2" style="font-family: 'Trebuchet MS'; font-size: 10pt;"><font face="Consolas" size="2"><p>}</p><font face="Consolas" size="2"><p><br></p><font face="Consolas" size="2"><font color="#006400" face="Consolas" size="2"><font color="#006400" face="Consolas" size="2"><font color="#006400" face="Consolas" size="2"><p>/* spostiamo il&nbsp;link della&nbsp;riga fuori dal&nbsp;"+" mettendo padding a&nbsp;destra */<br><font color="#800000" face="Consolas" size="2"><font color="#800000" face="Consolas" size="2"><font color="#800000" face="Consolas" size="2">.treeview</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> </font></font><font color="#800000" face="Consolas" size="2"><font color="#800000" face="Consolas" size="2"><font color="#800000" face="Consolas" size="2">a</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> { </font></font><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2"><font color="#ff0000" face="Consolas" size="2">padding-left</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">:</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">30px</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">; }</font></font></p></font></font></font></font></font><font face="Consolas" size="2"><p><br></p></font></font></font><font face="Consolas" size="2" style="font-family: 'Trebuchet MS'; font-size: 10pt;"><p><br></p></font><p style="font-family: 'Trebuchet MS'; font-size: 10pt;">Il risultato è gradevole e soprattutto utilizzabile bene con il touch, in perfetto stile JqueryMobile:</p><p style="font-family: 'Trebuchet MS'; font-size: 10pt;"><img src="http://blogs.dotnethell.it/filestore/11122_JqueryMobileTreeview_2.png"><br></p><p style="font-family: 'Trebuchet MS'; font-size: 10pt;"><br></p><p style="font-family: 'Trebuchet MS'; font-size: 10pt;">Ed è possibile andare in profondità per quanto si desidera, per lo meno finchè resta "utilizzabile" dal dispositivo.<br>Un po' di lavoro certosino, ma alla fine un buon risultato.<br><br></p><p><em style="font-family: 'Trebuchet MS'; font-size: 10pt;">* per l'esempio è stata usata la versione 1.4 beta, i sorgenti sono disponibili qui:<br></em><a href="http://www.dotnethell.it/users/files/1942_jquerymobile-tree.zip">http://www.dotnethell.it/users/files/1942_jquerymobile-tree.zip&nbsp;</a></p> Matteo Raumer 3 http://blogs.dotnethell.it/freeteo/ReadComment_19387.aspx Tips