<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CEMER385eCp7ImA9WhRaFEg.&quot;"><id>tag:blogger.com,1999:blog-2975568796191595801</id><updated>2012-02-17T05:20:06.120+01:00</updated><category term="c#" /><category term="visual studio" /><category term="umbraco" /><category term="compact framework c# datatable file" /><category term="linq" /><category term="javascript" /><category term="nopcommerce" /><category term="sql" /><category term="java" /><category term="razor" /><category term="microsoft" /><category term="asp.net" /><category term="vs 2008" /><category term="vb.net" /><title>IT Experience</title><subtitle type="html">The taste of programming</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.panzuto.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.panzuto.com/" /><author><name>Giuseppe Panzuto</name><uri>http://www.blogger.com/profile/10499340861300016020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="31" src="http://3.bp.blogspot.com/-fMooz4zPIHE/Td5m-W0ln7I/AAAAAAAABb8/6sdaypnLoaY/s220/Picture0012.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>16</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/Gpanz" /><feedburner:info uri="gpanz" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DkcHQ3w7fyp7ImA9WhdQEEo.&quot;"><id>tag:blogger.com,1999:blog-2975568796191595801.post-1990027154134330638</id><published>2011-08-11T16:47:00.001+02:00</published><updated>2011-08-11T16:47:12.207+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-11T16:47:12.207+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="asp.net" /><category scheme="http://www.blogger.com/atom/ns#" term="umbraco" /><category scheme="http://www.blogger.com/atom/ns#" term="c#" /><category scheme="http://www.blogger.com/atom/ns#" term="razor" /><category scheme="http://www.blogger.com/atom/ns#" term="nopcommerce" /><title>ASP.NET Razor creare un banner per NopCommerce</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IRg1Kq3xhoj8SLNGxTxOn5k9-kI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IRg1Kq3xhoj8SLNGxTxOn5k9-kI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IRg1Kq3xhoj8SLNGxTxOn5k9-kI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IRg1Kq3xhoj8SLNGxTxOn5k9-kI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Ho creato un semplice script in razor per umbraco, ma che può essere utilizzato anche in ASP.NET MVC che permette di ottenere un semplice banner con 4 prodotti tra quelli presenti in vetrina in un sito di e-commerce fatto con NopCommerce. Per funzionare però è necessario potersi connettere direttamente al database di nop.&lt;/p&gt; &lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;@{&lt;/pre&gt;&lt;pre&gt;    var connStr = System.Configuration.ConfigurationManager.AppSettings[&lt;span class="str"&gt;"commerceDbDSN"&lt;/span&gt;];&lt;/pre&gt;&lt;pre class="alt"&gt;    var t_prodotti = &lt;span class="kwrd"&gt;new&lt;/span&gt; System.Data.DataTable();&lt;/pre&gt;&lt;pre&gt;    &lt;span class="kwrd"&gt;var&lt;/span&gt; commerceAddress = &lt;span class="str"&gt;"http://www.myecommerce.com"&lt;/span&gt;;&lt;/pre&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;    &lt;span class="kwrd"&gt;string&lt;/span&gt; sql =&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="str"&gt;"SELECT TOP 4 "&lt;/span&gt; +&lt;/pre&gt;&lt;pre&gt;            &lt;span class="str"&gt;"prod.ProductId, prod.ShortDescription, prod.SEName, pict.PictureID "&lt;/span&gt; +&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="str"&gt;"FROM "&lt;/span&gt; +&lt;/pre&gt;&lt;pre&gt;            &lt;span class="str"&gt;"Nop_Product as prod JOIN "&lt;/span&gt; +&lt;/pre&gt;&lt;pre class="alt"&gt;            &lt;span class="str"&gt;"Nop_ProductPicture as pict ON prod.ProductId = pict.ProductId "&lt;/span&gt; +&lt;/pre&gt;&lt;pre&gt;        &lt;span class="str"&gt;"WHERE ShowOnHomePage = 1 and Deleted = 0 "&lt;/span&gt; +&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="str"&gt;"ORDER BY NEWID()"&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;    &lt;/pre&gt;&lt;pre class="alt"&gt;    (&lt;span class="kwrd"&gt;new&lt;/span&gt; System.Data.SqlClient.SqlDataAdapter(sql, connStr)).Fill(t_prodotti);&lt;/pre&gt;&lt;pre&gt;}&lt;/pre&gt;&lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&amp;lt;div &lt;span class="kwrd"&gt;class&lt;/span&gt;=&lt;span class="str"&gt;"home-page-product-grid"&lt;/span&gt;&amp;gt;&lt;/pre&gt;&lt;pre&gt;    &amp;lt;table&amp;gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        &amp;lt;tr&amp;gt;&lt;/pre&gt;&lt;pre&gt;            @&lt;span class="kwrd"&gt;foreach&lt;/span&gt; (System.Data.DataRow product &lt;span class="kwrd"&gt;in&lt;/span&gt; t_prodotti.Rows)&lt;/pre&gt;&lt;pre class="alt"&gt;            {&lt;/pre&gt;&lt;pre&gt;                &lt;span class="kwrd"&gt;string&lt;/span&gt; descrizione = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"{0}"&lt;/span&gt;, product[&lt;span class="str"&gt;"ShortDescription"&lt;/span&gt;]).Replace(&lt;span class="str"&gt;'"'&lt;/span&gt;, &lt;span class="str"&gt;'\''&lt;/span&gt;);&lt;/pre&gt;&lt;pre class="alt"&gt;                &lt;span class="kwrd"&gt;string&lt;/span&gt; pagina = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"{0}-{1}.aspx"&lt;/span&gt;, product[&lt;span class="str"&gt;"ProductId"&lt;/span&gt;], product[&lt;span class="str"&gt;"SEName"&lt;/span&gt;]);&lt;/pre&gt;&lt;pre&gt;                &lt;span class="kwrd"&gt;string&lt;/span&gt; img = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"{0:0000000}_125.jpeg"&lt;/span&gt;, product[&lt;span class="str"&gt;"PictureId"&lt;/span&gt;]);&lt;/pre&gt;&lt;pre class="alt"&gt;                &lt;/pre&gt;&lt;pre&gt;                &amp;lt;td &lt;span class="kwrd"&gt;class&lt;/span&gt;=&lt;span class="str"&gt;"item-box"&lt;/span&gt;&amp;gt;&lt;/pre&gt;&lt;pre class="alt"&gt;                    &amp;lt;div &lt;span class="kwrd"&gt;class&lt;/span&gt;=&lt;span class="str"&gt;"product-item"&lt;/span&gt;&amp;gt;&lt;/pre&gt;&lt;pre&gt;                        &amp;lt;div &lt;span class="kwrd"&gt;class&lt;/span&gt;=&lt;span class="str"&gt;"picture"&lt;/span&gt;&amp;gt;&lt;/pre&gt;&lt;pre class="alt"&gt;                            &amp;lt;a title=&lt;span class="str"&gt;"@descrizione"&lt;/span&gt; href=&lt;span class="str"&gt;"@commerceAddress/prodotti/@pagina"&lt;/span&gt; target=&lt;span class="str"&gt;"_blank"&lt;/span&gt;&amp;gt;&lt;/pre&gt;&lt;pre&gt;                                &amp;lt;img title=&lt;span class="str"&gt;"@descrizione"&lt;/span&gt; src=&lt;span class="str"&gt;"@commerceAddress/images/thumbs/@img"&lt;/span&gt; alt=&lt;span class="str"&gt;"@descrizione"&lt;/span&gt; style=&lt;span class="str"&gt;"border-width:0px;"&lt;/span&gt; /&amp;gt;&lt;/pre&gt;&lt;pre class="alt"&gt;                            &amp;lt;/a&amp;gt;&lt;/pre&gt;&lt;pre&gt;                        &amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;pre class="alt"&gt;                        &amp;lt;h2 &lt;span class="kwrd"&gt;class&lt;/span&gt;=&lt;span class="str"&gt;"product-title"&lt;/span&gt;&amp;gt;&lt;/pre&gt;&lt;pre&gt;                            &amp;lt;a href=&lt;span class="str"&gt;"@commerceAddress/prodotti/@pagina"&lt;/span&gt; target=&lt;span class="str"&gt;"_blank"&lt;/span&gt;&amp;gt;@descrizione&amp;lt;/a&amp;gt;&lt;/pre&gt;&lt;pre class="alt"&gt;                        &amp;lt;/h2&amp;gt;&lt;/pre&gt;&lt;pre&gt;                    &amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;pre class="alt"&gt;                &amp;lt;/td&amp;gt;&lt;/pre&gt;&lt;pre&gt;            }&lt;/pre&gt;&lt;pre class="alt"&gt;        &amp;lt;/tr&amp;gt;&lt;/pre&gt;&lt;pre&gt;    &amp;lt;/table&amp;gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2975568796191595801-1990027154134330638?l=www.panzuto.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gpanz/~4/BryzQ-tAzCs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.panzuto.com/feeds/1990027154134330638/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.panzuto.com/2011/08/aspnet-razor-creare-un-banner-per.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2975568796191595801/posts/default/1990027154134330638?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2975568796191595801/posts/default/1990027154134330638?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Gpanz/~3/BryzQ-tAzCs/aspnet-razor-creare-un-banner-per.html" title="ASP.NET Razor creare un banner per NopCommerce" /><author><name>Giuseppe Panzuto</name><uri>http://www.blogger.com/profile/10499340861300016020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="31" src="http://3.bp.blogspot.com/-fMooz4zPIHE/Td5m-W0ln7I/AAAAAAAABb8/6sdaypnLoaY/s220/Picture0012.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.panzuto.com/2011/08/aspnet-razor-creare-un-banner-per.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcERn44eSp7ImA9WhdQEEo.&quot;"><id>tag:blogger.com,1999:blog-2975568796191595801.post-1669890920515442440</id><published>2011-08-11T16:30:00.001+02:00</published><updated>2011-08-11T16:30:07.031+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-11T16:30:07.031+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sql" /><title>T-SQL selezionare record casuali</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/YW3_kRH3n_Y6lPl8S6wsbSwsvgo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YW3_kRH3n_Y6lPl8S6wsbSwsvgo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/YW3_kRH3n_Y6lPl8S6wsbSwsvgo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YW3_kRH3n_Y6lPl8S6wsbSwsvgo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Mi sono trovato recentemente nella necessita di creare un banner pubblicitario scegliendo casualmente alcuni prodotti tra quelli presenti in un e-commerce. Non essendoci un metodo nativo per il compito ho dovuto improvvisare : &lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;span class="kwrd"&gt;TOP&lt;/span&gt; 4&lt;/pre&gt;&lt;pre&gt;    prod.ProductId, prod.ShortDescription, prod.SEName&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;FROM&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;    Nop_Product &lt;span class="kwrd"&gt;as&lt;/span&gt; prod&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;WHERE&lt;/span&gt; ShowOnHomePage = 1 &lt;span class="kwrd"&gt;and&lt;/span&gt; Deleted = 0&lt;/pre&gt;&lt;pre&gt;&lt;span class="kwrd"&gt;ORDER&lt;/span&gt; &lt;span class="kwrd"&gt;BY&lt;/span&gt; NEWID()&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2975568796191595801-1669890920515442440?l=www.panzuto.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gpanz/~4/h1CRbBolyQo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.panzuto.com/feeds/1669890920515442440/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.panzuto.com/2011/08/t-sql-selezionare-record-casuali.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2975568796191595801/posts/default/1669890920515442440?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2975568796191595801/posts/default/1669890920515442440?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Gpanz/~3/h1CRbBolyQo/t-sql-selezionare-record-casuali.html" title="T-SQL selezionare record casuali" /><author><name>Giuseppe Panzuto</name><uri>http://www.blogger.com/profile/10499340861300016020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="31" src="http://3.bp.blogspot.com/-fMooz4zPIHE/Td5m-W0ln7I/AAAAAAAABb8/6sdaypnLoaY/s220/Picture0012.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.panzuto.com/2011/08/t-sql-selezionare-record-casuali.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8EQ30ycSp7ImA9WhdQEEw.&quot;"><id>tag:blogger.com,1999:blog-2975568796191595801.post-8489952719249892128</id><published>2011-08-10T23:46:00.001+02:00</published><updated>2011-08-10T23:46:42.399+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-10T23:46:42.399+02:00</app:edited><title>Gestire finestre ajax</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zv05xur4iu-eJ9JI5kL1kGLE2SM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zv05xur4iu-eJ9JI5kL1kGLE2SM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zv05xur4iu-eJ9JI5kL1kGLE2SM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zv05xur4iu-eJ9JI5kL1kGLE2SM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Capita ormai sempre più spesso di avere a che fare con ajax, è utile perciò creare qualche funzione helper, in grado di facilitare i compiti più comuni. Sfruttando la potenza di jquery e di jquery.ui ho scritto due semplici funzioni in grado di aprire e chiudere un dialog javascript caricando il contenuto tramite una chiamata :&lt;/p&gt; &lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; sm = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;function&lt;/span&gt; () {&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;this&lt;/span&gt;.ajaxDialog = &lt;span class="kwrd"&gt;function&lt;/span&gt; (src, data, title) {&lt;/pre&gt;&lt;pre&gt;        &lt;span class="kwrd"&gt;var&lt;/span&gt; dialog = $(&lt;span class="str"&gt;'&amp;lt;div class="smdialog"&amp;gt;&amp;lt;/div&amp;gt;'&lt;/span&gt;);&lt;/pre&gt;&lt;pre class="alt"&gt;        $(&lt;span class="str"&gt;'body'&lt;/span&gt;).append(dialog);&lt;/pre&gt;&lt;pre&gt;        $(dialog).append(&lt;span class="str"&gt;"&amp;lt;img src='/Content/images/loading.gif' alt='loading' /&amp;gt;"&lt;/span&gt;);&lt;/pre&gt;&lt;pre class="alt"&gt;        $(dialog).dialog({&lt;/pre&gt;&lt;pre&gt;            autoOpen: &lt;span class="kwrd"&gt;true&lt;/span&gt;,&lt;/pre&gt;&lt;pre class="alt"&gt;            modal: &lt;span class="kwrd"&gt;true&lt;/span&gt;,&lt;/pre&gt;&lt;pre&gt;            title: &lt;span class="str"&gt;'Caricamento...'&lt;/span&gt;,&lt;/pre&gt;&lt;pre class="alt"&gt;            width: &lt;span class="str"&gt;'auto'&lt;/span&gt;,&lt;/pre&gt;&lt;pre&gt;            position: &lt;span class="str"&gt;'center'&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;        });&lt;/pre&gt;&lt;pre&gt;        $(dialog).load(&lt;/pre&gt;&lt;pre class="alt"&gt;            src,&lt;/pre&gt;&lt;pre&gt;            data,&lt;/pre&gt;&lt;pre class="alt"&gt;            &lt;span class="kwrd"&gt;function&lt;/span&gt; () {&lt;/pre&gt;&lt;pre&gt;                $(dialog).dialog({&lt;/pre&gt;&lt;pre class="alt"&gt;                    autoOpen: &lt;span class="kwrd"&gt;true&lt;/span&gt;,&lt;/pre&gt;&lt;pre&gt;                    modal: &lt;span class="kwrd"&gt;true&lt;/span&gt;,&lt;/pre&gt;&lt;pre class="alt"&gt;                    title: title,&lt;/pre&gt;&lt;pre&gt;                    width: &lt;span class="str"&gt;'auto'&lt;/span&gt;,&lt;/pre&gt;&lt;pre class="alt"&gt;                    position: &lt;span class="str"&gt;'center'&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;                });&lt;/pre&gt;&lt;pre class="alt"&gt;                $(dialog).dialog(&lt;span class="str"&gt;'open'&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;            }&lt;/pre&gt;&lt;pre class="alt"&gt;        );&lt;/pre&gt;&lt;pre&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; dialog;&lt;/pre&gt;&lt;pre class="alt"&gt;    }&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;this&lt;/span&gt;.closeDialog = &lt;span class="kwrd"&gt;function&lt;/span&gt; (element) {&lt;/pre&gt;&lt;pre&gt;        &lt;span class="kwrd"&gt;var&lt;/span&gt; dialog = &lt;span class="kwrd"&gt;null&lt;/span&gt;;&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; ($(element).hasClass(&lt;span class="str"&gt;"smdialog"&lt;/span&gt;))&lt;/pre&gt;&lt;pre&gt;            dialog = $(element);&lt;/pre&gt;&lt;pre class="alt"&gt;        &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;            dialog = $(element).parent(&lt;span class="str"&gt;'.smdialog'&lt;/span&gt;);&lt;/pre&gt;&lt;pre class="alt"&gt;        dialog.dialog(&lt;span class="str"&gt;'close'&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;        dialog.remove();&lt;/pre&gt;&lt;pre class="alt"&gt;    }&lt;/pre&gt;&lt;pre&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;adesso possiamo aprire una finestra di dialogo attraverso un link &lt;/p&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;a&lt;/span&gt; &lt;span class="attr"&gt;href&lt;/span&gt;&lt;span class="kwrd"&gt;="javascript:void(0)"&lt;/span&gt; &lt;span class="attr"&gt;onclick&lt;/span&gt;&lt;span class="kwrd"&gt;="sm.ajaxDialog('/Product/Edit/@product.ProductId', null, '@product.Name')"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Modifica&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;a&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;per chiudere la finestra dobbiamo fare riferimento ad un qualsiasi elemento presente nella finestra o alla finestra stessa se abbiamo conservato il riferimento. Solitamente capita di voler chiudere la finestra dopo aver inviato i dati di un form, quindi :&lt;/p&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;$(&lt;span class="str"&gt;"#edit_form"&lt;/span&gt;).ajaxForm({&lt;/pre&gt;&lt;pre&gt;    success: &lt;span class="kwrd"&gt;function&lt;/span&gt; () { sm.closeDialog(&lt;span class="str"&gt;'#edit_form'&lt;/span&gt;); }&lt;/pre&gt;&lt;pre class="alt"&gt;});&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2975568796191595801-8489952719249892128?l=www.panzuto.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gpanz/~4/kg4U4Yn0D1c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.panzuto.com/feeds/8489952719249892128/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.panzuto.com/2011/08/gestire-finestre-ajax.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2975568796191595801/posts/default/8489952719249892128?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2975568796191595801/posts/default/8489952719249892128?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Gpanz/~3/kg4U4Yn0D1c/gestire-finestre-ajax.html" title="Gestire finestre ajax" /><author><name>Giuseppe Panzuto</name><uri>http://www.blogger.com/profile/10499340861300016020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="31" src="http://3.bp.blogspot.com/-fMooz4zPIHE/Td5m-W0ln7I/AAAAAAAABb8/6sdaypnLoaY/s220/Picture0012.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.panzuto.com/2011/08/gestire-finestre-ajax.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0IERXs_eip7ImA9WhdRGUQ.&quot;"><id>tag:blogger.com,1999:blog-2975568796191595801.post-6847229708507062969</id><published>2011-08-10T18:58:00.001+02:00</published><updated>2011-08-10T18:58:24.542+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-10T18:58:24.542+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="visual studio" /><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><title>Creare un helper in JavaScript</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3WagR995LbTgQ3LgPFC86oPlZAk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3WagR995LbTgQ3LgPFC86oPlZAk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3WagR995LbTgQ3LgPFC86oPlZAk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3WagR995LbTgQ3LgPFC86oPlZAk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Spesso si ha la necessità di raggruppare delle funzioni in namespace per evitare che si verifichino conflitti. Ma in javascript non esistono namespace e neanche classi con metodi statici. Per ottenere quello che vogliamo è possibile utilizzare la seguente sintassi :&lt;/p&gt; &lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; helper = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;function&lt;/span&gt; () {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;this&lt;/span&gt;.saluta = &lt;span class="kwrd"&gt;function&lt;/span&gt;(nome) {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;        alert(&lt;span class="str"&gt;"Ciao "&lt;/span&gt; + nome);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;l’utilizzo è molto semplice, basta richiamare helper.saluta(‘Giuseppe’);. Ad esempio per eseguire la funzione saluta al caricamento della pagina :&lt;/p&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;$(&lt;span class="kwrd"&gt;function&lt;/span&gt;(){&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    helper.saluta(&lt;span class="str"&gt;'Giuseppe'&lt;/span&gt;);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;})&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Utilizzare questo sistema permette di riutilizzare facilmente il codice in progetti diversi, senza preoccuparsi troppo di non creare conflitti con i nomi.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2975568796191595801-6847229708507062969?l=www.panzuto.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gpanz/~4/SmOAKPS-pPE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.panzuto.com/feeds/6847229708507062969/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.panzuto.com/2011/08/creare-un-helper-in-javascript.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2975568796191595801/posts/default/6847229708507062969?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2975568796191595801/posts/default/6847229708507062969?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Gpanz/~3/SmOAKPS-pPE/creare-un-helper-in-javascript.html" title="Creare un helper in JavaScript" /><author><name>Giuseppe Panzuto</name><uri>http://www.blogger.com/profile/10499340861300016020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="31" src="http://3.bp.blogspot.com/-fMooz4zPIHE/Td5m-W0ln7I/AAAAAAAABb8/6sdaypnLoaY/s220/Picture0012.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.panzuto.com/2011/08/creare-un-helper-in-javascript.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU8ASXY-fSp7ImA9Wx9WF0U.&quot;"><id>tag:blogger.com,1999:blog-2975568796191595801.post-2927488601587173447</id><published>2011-01-23T12:57:00.001+01:00</published><updated>2011-01-23T12:57:28.855+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-23T12:57:28.855+01:00</app:edited><title>Entity Framework Code-First</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/10_csdjniYK2P6EBKPub6L6LIeE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/10_csdjniYK2P6EBKPub6L6LIeE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/10_csdjniYK2P6EBKPub6L6LIeE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/10_csdjniYK2P6EBKPub6L6LIeE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Finalmente una buona notizia dal fronte dell’accesso ai dati tramite .net framework. Tutti gli appassionati di linguaggi come python sanno quanto sia comodo poter definire il mapping ai dati tramite la definizione di classi (in .net si direbbe “Plain Old CLR Object” cioè POCO). Questa funzionalità ci permette di scrivere semplici classi che espongono proprietà che automaticamente verranno mappate del db. La cosa bella di tutto ciò è che dopo anni di file di configurazione in xaml e di editor che configurano le più svariale cose, si è deciso di utilizzare la filosofia “convention over configuration”, cioè basta strutturare le classi in un certo modo per definire automaticamente la struttura delle tabelle, ad esempio la chiave primaria sarà la proprietà che ha lo stesso nome della classe seguita da “ID”:&lt;/p&gt;&lt;pre class="brush: csharp; auto-links: true; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;public class Cliente &lt;br /&gt;{&lt;br /&gt;    public int ClienteID { get; set; }&lt;br /&gt;}&lt;/pre&gt;&lt;pre class="brush: csharp; auto-links: true; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&lt;font face="Trebuchet MS"&gt;ciò significa che le classi che andremo a scrivere o a leggere saranno tutte scritte con la stessa convenzione e di conseguenza, saranno più comprensibili. Questo è il link con &lt;a href="http://blogs.msdn.com/b/efdesign/archive/2010/06/01/conventions-for-code-first.aspx" target="_blank"&gt;l'elenco delle convenzioni&lt;/a&gt; da stampare e appendere in ufficio &lt;img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Occhiolino" src="http://lh6.ggpht.com/_8sY7gK_EW88/TTwXp3JGiGI/AAAAAAAABZg/Xnz8Qj4rjRQ/wlEmoticon-winkingsmile%5B2%5D.png?imgmax=800"&gt;.&lt;/font&gt;&lt;/pre&gt;&lt;pre class="brush: csharp; auto-links: true; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&lt;font face="Trebuchet MS"&gt;Vi consiglio di leggere &lt;a href="http://weblogs.asp.net/scottgu/archive/2010/12/08/announcing-entity-framework-code-first-ctp5-release.aspx" target="_blank"&gt;il post del grande Scott Guthrie&lt;/a&gt;, con gli esempi pratici.&lt;/font&gt;&lt;/pre&gt;&lt;pre class="brush: csharp; auto-links: true; collapse: false; first-line: 1; gutter: true; html-script: false; light: false; ruler: false; smart-tabs: true; tab-size: 4; toolbar: true;"&gt;&lt;font face="Trebuchet MS"&gt;Ora manca solo di sfruttare l’indentazione per definire i blocchi come fa python…&lt;/font&gt;&lt;/pre&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2975568796191595801-2927488601587173447?l=www.panzuto.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gpanz/~4/cGCnodMiv7A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.panzuto.com/feeds/2927488601587173447/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.panzuto.com/2011/01/entity-framework-code-first.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2975568796191595801/posts/default/2927488601587173447?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2975568796191595801/posts/default/2927488601587173447?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Gpanz/~3/cGCnodMiv7A/entity-framework-code-first.html" title="Entity Framework Code-First" /><author><name>Giuseppe Panzuto</name><uri>http://www.blogger.com/profile/10499340861300016020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="31" src="http://3.bp.blogspot.com/-fMooz4zPIHE/Td5m-W0ln7I/AAAAAAAABb8/6sdaypnLoaY/s220/Picture0012.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_8sY7gK_EW88/TTwXp3JGiGI/AAAAAAAABZg/Xnz8Qj4rjRQ/s72-c/wlEmoticon-winkingsmile%5B2%5D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.panzuto.com/2011/01/entity-framework-code-first.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcCRHgzfCp7ImA9Wx9WE0U.&quot;"><id>tag:blogger.com,1999:blog-2975568796191595801.post-3352897758479846467</id><published>2011-01-18T22:41:00.001+01:00</published><updated>2011-01-18T22:44:25.684+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-18T22:44:25.684+01:00</app:edited><title>Test di connessione a Postgresql</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IDFinPWck-3aysvcMVvaVGMM8U4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IDFinPWck-3aysvcMVvaVGMM8U4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IDFinPWck-3aysvcMVvaVGMM8U4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IDFinPWck-3aysvcMVvaVGMM8U4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="line-height: 14px;"&gt;Testata la connettività tramite ssl ad un server postgresql su ubuntu server 10.10 virtualizzato con virtualbox nel sistema operativo host windows 7 professional connessi tra loro tramite rete virtuale con bridge alla lan fisica. Test eseguito da un applicativo .net, in debug con visual studio 2010, che sfrutta la mia libreria DataHelper che si connette tramite il driver ado.net Npgsql... FUNZIONA!&lt;/span&gt;&lt;script type="text/javascript"&gt;
&lt;!--
google_ad_client = "pub-3562187808075234";
/* Rettangolone */
google_ad_slot = "9388752835";
google_ad_width = 336;
google_ad_height = 280;
//--&gt;
&lt;/script&gt; &lt;script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"&gt;
&lt;/script&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit; line-height: 14px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit; line-height: 14px;"&gt;Un consiglio per chi volesse provarci, non provate la connessione diretta solo host, non funziona!&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit; line-height: 14px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="line-height: 14px;"&gt;Adesso non mi resta che testare il tutto su internet... speriamo bene&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: 11px; line-height: 14px;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2975568796191595801-3352897758479846467?l=www.panzuto.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gpanz/~4/iP7Lt-odHtE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.panzuto.com/feeds/3352897758479846467/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.panzuto.com/2011/01/test-di-connessione-postgresql.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2975568796191595801/posts/default/3352897758479846467?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2975568796191595801/posts/default/3352897758479846467?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Gpanz/~3/iP7Lt-odHtE/test-di-connessione-postgresql.html" title="Test di connessione a Postgresql" /><author><name>Giuseppe Panzuto</name><uri>http://www.blogger.com/profile/10499340861300016020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="31" src="http://3.bp.blogspot.com/-fMooz4zPIHE/Td5m-W0ln7I/AAAAAAAABb8/6sdaypnLoaY/s220/Picture0012.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.panzuto.com/2011/01/test-di-connessione-postgresql.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUCQX88fyp7ImA9WxNRGU4.&quot;"><id>tag:blogger.com,1999:blog-2975568796191595801.post-6947736132892360608</id><published>2009-09-14T14:11:00.001+02:00</published><updated>2009-09-14T14:11:00.177+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-14T14:11:00.177+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="compact framework c# datatable file" /><title>[Compact .Net] Memorizzare impostazioni su file</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/yFh6AV2-2j7jYMqWBlyY9bZK2cc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yFh6AV2-2j7jYMqWBlyY9bZK2cc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/yFh6AV2-2j7jYMqWBlyY9bZK2cc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yFh6AV2-2j7jYMqWBlyY9bZK2cc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;La stragrande maggioranza degli applicativi che scriviamo, necessita di memorizzare valori permanentemente. Il modo più semplice per ottenere questo risultato è di salvare i dati all'interno di un file. I file, pero, possono essere utilizzati in decine di modi differenti e il framework, nella sua enorme flessibilità, non fornisce un modo semplice per farlo. E utile in questi casi scrivere delle piccole classi che generamente chiamo (e non sono l'unico) helper, cioè delle classi "aiutanti" che fanno il lavoro sporco per noi. Queste classi sono in grado di fare solo un minimo di operazioni con una flessibilità spesso direttamente proporzionale al numero di metodi e proprietà pubbliche.&lt;br /&gt;
Inoltre, In piena mentalità OOP, è buona cosa progettare tale classe in modo che si possa ereditare da essa modificandone i valori costanti, sfruttando così al massimo le migliori qualità di questa tecnica, cioè la riutilizzabilità e la longevità del codice.&lt;br /&gt;
Posto quì una piccola classe "helper" in grado di adempiere al compito con molta semplicità :&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;using System;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;using System.Data;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;using System.IO;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt; class Settings&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataTable t_settings;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected virtual string filename&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { get { return "setts.xml"; } }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected virtual string filepath&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { get { return Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\my_app\"; } }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private string get_absolute_filename()&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return filepath + filename;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string GetValue(string key)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string result = "";&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataRow[] results = get_db().Select("property_name = '" + key + "'");&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (results.Length &amp;gt; 0)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; result = results[0].Field&lt;string&gt;("property_value");&lt;/string&gt;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return result;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void SetValue(string key, string value)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataRow[] results = get_db().Select("property_name = '" + key + "'");&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (results.Length &amp;gt; 0)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; results[0].SetField&lt;string&gt;("property_value", value);&lt;/string&gt;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataRow r = get_db().NewRow();&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r.SetField&lt;string&gt;("property_name", key);&lt;/string&gt;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r.SetField&lt;string&gt;("property_value", value);&lt;/string&gt;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get_db().Rows.Add(r);&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; save();&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void Reload()&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { t_settings = null; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void load()&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t_settings = new DataTable();&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (System.IO.File.Exists(get_absolute_filename()))&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t_settings.ReadXml(get_absolute_filename());&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; create_table();&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void create_table()&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t_settings.TableName = "settings";&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t_settings.Columns.Add("property_name").Unique = true;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t_settings.Columns.Add("property_value");&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private DataTable get_db()&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (t_settings == null)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; load();&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return t_settings;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void save()&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DirectoryInfo di = new DirectoryInfo(filepath);&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!di.Exists) di.Create();&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get_db().WriteXml(get_absolute_filename(), XmlWriteMode.WriteSchema);&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;L'utilizzo di questa classe è molto semplice&lt;/span&gt; : si istanzia e si richiamano i metodi GetValue e SetValue. La possibilità di salvare e ottentere solo stringhe ci costringe a serializzare i valori prima di passarli alla classe, riducendo così la possibilità di errori di conversione. Naturalmente poi, la classe può essere ereditata modificando il nome del file e/o il percorso di salvataggio, e aggiungendo altre properietà o metodi :&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;using System;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt; class GeneralSettings : Settings&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected override string filename&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { get { return "general.xml"; } }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string ServerAddress&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { return GetValue("server_address"); }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set { SetValue("server_address", value); }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: inherit;"&gt;Quì, oltre che a cambiare &lt;/span&gt;il nome del file, ho creato una proprietà che salva e ottiene il valore di &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;server_address &lt;span style="font-family: inherit;"&gt;riducendo così ancor di più la possibilità di errore, dovuto ad un errore di battitura.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"&gt;
&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2975568796191595801-6947736132892360608?l=www.panzuto.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gpanz/~4/mgfHpB36fmg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.panzuto.com/feeds/6947736132892360608/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.panzuto.com/2009/09/compact-net-memorizzare-impostazioni-su.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2975568796191595801/posts/default/6947736132892360608?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2975568796191595801/posts/default/6947736132892360608?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Gpanz/~3/mgfHpB36fmg/compact-net-memorizzare-impostazioni-su.html" title="[Compact .Net] Memorizzare impostazioni su file" /><author><name>Giuseppe Panzuto</name><uri>http://www.blogger.com/profile/10499340861300016020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="31" src="http://3.bp.blogspot.com/-fMooz4zPIHE/Td5m-W0ln7I/AAAAAAAABb8/6sdaypnLoaY/s220/Picture0012.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.panzuto.com/2009/09/compact-net-memorizzare-impostazioni-su.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8FQ3gyeyp7ImA9WxNRGUw.&quot;"><id>tag:blogger.com,1999:blog-2975568796191595801.post-5458616824892026347</id><published>2009-09-14T14:10:00.000+02:00</published><updated>2009-09-14T10:43:32.693+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-14T10:43:32.693+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="compact framework c# datatable file" /><title>[Compact .Net] Effettuare operazioni in background</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8DP9v-TeSS87XhWc1X4GmtK1IR8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8DP9v-TeSS87XhWc1X4GmtK1IR8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8DP9v-TeSS87XhWc1X4GmtK1IR8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8DP9v-TeSS87XhWc1X4GmtK1IR8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;script type="text/javascript"&gt;
&lt;!-- google_ad_client = "pub-3562187808075234"; /* Rettangolone */ google_ad_slot = "9388752835"; google_ad_width = 336; google_ad_height = 280; //--&gt;
&lt;/script&gt;Molto spesso le nostre applicazioni si trovano in situazioni di inoperatività dovute magari all'attesa di scelte dell'utente. Questi momenti ci offrono la possibilità di prepararci all'esecuzione di task futuri che magari sappiamo già impiegheranno molto tempo ad eseguirsi.&lt;br /&gt;
Il problemi maggiori li abbiamo con lo scarso supporto al threading offerto dal compact framework, che per esempio non ci permette di conoscere lo stato di esecuzione del thread. A tal proposito ho scritto una piccola classe in grado di lanciare l'esecuzione di un metodo in un thread separato, di sapere se l'operazione si è conclusa, e se dovesse essere necessario, attenderne la conclusione. Questa classe è in grado di eseguire metodi che non prevedono parametri e non ritornano valori.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: courier new;"&gt;using System;&lt;br /&gt;
using System.Collections;&lt;br /&gt;
using System.Threading;&lt;br /&gt;
&lt;br /&gt;
class LoaderClass&lt;br /&gt;
{&lt;br /&gt;
Hashtable thread_table = new Hashtable();&lt;br /&gt;
Hashtable action_table = new Hashtable();&lt;br /&gt;
&lt;br /&gt;
public int Run(Action action)&lt;br /&gt;
{&lt;br /&gt;
Thread t = new Thread(new ThreadStart(methodRunner));&lt;br /&gt;
thread_table.Add(t.ManagedThreadId, t);&lt;br /&gt;
action_table.Add(t.ManagedThreadId, action);&lt;br /&gt;
t.Start();&lt;br /&gt;
return t.ManagedThreadId;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public bool WorkEnded(int thread_id)&lt;br /&gt;
{&lt;br /&gt;
return thread_table.ContainsKey(thread_id);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public void WaitForEnd(int thread_id)&lt;br /&gt;
{&lt;br /&gt;
if (thread_table.ContainsKey(thread_id))&lt;br /&gt;
{&lt;br /&gt;
Thread t;&lt;br /&gt;
try&lt;br /&gt;
{ t = (Thread)thread_table[thread_id]; }&lt;br /&gt;
catch&lt;br /&gt;
{ return; }&lt;br /&gt;
&lt;br /&gt;
t.Join();&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void methodRunner()&lt;br /&gt;
{&lt;br /&gt;
int thread_id = Thread.CurrentThread.ManagedThreadId;&lt;br /&gt;
&lt;br /&gt;
Action action = (Action)action_table[thread_id];&lt;br /&gt;
action();&lt;br /&gt;
&lt;br /&gt;
action_table.Remove(thread_id);&lt;br /&gt;
thread_table.Remove(thread_id);&lt;br /&gt;
}&lt;br /&gt;
}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Con questa classe possiamo per esempio lanciare in anticipo il caricamento dei dati dal database senza disturbare i funzionamento dell'applicativo, e nel momento in cui avremo bisogno dei dati, attendere la conclusione del'operazione (se già non è terminata).&lt;br /&gt;
&lt;br /&gt;
es.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: courier new;"&gt;//Nel form_load&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: courier new;"&gt;LoaderClass loader = new &lt;/span&gt;&lt;span style="font-family: courier new;"&gt;LoaderClass();&lt;br /&gt;
thread_id = loader.Run(load_data);&lt;br /&gt;
&lt;br /&gt;
//Quando avremo bisogno dei dati&lt;br /&gt;
loader.WaitForEnd(thread_id);&lt;br /&gt;
//utilizza i dati caricati&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"&gt;
&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2975568796191595801-5458616824892026347?l=www.panzuto.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gpanz/~4/hQqWsi5seRg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.panzuto.com/feeds/5458616824892026347/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.panzuto.com/2009/09/compact-net-effettuare-operazioni-in.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2975568796191595801/posts/default/5458616824892026347?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2975568796191595801/posts/default/5458616824892026347?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Gpanz/~3/hQqWsi5seRg/compact-net-effettuare-operazioni-in.html" title="[Compact .Net] Effettuare operazioni in background" /><author><name>Giuseppe Panzuto</name><uri>http://www.blogger.com/profile/10499340861300016020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="31" src="http://3.bp.blogspot.com/-fMooz4zPIHE/Td5m-W0ln7I/AAAAAAAABb8/6sdaypnLoaY/s220/Picture0012.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.panzuto.com/2009/09/compact-net-effettuare-operazioni-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMBQnw9cCp7ImA9WxRaGU0.&quot;"><id>tag:blogger.com,1999:blog-2975568796191595801.post-7861733354481026633</id><published>2008-12-22T02:14:00.001+01:00</published><updated>2008-12-22T02:14:13.268+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-22T02:14:13.268+01:00</app:edited><title>Linguaggi lato server: Php vs Asp.net</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/UIdGFQYfiZZpj8cyyO-srWzhKPY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UIdGFQYfiZZpj8cyyO-srWzhKPY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/UIdGFQYfiZZpj8cyyO-srWzhKPY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UIdGFQYfiZZpj8cyyO-srWzhKPY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Questo &amp;#232; sicuramente uno degli argomenti pi&amp;#249; discussi e controversi del web, che interessa molto ai neofiti, ma che non manca di coinvolgere i fan di uno o dell'altro linguaggio. Per quanto mi riguarda non credo che tifare per l'uno o per l'altro possa rappresentare un atteggiamento saggio, credo piuttosto che ognuno dei due linguaggi abbia i suoi punti di eccellenza e che quindi si possano definire dei contesti ideali.&lt;/p&gt;  &lt;p&gt;Vorrei provare a tracciare delle distinzioni seguendo differenti punti di vista, il primo fra tutti &amp;#232; quello che riguarda un gran numero di persone che si affacciano al mondo web, cio&amp;#232; &amp;quot;quelli che fanno siti internet&amp;quot; (niente a che fare con web developer o designer, o comunque esperti di informatica). In questo caso credo che php possa ritenersi la scelta ideale, se non altro per la stragrande quantit&amp;#224; di snippet di codice, classi o persino interi siti disponibili su internet. Un elemento importante per&amp;#242; da definire &amp;#232; l'ambiente di sviluppo, che con php pu&amp;#242; rappresentare una vera e propria sfida. Essendo, infatti, opensource, php non ha un IDE ufficiale, ma ne esistono tanti (forse troppi) e sta ad ognuno poi trovare la sua configurazione pi&amp;#249; comoda, la mia &amp;#232; rappresentata da un editor (&lt;a href="http://www.activestate.com/Products/" target="_blank"&gt;Komodo Edit&lt;/a&gt;) pi&amp;#249; un ambiente per il debug (&lt;a href="http://www.easyphp.org/" target="_blank"&gt;easyphp&lt;/a&gt;). Ma la forza di php &amp;#232; nella facilit&amp;#224; con cui chiunque pu&amp;#242; arricchire i propri siti con funzionalit&amp;#224; pi&amp;#249; o meno importanti, basta creare una pagina html con un qualsiasi editor visuale e non appena contenti del risultato, inserirci del codice php come ad esempio: &amp;lt;?php echo date(&amp;quot;l w F Y&amp;quot;); ?&amp;gt; che visulizza la data di oggi. Con asp.net tutto ci&amp;#242; risulterebbe un po' pi&amp;#249; complicato, soprattutto se consideriamo che i linguaggi con cui andremo a scrivere il nostro codice, sono linguaggi fortemente &lt;a href="http://it.wikipedia.org/wiki/Programmazione_orientata_agli_oggetti" target="_blank"&gt;oop&lt;/a&gt; che richiedono quindi un minimo di esperienza di programmazione. C'&amp;#232; da dire per&amp;#242; che asp.net ha dalla sua un ide tra i migliori in assoluto della quale esiste anche una versione gratuita (&lt;a href="http://www.microsoft.com/express/vwd/" target="_blank"&gt;vwd&lt;/a&gt;). Riassumerei quindi questa prima parte con una semplice definizione : &lt;em&gt;&lt;strong&gt;Php &amp;#232; pi&amp;#249; semplice da usare e da imparare rispetto ad Asp.net&lt;/strong&gt;&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;Il secondo punto di vista riguarda i team di sviluppo, che necessitano quindi di metodologie di sviluppo cooperativo. Php ha incluso solo nella sua ultima versione (5) la possibilit&amp;#224; di programmare ad oggetti, questo credo rappresenti gi&amp;#224; un grosso deficit, visto che il 90% del codice su internet non &amp;#232; oop, e che soprattutto il linguaggio &amp;#232; stato concepito con una tipizzazione debole, vi posso assicurare, per chi non lo avesse gi&amp;#224; provato, che &amp;#232; molto frustrante ritrovarsi in una variabile in oggetto diverso da quello che ci espetteremmo, oppure, ancora peggio, il valore null causato da un errore di battitura mentre richiamavamo la variabile. In questo contesto chi veramente pu&amp;#242; dare il massimo di se &amp;#232; asp.net, che permette di progettare applicazioni enormi sfruttando le astrazioni possibili con i linguaggi orientati ad oggetti, che ci permettono di suddividere il lavoro in maniera ottimale. In oltre, come gi&amp;#224; detto prima, l'IDE fornisce grandi vantaggi, come ad esempio la definizione facilitata di riferimenti a web service. Se dovessimo riassumere ancor di pi&amp;#249; il concetto direi che &lt;em&gt;&lt;strong&gt;Asp.net permette di sviluppare grandi applicazioni con pi&amp;#249; facilit&amp;#224; rispetto a Php.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Dal punto di vista del designer, &amp;#232; importante che possa lavorare senza intralciare il lavoro degli sviluppatori o ancora meglio a prescindere se l'applicazione sia stata gi&amp;#224; sviluppata o meno. In questo caso Php non offre nessun argomentazione speciale se non l'utilizzo dei css propri dell'html, semplicemente, quindi, con Php si utilizzano le stesse tecniche (o quasi) che si utilizzano con le pagine html. Asp.net offre la possibilit&amp;#224; di definire dei temi, che non avrebbero niente di particolarmente eccezionale, se non fosse per gli skin, che permettono di specificare le propriet&amp;#224; dei controlli server, e l'estrema facilit&amp;#224; con cui una pagina pu&amp;#242; cambiar aspetto anche durante l'esecuzione, tutto ci&amp;#242; naturalmente includendo i fogli di stile. Morale : &lt;strong&gt;&lt;em&gt;Qualche sforzo in pi&amp;#249; &amp;#232; stato fatto con asp.net, ma entrambi sono sostanzialmente simili.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Purtroppo non &amp;#232; possibile specificare qu&amp;#236; quali sono tutte le caratteristiche di entrambi i linguaggi, sicuramente per chi &amp;#232; agli inizi, consiglierei il php data la sua semplicit&amp;#224; e la quantit&amp;#224; di materiale on-line, ma non potete considerarvi esperti se non li imparate entrambi. Quindi diffidate da chi afferma di sapere quale dei due sia il migliore, spesso certa gente &amp;#232; spinta pi&amp;#249; da ragioni politiche che altro, e se poi vi parla di prestazioni, le differenze sono ridicole, se proprio avete problemi di lentezza del sito provate a cambiare hosting (o a migliorare il codice :P ).&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2975568796191595801-7861733354481026633?l=www.panzuto.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gpanz/~4/kL3fWnrnTAc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.panzuto.com/feeds/7861733354481026633/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.panzuto.com/2008/12/linguaggi-lato-server-php-vs-aspnet.html#comment-form" title="2 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2975568796191595801/posts/default/7861733354481026633?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2975568796191595801/posts/default/7861733354481026633?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Gpanz/~3/kL3fWnrnTAc/linguaggi-lato-server-php-vs-aspnet.html" title="Linguaggi lato server: Php vs Asp.net" /><author><name>Giuseppe Panzuto</name><uri>http://www.blogger.com/profile/10499340861300016020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="31" src="http://3.bp.blogspot.com/-fMooz4zPIHE/Td5m-W0ln7I/AAAAAAAABb8/6sdaypnLoaY/s220/Picture0012.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://www.panzuto.com/2008/12/linguaggi-lato-server-php-vs-aspnet.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEERnY8cSp7ImA9WxRVF0w.&quot;"><id>tag:blogger.com,1999:blog-2975568796191595801.post-8341040147902405337</id><published>2008-11-15T02:57:00.001+01:00</published><updated>2008-11-15T03:03:27.879+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-15T03:03:27.879+01:00</app:edited><title>EasyWay: Smettere di fumare è facile se sai come farlo!</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/AF2ms2f2YLULZnxKKegN6Y7-8QI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AF2ms2f2YLULZnxKKegN6Y7-8QI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/AF2ms2f2YLULZnxKKegN6Y7-8QI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AF2ms2f2YLULZnxKKegN6Y7-8QI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Finalmente un post diverso dai soliti... &lt;/p&gt;  &lt;p&gt;Questa volta vorrei scrivere del metodo easyway e di come sia realmente efficace. Chi mi conosce sa bene quanto io sia scettico, e potrebbe quindi testimoniarvi che se ora mi trovo qu&amp;#236; a scrivere questo post, &amp;#232; perch&amp;#233; questo metodo deve essere realmente valido. In effetti con me ha funzionato, ma soprattutto credo che possa funzionare con chiunque, e credo proprio che la pensi allo stesso modo la fondazione che lo porta avanti, visto che vi promette di rimborsare i costi (relativamente bassi), se non vi convince a smettere di fumare.&lt;/p&gt;  &lt;p&gt;Il metodo &amp;#232; stato inventato da un certo Allen Carr che sosteneva di essere arrivato a fumare 100 sigarette al giorno per poi smettere di colpo, senza pi&amp;#249; aver voglia di fumare. Per quanto mi riguarda non faccio fatica a credere alle sue parole, dato che ho potuto effettivamente provarlo sulla mia pelle. In particolare ho provato a leggere il libro solo per curiosit&amp;#224;, sempre con un occhio scettico, fino a che non ho compreso dove volesse arrivare. Quante volte mi ero detto di voler smettere di fumare, ma puntualmente non ci riuscivo, e ci&amp;#242; mi spaventava. Non riuscivo a capire come mai fosse cos&amp;#236; difficile, come mai ci ricadevo puntualmente, finch&amp;#233; non mi &amp;#232; capitato di leggere il libro.&lt;/p&gt;  &lt;p&gt;Il risultato di tutto ci&amp;#242; &amp;#232; che finalmente mi sento un non fumatore, e mi trovo a provar pena per chi ancora &amp;#232; schiavo del fumo. E' logico quindi che il minimo che possa fare &amp;#232; di consigliarvi di leggere il libro o di regalarlo a chi ne ha bisogno. &lt;a href="http://bigcentro.shop.it/psicologia/-facile-smettere-di-fumare-se-sai-come-farlo/dettaglio/id-170681/" target="_blank"&gt;Qu&amp;#236;&lt;/a&gt; costa solo 8.50&amp;#8364;... quindi provateci, anche solo per curiosit&amp;#224;!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2975568796191595801-8341040147902405337?l=www.panzuto.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gpanz/~4/Pbql2DZcPmc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.panzuto.com/feeds/8341040147902405337/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.panzuto.com/2008/11/easyway-smettere-di-fumare-facile-se.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2975568796191595801/posts/default/8341040147902405337?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2975568796191595801/posts/default/8341040147902405337?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Gpanz/~3/Pbql2DZcPmc/easyway-smettere-di-fumare-facile-se.html" title="EasyWay: Smettere di fumare è facile se sai come farlo!" /><author><name>Giuseppe Panzuto</name><uri>http://www.blogger.com/profile/10499340861300016020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="31" src="http://3.bp.blogspot.com/-fMooz4zPIHE/Td5m-W0ln7I/AAAAAAAABb8/6sdaypnLoaY/s220/Picture0012.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.panzuto.com/2008/11/easyway-smettere-di-fumare-facile-se.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcFR3g5fCp7ImA9WxRWGEQ.&quot;"><id>tag:blogger.com,1999:blog-2975568796191595801.post-3376548739484881097</id><published>2008-11-05T15:56:00.001+01:00</published><updated>2008-11-05T15:56:56.624+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-05T15:56:56.624+01:00</app:edited><title>ADO.NET &amp; MS Access: Ottenere l'id del nuovo record</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NRlZlLopZ4fkwASdzNASat6TywQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NRlZlLopZ4fkwASdzNASat6TywQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/NRlZlLopZ4fkwASdzNASat6TywQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NRlZlLopZ4fkwASdzNASat6TywQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Alle volte pu&amp;#242; capitare di trovarsi in situazioni in cui non possiamo fare a meno di utilizzare un database access (magari perch&amp;#232; gi&amp;#224; esiste). Se vi trovate in questa situazione avrete gi&amp;#224; notato che se utilizzate access con ado.net, l'id della riga che avete appena creato non viene restituito. Per ovviare a questo fastidioso problema dovete intercettare l'evento onRowUpdate generato dal dataadapter che sta eseguendo l'update. In pratica un buon esempio pu&amp;#242; essere :&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;Public Shared Sub SaveTable(ByVal t As DataTable) &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; Dim da As New OleDbDataAdapter(&amp;quot;SELECT * FROM &amp;quot; &amp;amp; t.TableName, getConnection)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Dim cb As New OleDbCommandBuilder(da) &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; cb.QuotePrefix = &amp;quot;[&amp;quot;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; cb.QuoteSuffix = &amp;quot;]&amp;quot; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; da.InsertCommand = cb.GetInsertCommand     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; da.UpdateCommand = cb.GetUpdateCommand      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; da.DeleteCommand = cb.GetDeleteCommand &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; AddHandler da.RowUpdated, New OleDbRowUpdatedEventHandler(AddressOf OnRowUpdated) &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; da.Update(t) &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;End Sub&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;Private Shared Sub OnRowUpdated(ByVal sender As Object, ByVal e As OleDbRowUpdatedEventArgs) &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; If e.StatementType = StatementType.Insert Then &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Dim pk As String = e.Row.Table.PrimaryKey(0).ColumnName     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Dim cmdNewID As New OleDbCommand(&amp;quot;SELECT @@IDENTITY&amp;quot;, e.Command.Connection) &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; e.Row(pk) = CInt(cmdNewID.ExecuteScalar)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; e.Status = UpdateStatus.SkipCurrentRow &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; End If &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;End Sub&lt;/font&gt; &lt;/p&gt;  &lt;p&gt;Ricordatevi di impostare il nome della tabella nel datatable al momento della creazione e soprattutto di impostare la chiave primaria.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2975568796191595801-3376548739484881097?l=www.panzuto.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gpanz/~4/zOjNzcWLlUk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.panzuto.com/feeds/3376548739484881097/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.panzuto.com/2008/11/adonet-ms-access-ottenere-l-del-nuovo.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2975568796191595801/posts/default/3376548739484881097?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2975568796191595801/posts/default/3376548739484881097?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Gpanz/~3/zOjNzcWLlUk/adonet-ms-access-ottenere-l-del-nuovo.html" title="ADO.NET &amp;amp; MS Access: Ottenere l&amp;#39;id del nuovo record" /><author><name>Giuseppe Panzuto</name><uri>http://www.blogger.com/profile/10499340861300016020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="31" src="http://3.bp.blogspot.com/-fMooz4zPIHE/Td5m-W0ln7I/AAAAAAAABb8/6sdaypnLoaY/s220/Picture0012.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.panzuto.com/2008/11/adonet-ms-access-ottenere-l-del-nuovo.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMGQHg-fip7ImA9WxRWFko.&quot;"><id>tag:blogger.com,1999:blog-2975568796191595801.post-2571482042395934903</id><published>2008-11-03T00:58:00.001+01:00</published><updated>2008-11-03T01:00:21.656+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-03T01:00:21.656+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><title>J2ME &amp; NetBeans 6.1: Visual MIDlet</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GZDn4QWuLnCoJ7TlS5x-0eG3jxU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GZDn4QWuLnCoJ7TlS5x-0eG3jxU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GZDn4QWuLnCoJ7TlS5x-0eG3jxU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GZDn4QWuLnCoJ7TlS5x-0eG3jxU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Mi sono trovato nella necessit&amp;#224; di scrivere un'applicazione che potesse girare sulla maggioranza dei telefoni cellulari. Quale miglior occasione quindi di approfondire la conoscenza di java, certo Java Micro Edition non &amp;#232; esattamente il massimo dei framework, le funzionalit&amp;#224; sono molto limitate, ma &amp;#232; pur sempre java.&lt;/p&gt;  &lt;p&gt;Il primo passo &amp;#232; stato di trovare un IDE con funzioni avanzate per la scrittura del codice. Googlando in giro ho trovato i soliti fun dell'uno o dell'altro ide, ma infine da quello che sono riuscito a capire, i migliori (almeno di quelli open source) dovrebbero essere 2: Eclipse e NetBeans. Per quanto riguarda eclipse, in passato ho gi&amp;#224; avuto una brutta esperienza, oltre ad essere pesantuccio non &amp;#232; esattamente intuitivo, di conseguenza la scelta &amp;#232; caduta su NetBeans (che dal nome sembrerebbe esse pi&amp;#249; un editor html).&lt;/p&gt;  &lt;p&gt;NetBeans si &amp;#232; rivelato un buon IDE, molto completo, con esempi, gestione del codice, refactoring... ovviamente per&amp;#242; siamo lontani da visual studio, in particolare l'ntellisense di NetBeans non compare mai quando ne hai bisogno, e per un linguaggio case sensitive come java &amp;#232; un fastidio non da poco, un altra pecca &amp;#232; il caricamento alle volte estenuante. Molto potente, invece, &amp;#232; la gestione delle gui per MIDP, infatti tramite la classe 'Visual MIDlet', non solo abbiamo la possibilit&amp;#224; di creare le form della nostra applicazione, ma anche di gestirne la navigazione in un modo a dir poco efficace. &lt;/p&gt;  &lt;p&gt;NetBeans ci d&amp;#224; la possibilit&amp;#224; di editare le 'visual MIDlet' in tre modalit&amp;#224;, ognuna ad un livello differente.&lt;/p&gt;  &lt;p&gt;Al livello pi&amp;#249; alto troviamo l'editor di flusso (flow) in cui possiamo creare le form, aggiungerci dei controlli, creare comandi e specificarne la funzione.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_8sY7gK_EW88/SQ4-eJqT32I/AAAAAAAAAhc/OhVB_rEUw5k/s1600-h/netbeans1%5B3%5D.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="220" alt="netbeans1" src="http://lh4.ggpht.com/_8sY7gK_EW88/SQ4-e9sqMeI/AAAAAAAAAhg/FC1ALzBgFHo/netbeans1_thumb%5B1%5D.png?imgmax=800" width="252" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Proviamo a creare una piccola MIDlet di esempio (il solito hello wold). Alla creazione della classe troviamo gi&amp;#224; una form, selezionandola ne possiamo modificare le propriet&amp;#224;, in particolare modifichiamo il titolo e il nome dell'istanza rispettivamente in 'Finestra principale' e 'mainForm'. Nel grafico &amp;#232; presente un'altra entit&amp;#224; 'mobile device', &amp;#232; l&amp;#236; che inizia e finisce la nostra applicazione, lasciamo quindi che alla partenza (started) la midlet visualizzi la nostra form. A questo punto non ci resta che disegnare l'aspetto di mainForm e per far ci&amp;#242; dobbiamo passare alla modalit&amp;#224; screen.&lt;/p&gt;  &lt;p&gt;Nella modalit&amp;#224; screen abbiamo la possibilit&amp;#224; di modificare una alla volta le form della nostra midlet. Tramite la drop-down-list a destra scegliamo la form da modificare (nel nostro caso ce ne sar&amp;#224; solo una), qu&amp;#236; notiamo che NetBeans ha gi&amp;#224; inserito uno stringItem con il testo 'Hello, World!', ma quello che vogliamo noi &amp;#232; che la midlet stampi un saluto personalizzato all'utente. Eliminiamo quindi lo stringItem e inseriamo un textField, modificando la propriet&amp;#224; label in 'Come ti chiami?'. A questo punto dobbiamo decidere dove visualizzare il saluto, potremmo utilizzare un altro form, lo stesso textField oppure uno stringItem, ma decidiamo di utilizzare uno stringItem inserendolo nel form. Cancelliamo il testo della label e impostiamo un font facendo click sul pulsante con i tre puntini, scegliamo di visualizzare il testo in corsivo e di lasciare le altre impostazioni di default.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_8sY7gK_EW88/SQ4-frLkRJI/AAAAAAAAAhk/ZYTFHfxcxq0/s1600-h/netbeans2%5B2%5D.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="169" alt="netbeans2" src="http://lh4.ggpht.com/_8sY7gK_EW88/SQ4-gcA4bEI/AAAAAAAAAho/1RX6hN94vkk/netbeans2_thumb.png?imgmax=800" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Ora passiamo alla modalit&amp;#224; 'Source' per fare in modo che quando l'utente scriver&amp;#224; il suo nome ricever&amp;#224; un saluto del tipo 'Ciao Tizio'. Per catturare i 'cambiamenti' dei controlli doppiamo implementare l'interfaccia &lt;font face="Courier New" color="#0000ff"&gt;ItemStateListener&lt;/font&gt; e di conseguenza il metodo &lt;font face="Courier New" color="#0000ff"&gt;public void itemStateChanged(Item item)&lt;/font&gt;. D'ora in avanti, ogni volta che un controllo subir&amp;#224; delle modifiche, verr&amp;#224; chiamato il metodo itemStateChanged, possiamo allora implementare il comportamento del metodo, specificando che se il controllo modificato &amp;#232; textField allora stringItem dovr&amp;#224; visualizzare 'Ciao ' + il testo digitato:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;public void&lt;/font&gt; &lt;strong&gt;itemStateChanged&lt;/strong&gt;(Item item){      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if (item==&lt;font color="#0000ff"&gt;this&lt;/font&gt;.getTextField()){      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;this&lt;/font&gt;.getStringItem().setText(&lt;font color="#ff8000"&gt;&amp;quot;Ciao &amp;quot;&lt;/font&gt; + &lt;font color="#0000ff"&gt;this&lt;/font&gt;.getTextField().getString());      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;}&lt;/font&gt; &lt;/p&gt;  &lt;p&gt;dobbiamo in oltre registrare il listener per il form e lo facciamo alla creazione dell'istanza. Cerchiamo il metodo getMainForm, che viene creato automaticamente, e modifichiamo il codice facendo in modo che quando una nuova istanza della form viene creata, venga impostato anche il listener :&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;public Form getMainForm() {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if (mainForm == null) {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // write pre-init user code here      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; mainForm = new Form(&amp;quot;Finestra Principale&amp;quot;, new Item[] { getTextField(), getStringItem() });      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; mainForm.addCommand(getExitCommand());      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; mainForm.setCommandListener(this);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#008000"&gt;mainForm.setItemStateListener(this);&lt;/font&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // write post-init user code here      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; return mainForm;      &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Adesso eseguiamo il progetto con F6 e verifichiamo che l'applicazione funzioni... funziona!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_8sY7gK_EW88/SQ4-hIzaIZI/AAAAAAAAAhs/gfWtPs06Xg0/s1600-h/netbeans3%5B2%5D.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="244" alt="netbeans3" src="http://lh5.ggpht.com/_8sY7gK_EW88/SQ4-h50fInI/AAAAAAAAAhw/CUnhwcB0Bu4/netbeans3_thumb.png?imgmax=800" width="116" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Ora manca solo la distribuzione, basta compilare il tutto con F11 che nella sottocartella 'dist' del nostro progetto vengano creati i files necessari sia 'jad' che 'jar'. In oltre ho notato che &amp;#232; disponibile anche una funzione che permette di uploadare i file direttamente sul cellulare, ma non l'ho potuta provate perch&amp;#232; il mio cellulare non era tra i modelli supportati...&lt;/p&gt;  &lt;p&gt;Concludendo, devo dire che NetBeans &amp;#232; tutto sommato un buon IDE, se consideriamo che per creare questa applicazione di esempio abbiamo scritto in totale 4 righe di codice, tutto il resto &amp;#232; stato gestito da NetBeans. In oltre devo dire anche che oltre ai progetti J2ME supporta una variet&amp;#224; di altri progetti (Ruby, SOA, UML, JSP e altri), che possiede un po' tutte le principali funzionalit&amp;#224; dei migliori IDE, che mi &amp;#232; parso stabile anche su win vista, ma che sembra occupare molte risorse di sistema e sopratutto lento all'avvio. Se dovessi dare un voto darei un bel 7 e mezzo.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2975568796191595801-2571482042395934903?l=www.panzuto.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gpanz/~4/dQfXEk0aCN8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.panzuto.com/feeds/2571482042395934903/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.panzuto.com/2008/11/j2me-netbeans-61-visual-midlet.html#comment-form" title="3 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2975568796191595801/posts/default/2571482042395934903?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2975568796191595801/posts/default/2571482042395934903?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Gpanz/~3/dQfXEk0aCN8/j2me-netbeans-61-visual-midlet.html" title="J2ME &amp;amp; NetBeans 6.1: Visual MIDlet" /><author><name>Giuseppe Panzuto</name><uri>http://www.blogger.com/profile/10499340861300016020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="31" src="http://3.bp.blogspot.com/-fMooz4zPIHE/Td5m-W0ln7I/AAAAAAAABb8/6sdaypnLoaY/s220/Picture0012.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_8sY7gK_EW88/SQ4-e9sqMeI/AAAAAAAAAhg/FC1ALzBgFHo/s72-c/netbeans1_thumb%5B1%5D.png?imgmax=800" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://www.panzuto.com/2008/11/j2me-netbeans-61-visual-midlet.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0EDRXYyfSp7ImA9WxRQFk8.&quot;"><id>tag:blogger.com,1999:blog-2975568796191595801.post-5727032361595556166</id><published>2008-10-10T11:07:00.001+02:00</published><updated>2008-10-10T11:07:54.895+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-10T11:07:54.895+02:00</app:edited><title>Asp.Net &amp; Javascript (Tips &amp; Tricks): Debug degli script inseriti con RegisterClientScriptBlock</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Y5h2u5nv89oYqNI2pSQ_4hsnDZc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Y5h2u5nv89oYqNI2pSQ_4hsnDZc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Y5h2u5nv89oYqNI2pSQ_4hsnDZc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Y5h2u5nv89oYqNI2pSQ_4hsnDZc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Uno dei motivi che rende javascript un linguaggio odioso (almeno per me) e la tipizzazione debole delle variabili. Questa sua caratterisca rende molto difficile il debug, spesso le funzioni ritornano comunque un valore. Per non parlare poi se si stanno utilizzando webservice per memorizzare informazioni nel db, le varibili null vengono tranquillamente covertite in string (nella stringa 'undefined' precisamente) con la conseguenza di ritrovarci il database pieno di record errati.&lt;/p&gt;  &lt;p&gt;Se lo script java viene scritto all'interno del markup html della pagina, possiamo inserire un breakpoint nella funzione da controllare, fruttando l'integrazione con Internet Explorer di Visual Studio, che ferma l'esecuzione del codice. Ma se lo script lo generiamo dinamicamente tramite codice gestito? Se lo script non genera errori gravi, quali ad esempio accesso ad una propriet&amp;#224; di una variabile quando questa &amp;#232; null oppure errori di sintassi, l'unico modo per capire se la funzione &amp;#232; corretta &amp;#232; di ricorrere a piccoli trucchi. &lt;/p&gt;  &lt;p&gt;Se vogliamo essere certi del valore di una variabile in un determinato momento, possiamo utilizzare una div, chiamiamola 'debugDiv', e nella propriet&amp;#224; innerHtml scriverci il valore ricordandoci di specificare un'etichetta che ci permette di identificare il valore stampato.&lt;/p&gt;  &lt;p&gt;Una tecnica simile pu&amp;#242; essere applicata anche ad applicazioni gi&amp;#224; pubblicate, la differenza per&amp;#242; sta nel fatto che invece di stampare a video i risultati, utilizzeremo un piccolo webservice, che ci possiamo portare dietro da applicazione in applicazione, che registrer&amp;#224; le informazioni che vogliamo in un file xml o direttamente nel db.&lt;/p&gt;  &lt;p&gt;Ma se nonostante tutte le info che riceviamo, non riusciamo ad capire dov'&amp;#232; il problema e quindi abbiamo bisogno di eseguire lo script riga dopo riga, il metodo pi&amp;#249; banale di tutti sta nel generare volutamente un'eccezzione, basta inserire la riga 'null.generaeccezione;' nello script, che vs interromper&amp;#224; l'esecuzione permettendovi di eseguire il debug step by step con la comodit&amp;#224; di poter utilizzare la finestra immediata.&lt;/p&gt;  &lt;p&gt;Javascript rappresenta un valore aggiunto per Asp.Net, ma non &amp;#232; l'unico modo di gestire le applicazioni sul client. Silverlight (o WPF), una delle innovazioni introdotte da Microsoft ormai da qualche anno, permette di fare cose eccezzionali con uno sforzo decisamente minore. Ma la strada per la sua totale compatibilit&amp;#224; coi browser &amp;#232; ancora lunga, quindi per progetti grossi e che soprattutto interessano un'ampia variet&amp;#224; di utenti, non ci resta che &lt;strike&gt;piangere&lt;/strike&gt; continuare a utilizzare Javascript. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2975568796191595801-5727032361595556166?l=www.panzuto.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gpanz/~4/Z_bLQDSBc78" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.panzuto.com/feeds/5727032361595556166/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.panzuto.com/2008/10/aspnet-javascript-tips-tricks-debug.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2975568796191595801/posts/default/5727032361595556166?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2975568796191595801/posts/default/5727032361595556166?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Gpanz/~3/Z_bLQDSBc78/aspnet-javascript-tips-tricks-debug.html" title="Asp.Net &amp;amp; Javascript (Tips &amp;amp; Tricks): Debug degli script inseriti con RegisterClientScriptBlock" /><author><name>Giuseppe Panzuto</name><uri>http://www.blogger.com/profile/10499340861300016020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="31" src="http://3.bp.blogspot.com/-fMooz4zPIHE/Td5m-W0ln7I/AAAAAAAABb8/6sdaypnLoaY/s220/Picture0012.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.panzuto.com/2008/10/aspnet-javascript-tips-tricks-debug.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQHQ3k9fyp7ImA9WxRSE00.&quot;"><id>tag:blogger.com,1999:blog-2975568796191595801.post-4607739809964259712</id><published>2008-09-13T13:03:00.001+02:00</published><updated>2008-09-13T13:12:12.767+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-13T13:12:12.767+02:00</app:edited><title>ASP.NET &amp; Javascript: Aprire un'popup e ottenere il valore selezionato</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/TlcoWuCFN_fFHV0UeC-mtIHwzWU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TlcoWuCFN_fFHV0UeC-mtIHwzWU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/TlcoWuCFN_fFHV0UeC-mtIHwzWU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TlcoWuCFN_fFHV0UeC-mtIHwzWU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Aprire un popup &amp;#232; un'operazione che deve essere effettuata lato client. E' necessario quindi integrare codice javascript alla nostra pagina asp.net.&lt;/p&gt;  &lt;h6&gt;&lt;font face="Courier New" color="#000080" size="2"&gt;&amp;lt;script language=&amp;quot;javascript&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;/font&gt;&lt;/h6&gt;  &lt;h6&gt;&lt;font face="Courier New" color="#000080" size="2"&gt;&amp;#160;&amp;#160;&amp;#160; function selezionaCategoria() {&lt;/font&gt;&lt;/h6&gt;  &lt;h6&gt;&lt;font face="Courier New" color="#000080" size="2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; window.open('selcat.aspx', 'SelezionaCategoria', '', '');&lt;/font&gt;&lt;/h6&gt;  &lt;h6&gt;&lt;font face="Courier New" color="#000080" size="2"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/h6&gt;  &lt;h6&gt;&lt;font face="Courier New" color="#000080" size="2"&gt;&amp;lt;/script&amp;gt;&lt;/font&gt;&lt;/h6&gt;  &lt;p&gt;possiamo utilizzare la funzione selezionaCategoria() per aprire la pagina selcat.aspx in una finestra popup :&lt;/p&gt;  &lt;h6&gt;&lt;font face="Courier New" color="#000080" size="2"&gt;&amp;lt;asp:HyperLink ID=&amp;quot;selcatHyperLink&amp;quot; runat=&amp;quot;server&amp;quot; NavigateUrl=&amp;quot;&lt;u&gt;javascript:selezionaCategoria()&lt;/u&gt;&amp;quot;&amp;gt;Seleziona&amp;lt;/asp:HyperLink&amp;gt;&lt;/font&gt;&lt;/h6&gt;  &lt;p&gt;Con queste istruzioni abbiamo creato una pagina che apre un popup in cui l'utente dovrebbe selezionare la categoria di interesse. Ma per completare l'operazione abbiamo bisogno che la finestra popup restituisca un valore, nel nostro caso in codice della categoria selezionata.&lt;/p&gt;  &lt;p&gt;L'oggetto javascript window.opener &amp;#232; quello di cui abbiamo bisogno affinch&amp;#232; la finestra chiamata abbia accesso alla finestra chiamante. Nella pagina selcat.aspx dobbiamo quindi specificare di richiamare una funzione javascript presente nella finestra chimante:&lt;/p&gt;  &lt;h6&gt;&lt;font face="Courier New" color="#000080" size="2"&gt;window.opener.setCategoria('AA'); window.close();&lt;/font&gt;&lt;/h6&gt;  &lt;p&gt;setCategoria &amp;#232; una funzione javascript implementata in precedenza nella finestra chiamante. Molto probabilmente il codice della categoria selezionata dovr&amp;#224; essere inserito in un controllo server di asp.net che potrebbe avere un id client generato dinamicamente dal server. Questo ci obbliga a inserire il codice javascript nel codice gestito all'evento page_load :&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h6&gt;&lt;font face="Courier New" color="#000080" size="2"&gt;Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load &lt;/font&gt;&lt;/h6&gt;  &lt;h6&gt;&lt;font face="Courier New" color="#000080" size="2"&gt;&amp;#160;&amp;#160;&amp;#160; If Not IsPostBack Then&lt;/font&gt;&lt;/h6&gt;  &lt;h6&gt;&lt;font face="Courier New" color="#000080" size="2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Dim scr As String = &amp;quot;&amp;lt;script language='javascript'&amp;gt; function setCategoria(cat) {document.getElementById('&amp;quot; &amp;amp; categoriaTextBox.ClientID &amp;amp; &amp;quot;').innerText = cat;} &amp;lt;/script&amp;gt;&amp;quot; &lt;/font&gt;&lt;/h6&gt;  &lt;h6&gt;&lt;font face="Courier New" color="#000080" size="2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ClientScript.RegisterClientScriptBlock(Me.GetType, &amp;quot;SettaCategoria&amp;quot;, scr) &lt;/font&gt;&lt;/h6&gt;  &lt;h6&gt;&lt;font face="Courier New" color="#000080" size="2"&gt;&amp;#160;&amp;#160; End If&lt;/font&gt;&lt;/h6&gt;  &lt;h6&gt;&lt;font face="Courier New" color="#000080" size="2"&gt;End Sub&lt;/font&gt;&lt;/h6&gt;  &lt;p&gt;In questo modo garantiamo che l'id client di categoriaTextBox sia quello esatto.&lt;/p&gt;  &lt;p&gt;Allo stesso modo nella pagina selcat.aspx il controllo che richiama setCategoria potrebbe essere un controllo server come ad esempio un TreeView o un button che effettua un postback. Per permettere al server di eseguire sul client codice javascript, possiamo utilizzare ClientScript.RegisterStartupScript che esegue uno script di avvio sul client, in pi&amp;#249; abbiamo la possibilit&amp;#224; di generare o ottenere il codice categoria sul server.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h6&gt;&lt;font face="Courier New" color="#000080" size="2"&gt;Protected Sub CategorieTreeView_SelectedNodeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles CategorieTreeView.SelectedNodeChanged &lt;/font&gt;&lt;/h6&gt;  &lt;h6&gt;&lt;font face="Courier New" color="#000080" size="2"&gt;&amp;#160;&amp;#160;&amp;#160; ClientScript.RegisterStartupScript(Me.GetType, &amp;quot;RitorvaValore&amp;quot;, &amp;quot;&amp;lt;script language='javascript'&amp;gt; window.opener.setCategoria('&amp;quot; &amp;amp; CategorieTreeView.SelectedValue &amp;amp; &amp;quot;'); window.close(); &amp;lt;/script&amp;gt;&amp;quot;) &lt;/font&gt;&lt;/h6&gt;  &lt;h6&gt;&lt;font face="Courier New" color="#000080" size="2"&gt;End Sub&lt;/font&gt;&lt;/h6&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2975568796191595801-4607739809964259712?l=www.panzuto.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gpanz/~4/ZXLlnoYVnoQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.panzuto.com/feeds/4607739809964259712/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.panzuto.com/2008/09/aspnet-javascript-aprire-un-e-ottenere.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2975568796191595801/posts/default/4607739809964259712?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2975568796191595801/posts/default/4607739809964259712?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Gpanz/~3/ZXLlnoYVnoQ/aspnet-javascript-aprire-un-e-ottenere.html" title="ASP.NET &amp;amp; Javascript: Aprire un&amp;#39;popup e ottenere il valore selezionato" /><author><name>Giuseppe Panzuto</name><uri>http://www.blogger.com/profile/10499340861300016020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="31" src="http://3.bp.blogspot.com/-fMooz4zPIHE/Td5m-W0ln7I/AAAAAAAABb8/6sdaypnLoaY/s220/Picture0012.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.panzuto.com/2008/09/aspnet-javascript-aprire-un-e-ottenere.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MFRH05cCp7ImA9WxRQFk4.&quot;"><id>tag:blogger.com,1999:blog-2975568796191595801.post-3959006453594323060</id><published>2008-07-25T08:57:00.000+02:00</published><updated>2008-10-10T11:36:55.328+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-10T11:36:55.328+02:00</app:edited><title>Linq To SQL e VB.net: GroupBy()</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/QlQ1dQS60nx0TuIN-cB6Re8dGZc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QlQ1dQS60nx0TuIN-cB6Re8dGZc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/QlQ1dQS60nx0TuIN-cB6Re8dGZc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QlQ1dQS60nx0TuIN-cB6Re8dGZc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Molto spesso, nella gestione di dati, abbiamo la necessit&amp;#224; di raggruppare i risultati ottenuti, secondo alcuni criteri particolari. In Sql questo &amp;#232; possibile tramite la parola chiave Group By, seguito dal nome dai criteri secondo cui vogliamo ottenere il raggruppamento, ovviamente per&amp;#242;, per conoscere in dettaglio quali campi sono stati raggruppati, &amp;#232; necessario effettuare un'operazione di join con la tabella sorgente.  &lt;br /&gt;  &lt;br /&gt;In Linq &amp;#232; tutto molto pi&amp;#249; semplice, l'istruzione GroupBy(...) ci restituisce una lista di tabelle, ogni tabella &amp;#232; costituita da tutti gli elementi della tabella madre che hanno in comune la clausola di raggruppamento.  &lt;br /&gt;  &lt;br /&gt;es. abbiamo questa tabella:  &lt;br /&gt;  &lt;div class="separator" style="clear: both; text-align: center"&gt;&lt;a style="border-right: 0pt; border-top: 0pt; margin-left: 1em; border-left: 0pt; margin-right: 1em; border-bottom: 0pt; background-color: transparent" href="http://bp2.blogger.com/_8sY7gK_EW88/SIl-yrg1zYI/AAAAAAAAAAM/egdOpK-RaL0/s1600-h/groupby1.png" imageanchor="1"&gt;&lt;img style="border-right: 0pt; border-top: 0pt; border-left: 0pt; border-bottom: 0pt" src="http://bp2.blogger.com/_8sY7gK_EW88/SIl-yrg1zYI/AAAAAAAAAAM/oJCk6bAlv58/s320-R/groupby1.png" /&gt;&lt;/a&gt;&amp;#160;&lt;/div&gt;  &lt;div class="separator" style="clear: both; text-align: left"&gt;&lt;/div&gt;  &lt;div class="separator" style="clear: both; text-align: left"&gt;Vogliamo raggruppare i clienti per provincia:&lt;/div&gt;  &lt;div class="separator" style="clear: both; text-align: left"&gt;&lt;/div&gt;  &lt;div class="separator" style="clear: both; text-align: left"&gt;&lt;font face="Courier New"&gt;Dim db As New myDataContext &lt;/font&gt;&lt;/div&gt; &lt;font face="Courier New"&gt;dim clientiPerProvincia = db.Clienti.GroupBy(Function(c) c.Provincia)   &lt;br /&gt;&lt;/font&gt;  &lt;br /&gt;il risultato che otteniamo &amp;#232; che in clientiPerProvincia abbiamo 4 tabelle  &lt;br /&gt;  &lt;br /&gt;  &lt;div class="separator" style="clear: both; text-align: center"&gt;&lt;a style="border-right: 0pt; border-top: 0pt; margin-left: 1em; border-left: 0pt; margin-right: 1em; border-bottom: 0pt; background-color: transparent" href="http://bp2.blogger.com/_8sY7gK_EW88/SImAmCAbjuI/AAAAAAAAAAU/QDZjxHOpELY/s1600-h/groupby2.png" imageanchor="1"&gt;&lt;img style="border-right: 0pt; border-top: 0pt; border-left: 0pt; border-bottom: 0pt" src="http://bp2.blogger.com/_8sY7gK_EW88/SImAmCAbjuI/AAAAAAAAAAU/-e98RN9Jd2k/s400-R/groupby2.png" /&gt;&lt;/a&gt;&amp;#160;&lt;/div&gt;  &lt;div class="separator" style="clear: both; text-align: center"&gt;&lt;/div&gt;  &lt;div class="separator" style="clear: both; text-align: left"&gt;ognuna delle quali pu&amp;#242; essere raggiungibile, per esempio, con un istruzione For oppure direttamente col metodo ElementAt(...).&lt;/div&gt;  &lt;div class="separator" style="clear: both; text-align: left"&gt;&lt;/div&gt;  &lt;div class="separator" style="clear: both; text-align: left"&gt;es.&lt;/div&gt;  &lt;div class="separator" style="clear: both; text-align: left"&gt;&lt;/div&gt;  &lt;div class="separator" style="clear: both; text-align: left"&gt;dim primaProvinciaPrimoCliente as string = clientiPerProvincia.ElementAt(0).ElementAt(0).Cliente&lt;/div&gt;  &lt;div class="separator" style="clear: both; text-align: left"&gt;&lt;/div&gt;  &lt;div class="separator" style="clear: both; text-align: left"&gt;Il primo ElementAt individua la tabella, il secondo il cliente.&lt;/div&gt;  &lt;div class="separator" style="clear: both; text-align: left"&gt;&lt;/div&gt;  &lt;div class="separator" style="clear: both; text-align: left"&gt;oppure &lt;/div&gt;  &lt;div class="separator" style="clear: both; text-align: left"&gt;&lt;font face="Courier New"&gt;For Each p In clientiPerProvincia 'scorre ogni tabella&lt;/font&gt;&lt;/div&gt;  &lt;div class="separator" style="clear: both; text-align: left"&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&lt;/div&gt;  &lt;div class="separator" style="clear: both; text-align: left"&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; Console.Writeline(p.key) 'key contiene la chiave del raggruppamento&lt;/font&gt;&lt;/div&gt;  &lt;div class="separator" style="clear: both; text-align: left"&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&lt;/div&gt;  &lt;div class="separator" style="clear: both; text-align: left"&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; For Each c In p 'scorre ogni cliente&lt;/font&gt;&lt;/div&gt;  &lt;div class="separator" style="clear: both; text-align: left"&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&lt;/div&gt;  &lt;div class="separator" style="clear: both; text-align: left"&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.Writeline(&amp;quot;--&amp;quot; &amp;amp; c.Cliente)&lt;/font&gt;&lt;/div&gt;  &lt;div class="separator" style="clear: both; text-align: left"&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&lt;/div&gt;  &lt;div class="separator" style="clear: both; text-align: left"&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; Next&lt;/font&gt;&lt;/div&gt;  &lt;div class="separator" style="clear: both; text-align: left"&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&lt;/div&gt;  &lt;div class="separator" style="clear: both; text-align: left"&gt;&lt;font face="Courier New"&gt;Next&lt;/font&gt;&lt;/div&gt;  &lt;br /&gt;il risultato sar&amp;#224; :  &lt;br /&gt;  &lt;br /&gt;&lt;font face="Courier New"&gt;TA   &lt;br /&gt;--A    &lt;br /&gt;--B    &lt;br /&gt;--E    &lt;br /&gt;BR    &lt;br /&gt;--C    &lt;br /&gt;LE    &lt;br /&gt;--D    &lt;br /&gt;--F    &lt;br /&gt;--G    &lt;br /&gt;BA    &lt;br /&gt;--H&lt;/font&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2975568796191595801-3959006453594323060?l=www.panzuto.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gpanz/~4/GOeyUgP-Tsk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.panzuto.com/feeds/3959006453594323060/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.panzuto.com/2008/07/linq-to-sql-e-vbnet-groupby.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2975568796191595801/posts/default/3959006453594323060?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2975568796191595801/posts/default/3959006453594323060?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Gpanz/~3/GOeyUgP-Tsk/linq-to-sql-e-vbnet-groupby.html" title="Linq To SQL e VB.net: GroupBy()" /><author><name>Giuseppe Panzuto</name><uri>http://www.blogger.com/profile/10499340861300016020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="31" src="http://3.bp.blogspot.com/-fMooz4zPIHE/Td5m-W0ln7I/AAAAAAAABb8/6sdaypnLoaY/s220/Picture0012.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://bp2.blogger.com/_8sY7gK_EW88/SIl-yrg1zYI/AAAAAAAAAAM/oJCk6bAlv58/s72-Rc/groupby1.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.panzuto.com/2008/07/linq-to-sql-e-vbnet-groupby.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIGQ38-eSp7ImA9WxdVFEs.&quot;"><id>tag:blogger.com,1999:blog-2975568796191595801.post-4661508784272325218</id><published>2008-07-19T09:36:00.012+02:00</published><updated>2008-07-19T12:15:22.151+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-19T12:15:22.151+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sql" /><category scheme="http://www.blogger.com/atom/ns#" term="vs 2008" /><category scheme="http://www.blogger.com/atom/ns#" term="vb.net" /><category scheme="http://www.blogger.com/atom/ns#" term="linq" /><category scheme="http://www.blogger.com/atom/ns#" term="microsoft" /><title>Linq To SQL e vb.net: visualizzare e aggiornare dati del database e ottenere l'identità</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/EbPCmHD9xL3CC16Vl7jaTE5fmiA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EbPCmHD9xL3CC16Vl7jaTE5fmiA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/EbPCmHD9xL3CC16Vl7jaTE5fmiA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EbPCmHD9xL3CC16Vl7jaTE5fmiA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Linq è stata una delle intuizioni di Microsoft che ha cambiato maggiormente il modo di sviluppare applicazioni connesse a dati.&lt;br /&gt;
Tramite Linq è possibile utilizzare un linquaggio simile a SQL direttamente nel codice gestito vb.net o c#.&lt;br /&gt;
&lt;br /&gt;
Per iniziare abbiamo bisogno di un tramite, un'nterfaccia che ci permetta di trasformare  le istruzioni linq che scriveremo, in T-SQL. Linq To SQL mette a disposizione le classi DataContext, che hanno appunto questo scopo, tramite un tool per lo sviluppo visuale è possibile importare direttamente da esplora server le tabelle che vogliamo interfacciare, e la classe in runtime genererà dinamicamente le istruzioni SQL e si connetterà al database per eseguirle.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;SELECT&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
A parte una leggera differenza nella posizione delle parole chiave, le istruzioni linq per la lettura di dati, hanno lo stesso funzionamento di una select scritta in SQL con la differenza che abbiamo a disposizione tutti i metodi e properietà del framework (conversioni, manipolazione stringhe, metodi personalizzati ...)&lt;br /&gt;
&lt;br /&gt;
Dim clientiLeccesi = From c In DB.Clienti Where c.città = "Lecce" Select c&lt;br /&gt;
&lt;br /&gt;
questa query permette di ritrovare tutti i clienti di Lecce.&lt;br /&gt;
Oltre a parole chiave nuove, una cosa che si può notare è che a dispetto di "Option Strict On" il tipo delle variabili non viene specificato. Questo miracolo è possibile grazie all'introduzione dei tipi anonimi, ma questa è un'altra storia (probabilmente saranno oggetto di un'altro post), quello che ci interessa sapere è che "clientiLeccesi" non contiene il risultato della query, ma la query stessa. In pratica l'istruzione "From" non viene eseguita durante la dichiarazione, ma nel momento in cui si accede ai valori di clientiLeccesi. Questa è una cosa da tener sempre presente, in quanto potremmo ottenere risultati diversi da quelli che ci aspetteremmo, se per esempio subito dopo la dichiarazione della query, andassimo a modificare i dati del db.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;SELECT SINGOLA RIGA&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;Questa estensione di Linq ci permette di ottenere un singolo elemento dalla collezione&lt;br /&gt;
&lt;br /&gt;
Dim idcliente As int32 = 12&lt;br /&gt;
Dim cliente = clienti.Single(Function(c) c.id = idcliente)&lt;br /&gt;
&lt;br /&gt;
come possiamo notare, nella versione 9 di vb, sono state introdotte le Lambda Expression, che in questo caso ci permette di specificare quale cliente vogliamo ottenere.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;INSERT INTO&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
In ogni operazione di modifica dei dati, le istruzioni non vengono eseguite fino a che non viene richiamato il metodo SubmitChanges() del dataContext. Così per inserire un nuovo cliente abbiamo:&lt;br /&gt;
&lt;br /&gt;
Dim c = New clienti&lt;br /&gt;
&lt;br /&gt;
c.Nome = "Paperone"&lt;br /&gt;
c.Cognome = "De Paperoni"&lt;br /&gt;
c.città = "Paperopoli"&lt;br /&gt;
&lt;br /&gt;
DBDataContext.clienti.InsertOnSubmit(c)&lt;br /&gt;
&lt;br /&gt;
DBDataContext.SubmitChanges()&lt;br /&gt;
&lt;br /&gt;
a questo punto se id cliente e di tipo identity, e quindi viene generato automaticamente, subito dopo la chiamata SubmitChanges(), possiamo conoscere l'id semplicemente leggendolo :&lt;br /&gt;
&lt;br /&gt;
label1.text = c.id&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;UPDATE&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Per emodificare i dati, possiamo utilizzare le stesse tecniche che utilizzeremmo se il db fosse una classe in memoria (e in effetti il dataContex lo è).&lt;br /&gt;
&lt;br /&gt;
dim c =  clienti.Single(Function(c) c.id = idcliente)&lt;br /&gt;
&lt;br /&gt;
c.nome = c.nome.ToUpper&lt;br /&gt;
c.cognome = "ROSSI"&lt;br /&gt;
&lt;br /&gt;
DBDataContext.SubmitChanges()&lt;br /&gt;
&lt;br /&gt;
le modifiche apportate a c vengono automaticamente riflesse al database durante la chiamata SubmitChanges()&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;DELETE&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
dim c =  clienti.Single(Function(c) c.id = idcliente)&lt;br /&gt;
&lt;br /&gt;
DBDataContext.DeleteOnSubmit(c)&lt;br /&gt;
&lt;br /&gt;
DBDataContext.SubmitChanges()&lt;br /&gt;
&lt;br /&gt;
L'eliminazione di dati avviene semplicemente richiamando il metodo DeleteOnSubmit(), naturalmente seguito da SubmitChanges()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per questo post abbiamo finito, ma tratterò di nuovo quest'argomento in seguito, per ora spero che sia sufficente a colmare almeno in minima parte la carenza di info in rete sull'utilizzo di Linq con VB.net.&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2975568796191595801-4661508784272325218?l=www.panzuto.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Gpanz/~4/NuYz_jnd5-I" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.panzuto.com/feeds/4661508784272325218/comments/default" title="Commenti sul post" /><link rel="replies" type="text/html" href="http://www.panzuto.com/2008/07/linq-to-sql-e-vbnet-visualizzare-e.html#comment-form" title="0 Commenti" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2975568796191595801/posts/default/4661508784272325218?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2975568796191595801/posts/default/4661508784272325218?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Gpanz/~3/NuYz_jnd5-I/linq-to-sql-e-vbnet-visualizzare-e.html" title="Linq To SQL e vb.net: visualizzare e aggiornare dati del database e ottenere l'identità" /><author><name>Giuseppe Panzuto</name><uri>http://www.blogger.com/profile/10499340861300016020</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="31" src="http://3.bp.blogspot.com/-fMooz4zPIHE/Td5m-W0ln7I/AAAAAAAABb8/6sdaypnLoaY/s220/Picture0012.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.panzuto.com/2008/07/linq-to-sql-e-vbnet-visualizzare-e.html</feedburner:origLink></entry></feed>

