<?xml version="1.0" encoding="iso-8859-1" ?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"><channel><title>PeppeDotNet Blog - Category: Useful methods</title><link>http://www.peppedotnet.it/Blog/Categoria/Useful_methods/</link><description>Marchi Giuseppe personal blog</description><dc:language>it-it</dc:language><pubDate>Fri, 22 Oct 2004 00:00:00 GMT</pubDate><lastBuildDate>Thu, 23 May 2013 22:08:55 GMT</lastBuildDate><webMaster>info@peppedotnet.it (Giuseppe Marchi)</webMaster><managingEditor>info@peppedotnet.it (Giuseppe Marchi)</managingEditor><copyright>PeppeDotNet 2004/06</copyright><generator>dotRss 0.9.3.28434 Beta2 - http://www.peppedotnet.it/Projects/dotRSS.aspx</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><category>.NET and Sharepoint programming</category><ttl>60</ttl><image><title>PeppeDotNet</title><url>http://www.peppedotnet.it/img/logo.gif</url><link>http://www.peppedotnet.it/Blog</link><width>144</width><height>30</height><description>PeppeDotNet.it</description></image><item><title>Metodo per generare velocemente i campi da visualizzare in una query CAML</title><link>http://www.peppedotnet.it/Blog/HowToQuicklyBuildViewFieldsPropertyForCAMLQueries.aspx</link><pubDate>Wed, 07 Jul 2010 12:08:03 GMT</pubDate><description>Chi usa le query CAML sa che è una buona condotta filtrare l'elenco dei campi da ritornare a fronte di una query, per migliorare le performance della query stessa.
&lt;br /&gt;Per applicare tale filtro, basta inserire all'interno della proprietà "ViewFields" della classe SPQuery, tanti elementi di tipo "FieldRef" per quanti campi vogliamo far ritornare alla nostra selezione. Quindi per esempio:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;SPQuery query = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; SPQuery();
&lt;br /&gt;query.ViewFields = &lt;span style="color: #A31515"&gt;"&lt;FieldRef Name='Title'/&gt;&lt;FieldRef Name='Created'/&gt;&lt;FieldRef Name='ID'/&gt;"&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;Scrivendo questi elementi direttamente però, è molto probabile incappare in errori di sintassi, soprattutto a fronte della specifica di tanti campi.
&lt;br /&gt;
&lt;br /&gt;Ecco quindi un metodo che ci aiuta nella creazione dell'elenco dei campi da visualizzare nelle nostre query CAML:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;public&lt;/span&gt; &lt;span style="color: #0000FF"&gt;static&lt;/span&gt; &lt;span style="color: #0000FF"&gt;string&lt;/span&gt; CreateViewFields(&lt;span style="color: #0000FF"&gt;params&lt;/span&gt; &lt;span style="color: #0000FF"&gt;string&lt;/span&gt;[] fieldNames)
&lt;br /&gt;{
&lt;br /&gt;    StringBuilder sb = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; StringBuilder();
&lt;br /&gt;    &lt;span style="color: #0000FF"&gt;foreach&lt;/span&gt; (&lt;span style="color: #0000FF"&gt;string&lt;/span&gt; fieldName &lt;span style="color: #0000FF"&gt;in&lt;/span&gt; fieldNames)
&lt;br /&gt;        sb.AppendFormat(&lt;span style="color: #A31515"&gt;"&lt;FieldRef Name='{0}'/&gt;"&lt;/span&gt;, fieldName);
&lt;br /&gt;    
&lt;br /&gt;    &lt;span style="color: #0000FF"&gt;return&lt;/span&gt; sb.ToString();
&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;da utilizzare in questo modo:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;SPQuery query = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; SPQuery();
&lt;br /&gt;query.ViewFields = CreateViewFields(&lt;span style="color: #A31515"&gt;"ID"&lt;/span&gt;, &lt;span style="color: #A31515"&gt;"Created"&lt;/span&gt;, &lt;span style="color: #A31515"&gt;"Modified"&lt;/span&gt;, &lt;span style="color: #A31515"&gt;"Title"&lt;/span&gt;, &lt;span style="color: #A31515"&gt;"Author"&lt;/span&gt;, &lt;span style="color: #A31515"&gt;"Editor"&lt;/span&gt;);&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;Spero vi possa essere utile. Per me lo è stato.. :)
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/SharePoint.aspx" title="TAG: SharePoint"&gt;SharePoint&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/CAML.aspx" title="TAG: CAML"&gt;CAML&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/HowToQuicklyBuildViewFieldsPropertyForCAMLQueries.aspx#comm</comments><guid>/Blog/HowToQuicklyBuildViewFieldsPropertyForCAMLQueries.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>Useful methods</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/478.aspx</trackback:ping></item><item><title>Come allineare centralmente del contenuto sia in IE che in Firefox</title><link>http://www.peppedotnet.it/Blog/TextAlignCenterIEFirefox.aspx</link><pubDate>Fri, 21 Sep 2007 16:11:29 GMT</pubDate><description>Oggi sono incappato in questa cosa. Mettendo nello stile dell'elemento body di una mia pagina html, l'attributo text-align: center, in modo da allineare tutto il contenuto al centro della pagina. In IE (chiaramente) funziona tutto benissimo, mentre in Firefox resta sempre tutto allineato a sinistra.
&lt;br /&gt;Cerco un pò su google e scopro che l'equivalente comando per Firefox è:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;text-align: -moz-center&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;se può servire a qualcuno ...
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/Internet Explorer.aspx" title="TAG: Internet Explorer"&gt;Internet Explorer&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/CSS.aspx" title="TAG: CSS"&gt;CSS&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/HTML.aspx" title="TAG: HTML"&gt;HTML&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/TextAlignCenterIEFirefox.aspx#comm</comments><guid>/Blog/TextAlignCenterIEFirefox.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>Useful methods</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/259.aspx</trackback:ping></item><item><title>Metodo AddAppointment</title><link>http://www.peppedotnet.it/Blog/AddAppointmentMethod.aspx</link><pubDate>Wed, 21 Feb 2007 14:40:51 GMT</pubDate><description>Ecco come creare un nuovo appuntamento per Outlook 2003. Il metodo crea una stringa di informazioni che va salvata in un file con estensione .vcs che successivamente verrà visualizzato dal client di posta Microsoft come un nuovo appuntamento da salvare.
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;private&lt;/span&gt; &lt;span style="color: #0000FF"&gt;string&lt;/span&gt; AddAppointment(DateTime startDate, DateTime endDate, 
&lt;br /&gt;                              &lt;span style="color: #0000FF"&gt;string&lt;/span&gt; description, &lt;span style="color: #0000FF"&gt;string&lt;/span&gt; summary, &lt;span style="color: #0000FF"&gt;int&lt;/span&gt; priority, &lt;span style="color: #0000FF"&gt;string&lt;/span&gt; location)
&lt;br /&gt;{
&lt;br /&gt;    StringWriter sw = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; StringWriter();
&lt;br /&gt;    sw.WriteLine(&lt;span style="color: #A31515"&gt;"BEGIN: VCALENDAR"&lt;/span&gt;);
&lt;br /&gt;    sw.WriteLine(&lt;span style="color: #A31515"&gt;"VERSION:1.0"&lt;/span&gt;);
&lt;br /&gt;    sw.WriteLine(&lt;span style="color: #A31515"&gt;"BEGIN: VEVENT"&lt;/span&gt;);
&lt;br /&gt;    sw.WriteLine(&lt;span style="color: #A31515"&gt;"DTSTART:{0:yyyyMMdd\\THHmmss\\Z}"&lt;/span&gt;, startDate.ToUniversalTime());
&lt;br /&gt;    sw.WriteLine(&lt;span style="color: #A31515"&gt;"DTEND:{0:yyyyMMdd\\THHmmss\\Z}"&lt;/span&gt;, endDate.ToUniversalTime());
&lt;br /&gt;    sw.WriteLine(&lt;span style="color: #A31515"&gt;"LOCATION:{0}"&lt;/span&gt;, location);
&lt;br /&gt;    sw.WriteLine(&lt;span style="color: #A31515"&gt;"DESCRIPTION;ENCODING=QUOTED-PRINTABLE:{0}"&lt;/span&gt;, description);
&lt;br /&gt;    sw.WriteLine(&lt;span style="color: #A31515"&gt;"SUMMARY;ENCODING=QUOTED-PRINTABLE:{0}"&lt;/span&gt;, summary);
&lt;br /&gt;    sw.WriteLine(&lt;span style="color: #A31515"&gt;"PRIORITY:{0}"&lt;/span&gt;, priority);
&lt;br /&gt;    sw.WriteLine(&lt;span style="color: #A31515"&gt;"END:VEVENT"&lt;/span&gt;);
&lt;br /&gt;    sw.WriteLine(&lt;span style="color: #A31515"&gt;"END:VCALENDAR"&lt;/span&gt;);
&lt;br /&gt;    &lt;span style="color: #0000FF"&gt;return&lt;/span&gt; sw.ToString();
&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;Ecco un esempio di utilizzo in una pagina asp.net:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;public&lt;/span&gt; partial &lt;span style="color: #0000FF"&gt;class&lt;/span&gt; AddAppointment : System.Web.UI.Page
&lt;br /&gt;{
&lt;br /&gt;    &lt;span style="color: #0000FF"&gt;protected&lt;/span&gt; &lt;span style="color: #0000FF"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color: #0000FF"&gt;object&lt;/span&gt; sender, EventArgs e)
&lt;br /&gt;    {
&lt;br /&gt;        &lt;span style="color: #0000FF"&gt;string&lt;/span&gt; appointment = BuildAppointment();
&lt;br /&gt;        Response.ContentType = &lt;span style="color: #A31515"&gt;"text/x-vCalendar"&lt;/span&gt;;        
&lt;br /&gt;        Response.AppendHeader(&lt;span style="color: #A31515"&gt;"content-disposition"&lt;/span&gt;, &lt;span style="color: #A31515"&gt;"inline; filename=nomefile.vcs"&lt;/span&gt;);
&lt;br /&gt;        Response.Write(appointment);
&lt;br /&gt;        Response.End();
&lt;br /&gt;    }
&lt;br /&gt;
&lt;br /&gt;    &lt;span style="color: #0000FF"&gt;private&lt;/span&gt; &lt;span style="color: #0000FF"&gt;string&lt;/span&gt; BuildAppointment()
&lt;br /&gt;    {       
&lt;br /&gt;        &lt;span style="color: #0000FF"&gt;return&lt;/span&gt; AddAppointment(DateTime.Now, DateTime.Now.AddHours(2), &lt;span style="color: #A31515"&gt;"Note"&lt;/span&gt;, &lt;span style="color: #A31515"&gt;"Titolo"&lt;/span&gt;, 1, &lt;span style="color: #A31515"&gt;"Luogo"&lt;/span&gt;);
&lt;br /&gt;    }
&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;TAGS: [&lt;a href="http://www.peppedotnet.it/Tags/Outlook.aspx" title="TAG: Outlook"&gt;Outlook&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/ASP.NET.aspx" title="TAG: ASP.NET"&gt;ASP.NET&lt;/a&gt;] [&lt;a href="http://www.peppedotnet.it/Tags/Office.aspx" title="TAG: Office"&gt;Office&lt;/a&gt;]</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/AddAppointmentMethod.aspx#comm</comments><guid>/Blog/AddAppointmentMethod.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>Useful methods</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/210.aspx</trackback:ping></item><item><title>Metodo RemoveTags</title><link>http://www.peppedotnet.it/Blog/RemoveTags.aspx</link><pubDate>Fri, 05 Jan 2007 12:17:49 GMT</pubDate><description>Ecco un metodo abbastanza utile, in grado di rimuovere tutti i tag XML/HTML (comunque tutto il testo contenuto tra i caratteri maggiore e minore) presenti in una stringa di testo.
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;private&lt;/span&gt; &lt;span style="color: #0000FF"&gt;string&lt;/span&gt; RemoveTags(&lt;span style="color: #0000FF"&gt;string&lt;/span&gt; input)
&lt;br /&gt;{
&lt;br /&gt;    &lt;span style="color: #0000FF"&gt;return&lt;/span&gt; Regex.Replace(input, @&lt;span style="color: #A31515"&gt;"&lt;[^&gt;]*&gt;"&lt;/span&gt;, String.Empty);
&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/RemoveTags.aspx#comm</comments><guid>/Blog/RemoveTags.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>Useful methods</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/192.aspx</trackback:ping></item><item><title>GetAlphabetLetters</title><link>http://www.peppedotnet.it/Blog/GetAlphabetLetters.aspx</link><pubDate>Thu, 21 Dec 2006 10:33:47 GMT</pubDate><description>Ecco un semplice metodo per stampare a video tutte le lettere dell'alfabeto:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;public&lt;/span&gt; &lt;span style="color: #0000FF"&gt;static&lt;/span&gt; &lt;span style="color: #0000FF"&gt;void&lt;/span&gt; GetAlphabetLetters()
&lt;br /&gt;{
&lt;br /&gt;        &lt;span style="color: #0000FF"&gt;char&lt;/span&gt; a = Char.Parse(&lt;span style="color: #A31515"&gt;"A"&lt;/span&gt;);
&lt;br /&gt;        &lt;span style="color: #0000FF"&gt;char&lt;/span&gt; z = Char.Parse(&lt;span style="color: #A31515"&gt;"Z"&lt;/span&gt;);
&lt;br /&gt;        &lt;span style="color: #0000FF"&gt;for&lt;/span&gt; (&lt;span style="color: #0000FF"&gt;char&lt;/span&gt; i = a; i &lt;= z; i++)
&lt;br /&gt;        {
&lt;br /&gt;            Console.WriteLine(i.ToString());
&lt;br /&gt;        }
&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/GetAlphabetLetters.aspx#comm</comments><guid>/Blog/GetAlphabetLetters.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>Useful methods</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/187.aspx</trackback:ping></item><item><title>Metodo ReadFileBytes</title><link>http://www.peppedotnet.it/Blog/ReadFileBytes.aspx</link><pubDate>Wed, 15 Feb 2006 11:09:06 GMT</pubDate><description>Metodo, per leggere un array di byte che rappresenta un generico file, dato il suo percorso.
&lt;br /&gt;
&lt;br /&gt;&lt;b&gt;C#&lt;/b&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;public&lt;/span&gt; &lt;span style="color: #0000FF"&gt;static&lt;/span&gt; &lt;span style="color: #0000FF"&gt;byte&lt;/span&gt;[] ReadFileBytes(&lt;span style="color: #0000FF"&gt;string&lt;/span&gt; filePath)
&lt;br /&gt;{
&lt;br /&gt;	&lt;span style="color: #0000FF"&gt;byte&lt;/span&gt;[] data = &lt;span style="color: #0000FF"&gt;null&lt;/span&gt;;
&lt;br /&gt;	&lt;span style="color: #0000FF"&gt;try&lt;/span&gt;
&lt;br /&gt;	{
&lt;br /&gt;		FileInfo fInfo = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; FileInfo(filePath);
&lt;br /&gt;		&lt;span style="color: #0000FF"&gt;long&lt;/span&gt; numBytes = fInfo.Length;
&lt;br /&gt;		FileStream fs = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; FileStream(filePath, FileMode.Open, FileAccess.Read);
&lt;br /&gt;		BinaryReader br = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; BinaryReader(fs);
&lt;br /&gt;		data = br.ReadBytes((&lt;span style="color: #0000FF"&gt;int&lt;/span&gt;)numBytes);
&lt;br /&gt;		br.Close();
&lt;br /&gt;		fs.Close();
&lt;br /&gt;	}
&lt;br /&gt;	&lt;span style="color: #0000FF"&gt;catch&lt;/span&gt; (Exception er)
&lt;br /&gt;	{
&lt;br /&gt;		&lt;span style="color: #0000FF"&gt;throw&lt;/span&gt; &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; Exception(er.Message, er);
&lt;br /&gt;	}
&lt;br /&gt;	&lt;span style="color: #0000FF"&gt;return&lt;/span&gt; data;
&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;&lt;b&gt;VB.NET&lt;/b&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;Public&lt;/span&gt; &lt;span style="color: #0000FF"&gt;Shared&lt;/span&gt; &lt;span style="color: #0000FF"&gt;Function&lt;/span&gt; ReadFileBytes(&lt;span style="color: #0000FF"&gt;ByVal&lt;/span&gt; filePath &lt;span style="color: #0000FF"&gt;As&lt;/span&gt; &lt;span style="color: #0000FF"&gt;String&lt;/span&gt;) &lt;span style="color: #0000FF"&gt;As&lt;/span&gt; &lt;span style="color: #0000FF"&gt;Byte&lt;/span&gt;()
&lt;br /&gt;	&lt;span style="color: #0000FF"&gt;Dim&lt;/span&gt; data() &lt;span style="color: #0000FF"&gt;As&lt;/span&gt; &lt;span style="color: #0000FF"&gt;Byte&lt;/span&gt;
&lt;br /&gt;	&lt;span style="color: #0000FF"&gt;Try&lt;/span&gt; 
&lt;br /&gt;		&lt;span style="color: #0000FF"&gt;Dim&lt;/span&gt; fInfo &lt;span style="color: #0000FF"&gt;As&lt;/span&gt; &lt;span style="color: #0000FF"&gt;New&lt;/span&gt; FileInfo(filePath)
&lt;br /&gt;		&lt;span style="color: #0000FF"&gt;Dim&lt;/span&gt; numBytes &lt;span style="color: #0000FF"&gt;As&lt;/span&gt; &lt;span style="color: #0000FF"&gt;Long&lt;/span&gt; = fInfo.Length
&lt;br /&gt;		&lt;span style="color: #0000FF"&gt;Dim&lt;/span&gt; fs &lt;span style="color: #0000FF"&gt;As&lt;/span&gt; &lt;span style="color: #0000FF"&gt;New&lt;/span&gt; FileStream(filePath, FileMode.Open, FileAccess.Read)
&lt;br /&gt;		&lt;span style="color: #0000FF"&gt;Dim&lt;/span&gt; br &lt;span style="color: #0000FF"&gt;As&lt;/span&gt; BinaryReader = &lt;span style="color: #0000FF"&gt;New&lt;/span&gt; BinaryReader(fs)
&lt;br /&gt;		data = br.ReadBytes(&lt;span style="color: #0000FF"&gt;CType&lt;/span&gt;(numBytes,&lt;span style="color: #0000FF"&gt;Integer&lt;/span&gt;))
&lt;br /&gt;		br.Close
&lt;br /&gt;		fs.Close
&lt;br /&gt;	&lt;span style="color: #0000FF"&gt;Catch&lt;/span&gt; er &lt;span style="color: #0000FF"&gt;As&lt;/span&gt; Exception
&lt;br /&gt;		&lt;span style="color: #0000FF"&gt;Throw&lt;/span&gt; &lt;span style="color: #0000FF"&gt;New&lt;/span&gt; Exception(er.Message, er)
&lt;br /&gt;	&lt;span style="color: #0000FF"&gt;End&lt;/span&gt; &lt;span style="color: #0000FF"&gt;Try&lt;/span&gt;
&lt;br /&gt;	&lt;span style="color: #0000FF"&gt;Return&lt;/span&gt; data
&lt;br /&gt;&lt;span style="color: #0000FF"&gt;End&lt;/span&gt; &lt;span style="color: #0000FF"&gt;Function&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/ReadFileBytes.aspx#comm</comments><guid>/Blog/ReadFileBytes.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>Useful methods</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/119.aspx</trackback:ping></item><item><title>Metodo ItemsOnColumns</title><link>http://www.peppedotnet.it/Blog/ItemsOnColumns.aspx</link><pubDate>Mon, 02 Jan 2006 15:39:16 GMT</pubDate><description>In questi giorni mi è capitato di dover rappresentare più record divisi in n colonne. La cosa è semplice se il numero totale di record è divisibile, senza resti, per il numero di colonne. Ma se invece la divisione ha resto ?
&lt;br /&gt;Facciamo un esemio un pò più pratico: ho 11 record da suddividere il 3 colonne; la cosa più ovvia è di infilare nelle prime due colonne 4 record e nella terza 3 record, senza lasciarne nessuno fuori.
&lt;br /&gt;Il meccanismo è lo stesso che effettua il DataList per la paginazione di record su più colonne. Questo è un metodo semplice per avere lo stesso risultato ed utilizzarlo in ambiti più ristretti, dove magari l'uso del controllo DataList non è possibile.
&lt;br /&gt;
&lt;br /&gt;&lt;b&gt;C#&lt;/b&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;public&lt;/span&gt; &lt;span style="color: #0000FF"&gt;static&lt;/span&gt; &lt;span style="color: #0000FF"&gt;int&lt;/span&gt;[] ItemsOnColumns(&lt;span style="color: #0000FF"&gt;int&lt;/span&gt; tot, &lt;span style="color: #0000FF"&gt;int&lt;/span&gt; cols)
&lt;br /&gt;{
&lt;br /&gt;     &lt;span style="color: #0000FF"&gt;int&lt;/span&gt;[] array = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; &lt;span style="color: #0000FF"&gt;int&lt;/span&gt;[cols];
&lt;br /&gt;     &lt;span style="color: #0000FF"&gt;int&lt;/span&gt; rest = 0;
&lt;br /&gt;     &lt;span style="color: #0000FF"&gt;int&lt;/span&gt; totInCol = Math.DivRem(tot, cols, &lt;span style="color: #0000FF"&gt;out&lt;/span&gt; rest);
&lt;br /&gt;     &lt;span style="color: #0000FF"&gt;for&lt;/span&gt;(&lt;span style="color: #0000FF"&gt;int&lt;/span&gt; i=0; i&lt;array.Length; i++)
&lt;br /&gt;     {
&lt;br /&gt;          array[i] = totInCol;
&lt;br /&gt;     }
&lt;br /&gt;     &lt;span style="color: #0000FF"&gt;if&lt;/span&gt;(rest != 0)
&lt;br /&gt;     {
&lt;br /&gt;          &lt;span style="color: #0000FF"&gt;int&lt;/span&gt; left = tot - (totInCol * cols);
&lt;br /&gt;          &lt;span style="color: #0000FF"&gt;for&lt;/span&gt;(&lt;span style="color: #0000FF"&gt;int&lt;/span&gt; j=0; j&lt;array.Length; j++)
&lt;br /&gt;          {
&lt;br /&gt;               &lt;span style="color: #0000FF"&gt;if&lt;/span&gt;(left &gt; 0)
&lt;br /&gt;               {
&lt;br /&gt;                    array[j] += 1;
&lt;br /&gt;                    left--;
&lt;br /&gt;               }
&lt;br /&gt;          }
&lt;br /&gt;     }
&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;Con questo metodo, avrete una struttura del tipo:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;[numeropagina-1] = record presenti in quella pagina&lt;/div&gt;
&lt;br /&gt;Quindi nel caso di 11 record in 3 colonne, avremmo:
&lt;br /&gt;
&lt;br /&gt;array[0] = 4
&lt;br /&gt;array[1] = 4
&lt;br /&gt;array[2] = 3</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/ItemsOnColumns.aspx#comm</comments><guid>/Blog/ItemsOnColumns.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>Useful methods</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/111.aspx</trackback:ping></item><item><title>Metodo DateDiff in C#, corretto</title><link>http://www.peppedotnet.it/Blog/DateDiff_rettifica.aspx</link><pubDate>Sat, 03 Dec 2005 01:07:53 GMT</pubDate><description>Giorni fa, il mio mentore, mi ha fatto notare una cosa riguardo il metodo &lt;a href="http://www.peppedotnet.it/Blog/DateDiff.aspx" title="Metodo DateDiff in C#"&gt;DateDiff&lt;/a&gt; da me scritto. L'obbiezione riguardava il calcolo dei mesi di differenza tra una data e l'altra, che secondo lui, dava un risultato errato facendo la differenza tra il 31 gennaio e il 1 marzo di un anno non bisestile.
&lt;br /&gt;Chiaramente aveva ragione, perchè cosi' com'era scritto prima, ritornava un bel 0 ! E non 2, come correttamente fa il DateDiff di Visual Basic.
&lt;br /&gt;Dove sbagliavo ?
&lt;br /&gt;Sicuramente nel fare direttamente la divisione per 30 del numero di giorni (che in quel specifico caso sono 29), sia nel tralasciare la culture del thread corrente, in modo tale da poter gestire gli anni bisestili e non.
&lt;br /&gt;Ecco quindi il risultato:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;public&lt;/span&gt; &lt;span style="color: #0000FF"&gt;static&lt;/span&gt; &lt;span style="color: #0000FF"&gt;long&lt;/span&gt; DateDiff(DateInterval interval, DateTime startDate, DateTime endDate)
&lt;br /&gt;{
&lt;br /&gt;     &lt;span style="color: #0000FF"&gt;long&lt;/span&gt; dateDiffVal = 0;
&lt;br /&gt;     Calendar cal = Thread.CurrentThread.CurrentCulture.Calendar;
&lt;br /&gt;     TimeSpan ts = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; TimeSpan(endDate.Ticks - startDate.Ticks);
&lt;br /&gt;     &lt;span style="color: #0000FF"&gt;switch&lt;/span&gt; (interval)
&lt;br /&gt;     {
&lt;br /&gt;          &lt;span style="color: #0000FF"&gt;case&lt;/span&gt; DateInterval.Day:
&lt;br /&gt;               dateDiffVal = (&lt;span style="color: #0000FF"&gt;long&lt;/span&gt;)ts.TotalDays;
&lt;br /&gt;               &lt;span style="color: #0000FF"&gt;break&lt;/span&gt;;
&lt;br /&gt;          &lt;span style="color: #0000FF"&gt;case&lt;/span&gt; DateInterval.Hour:
&lt;br /&gt;               dateDiffVal = (&lt;span style="color: #0000FF"&gt;long&lt;/span&gt;)ts.TotalHours;
&lt;br /&gt;               &lt;span style="color: #0000FF"&gt;break&lt;/span&gt;;
&lt;br /&gt;          &lt;span style="color: #0000FF"&gt;case&lt;/span&gt; DateInterval.Millisecond:
&lt;br /&gt;               dateDiffVal = (&lt;span style="color: #0000FF"&gt;long&lt;/span&gt;)ts.TotalMilliseconds;
&lt;br /&gt;               &lt;span style="color: #0000FF"&gt;break&lt;/span&gt;;
&lt;br /&gt;          &lt;span style="color: #0000FF"&gt;case&lt;/span&gt; DateInterval.Minute:
&lt;br /&gt;               dateDiffVal = (&lt;span style="color: #0000FF"&gt;long&lt;/span&gt;)ts.TotalMinutes;
&lt;br /&gt;               &lt;span style="color: #0000FF"&gt;break&lt;/span&gt;;
&lt;br /&gt;          &lt;span style="color: #0000FF"&gt;case&lt;/span&gt; DateInterval.Month:
&lt;br /&gt;               dateDiffVal = (&lt;span style="color: #0000FF"&gt;long&lt;/span&gt;)(((cal.GetYear(endDate)
&lt;br /&gt;                                   - cal.GetYear(startDate)) * 12
&lt;br /&gt;                                   + cal.GetMonth(endDate))
&lt;br /&gt;                                   - cal.GetMonth(startDate));
&lt;br /&gt;               &lt;span style="color: #0000FF"&gt;break&lt;/span&gt;;
&lt;br /&gt;          &lt;span style="color: #0000FF"&gt;case&lt;/span&gt; DateInterval.Quarter:
&lt;br /&gt;               dateDiffVal = (&lt;span style="color: #0000FF"&gt;long&lt;/span&gt;)((((cal.GetYear(endDate)
&lt;br /&gt;                                   - cal.GetYear(startDate)) * 4)
&lt;br /&gt;                                   + ((cal.GetMonth(endDate) - 1) / 3))
&lt;br /&gt;                                   - ((cal.GetMonth(startDate) - 1) / 3));
&lt;br /&gt;               &lt;span style="color: #0000FF"&gt;break&lt;/span&gt;;
&lt;br /&gt;          &lt;span style="color: #0000FF"&gt;case&lt;/span&gt; DateInterval.Second:
&lt;br /&gt;               dateDiffVal = (&lt;span style="color: #0000FF"&gt;long&lt;/span&gt;)ts.TotalSeconds;
&lt;br /&gt;               &lt;span style="color: #0000FF"&gt;break&lt;/span&gt;;
&lt;br /&gt;          &lt;span style="color: #0000FF"&gt;case&lt;/span&gt; DateInterval.Week:
&lt;br /&gt;               dateDiffVal = (&lt;span style="color: #0000FF"&gt;long&lt;/span&gt;)(ts.TotalDays / 7);
&lt;br /&gt;               &lt;span style="color: #0000FF"&gt;break&lt;/span&gt;;
&lt;br /&gt;          &lt;span style="color: #0000FF"&gt;case&lt;/span&gt; DateInterval.Year:
&lt;br /&gt;               dateDiffVal = (&lt;span style="color: #0000FF"&gt;long&lt;/span&gt;)(cal.GetYear(endDate) - cal.GetYear(startDate));
&lt;br /&gt;               &lt;span style="color: #0000FF"&gt;break&lt;/span&gt;;
&lt;br /&gt;     }
&lt;br /&gt;          &lt;span style="color: #0000FF"&gt;return&lt;/span&gt; dateDiffVal;
&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;Oltre a questo mi ha fatto notare anche che il metodo DateDiff di VB, lo possiamo utilizzare semplicemente importanto il namespace Microsoft.VisualBasic. Vero anche questo... ma cosi' però ci perdo il gusto :D</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/DateDiff_rettifica.aspx#comm</comments><guid>/Blog/DateDiff_rettifica.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>Useful methods</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/103.aspx</trackback:ping></item><item><title>Metodo DateDiff in C#</title><link>http://www.peppedotnet.it/Blog/DateDiff.aspx</link><pubDate>Sun, 30 Oct 2005 15:25:17 GMT</pubDate><description>Ecco l'equivalente in C# del metodo DateDiff, funzione propria di Visual Basic.
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;public&lt;/span&gt; &lt;span style="color: #0000FF"&gt;static&lt;/span&gt; &lt;span style="color: #0000FF"&gt;long&lt;/span&gt; DateDiff(DateInterval interval, DateTime startDate, DateTime endDate)
&lt;br /&gt;{
&lt;br /&gt;	&lt;span style="color: #0000FF"&gt;long&lt;/span&gt; dateDiffVal = 0;
&lt;br /&gt;	TimeSpan ts = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; TimeSpan(endDate.Ticks - startDate.Ticks);
&lt;br /&gt;	&lt;span style="color: #0000FF"&gt;switch&lt;/span&gt;(interval)
&lt;br /&gt;	{
&lt;br /&gt;		&lt;span style="color: #0000FF"&gt;case&lt;/span&gt; DateInterval.Day:
&lt;br /&gt;			dateDiffVal = (&lt;span style="color: #0000FF"&gt;long&lt;/span&gt;)ts.Days;
&lt;br /&gt;			&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;;
&lt;br /&gt;		&lt;span style="color: #0000FF"&gt;case&lt;/span&gt; DateInterval.Hour:
&lt;br /&gt;			dateDiffVal = (&lt;span style="color: #0000FF"&gt;long&lt;/span&gt;)ts.TotalHours;
&lt;br /&gt;			&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;;
&lt;br /&gt;		&lt;span style="color: #0000FF"&gt;case&lt;/span&gt; DateInterval.Millisecond:
&lt;br /&gt;			dateDiffVal = (&lt;span style="color: #0000FF"&gt;long&lt;/span&gt;)ts.TotalMilliseconds;
&lt;br /&gt;			&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;;
&lt;br /&gt;		&lt;span style="color: #0000FF"&gt;case&lt;/span&gt; DateInterval.Minute:
&lt;br /&gt;			dateDiffVal = (&lt;span style="color: #0000FF"&gt;long&lt;/span&gt;)ts.TotalMinutes;
&lt;br /&gt;			&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;;
&lt;br /&gt;		&lt;span style="color: #0000FF"&gt;case&lt;/span&gt; DateInterval.Month:
&lt;br /&gt;			dateDiffVal = (&lt;span style="color: #0000FF"&gt;long&lt;/span&gt;)(ts.Days / 30);
&lt;br /&gt;			&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;;
&lt;br /&gt;		&lt;span style="color: #0000FF"&gt;case&lt;/span&gt; DateInterval.Quarter:
&lt;br /&gt;			dateDiffVal = (&lt;span style="color: #0000FF"&gt;long&lt;/span&gt;)((ts.Days / 30) / 3);
&lt;br /&gt;			&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;;
&lt;br /&gt;		&lt;span style="color: #0000FF"&gt;case&lt;/span&gt; DateInterval.Second:
&lt;br /&gt;			dateDiffVal = (&lt;span style="color: #0000FF"&gt;long&lt;/span&gt;)ts.TotalSeconds;
&lt;br /&gt;			&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;;
&lt;br /&gt;		&lt;span style="color: #0000FF"&gt;case&lt;/span&gt; DateInterval.Week:
&lt;br /&gt;			dateDiffVal = (&lt;span style="color: #0000FF"&gt;long&lt;/span&gt;)(ts.Days / 7);
&lt;br /&gt;			&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;;
&lt;br /&gt;		&lt;span style="color: #0000FF"&gt;case&lt;/span&gt; DateInterval.Year:
&lt;br /&gt;			dateDiffVal = (&lt;span style="color: #0000FF"&gt;long&lt;/span&gt;)(ts.Days / 365);
&lt;br /&gt;			&lt;span style="color: #0000FF"&gt;break&lt;/span&gt;;
&lt;br /&gt;	}
&lt;br /&gt;	&lt;span style="color: #0000FF"&gt;return&lt;/span&gt; dateDiffVal;
&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;L'enumaration DateInterval, va definita in questo modo:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;public&lt;/span&gt; &lt;span style="color: #0000FF"&gt;enum&lt;/span&gt; DateInterval
&lt;br /&gt;{
&lt;br /&gt;	Millisecond,
&lt;br /&gt;	Second,
&lt;br /&gt;	Minute,
&lt;br /&gt;	Hour,
&lt;br /&gt;	Day,
&lt;br /&gt;	Week,
&lt;br /&gt;	Month,
&lt;br /&gt;	Quarter,
&lt;br /&gt;	Year,
&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/DateDiff.aspx#comm</comments><guid>/Blog/DateDiff.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>Useful methods</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/90.aspx</trackback:ping></item><item><title>Metodo DisplayDataSetStructure</title><link>http://www.peppedotnet.it/Blog/DisplayDataSetStructure.aspx</link><pubDate>Sat, 08 Oct 2005 12:09:33 GMT</pubDate><description>Metodo semplice semplice per stampare a video la struttura di un oggetto di tipo DataSet:
&lt;br /&gt;
&lt;br /&gt;&lt;b&gt;C#&lt;/b&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;static&lt;/span&gt; &lt;span style="color: #0000FF"&gt;void&lt;/span&gt; DisplayDataSetStructure(DataSet ds)
&lt;br /&gt;{
&lt;br /&gt;     Console.WriteLine(&lt;span style="color: #848284"&gt;"DataSet structure+\n"&lt;/span&gt;)
&lt;br /&gt;     &lt;span style="color: #0000FF"&gt;for&lt;/span&gt;(&lt;span style="color: #0000FF"&gt;int&lt;/span&gt; j=0; j&lt;ds.Tables.Count; j++)
&lt;br /&gt;     {
&lt;br /&gt;          Console.WriteLine(&lt;span style="color: #848284"&gt;"\tTable name: "&lt;/span&gt;+ds.Tables[j].TableName+&lt;span style="color: #848284"&gt;"\n"&lt;/span&gt;)
&lt;br /&gt;          &lt;span style="color: #0000FF"&gt;for&lt;/span&gt;(&lt;span style="color: #0000FF"&gt;int&lt;/span&gt; i=0; i&lt;ds.Tables[0].Columns.Count; i++)
&lt;br /&gt;          {
&lt;br /&gt;               Console.Write(&lt;span style="color: #848284"&gt;"\t\tColumn name: "&lt;/span&gt;+ds.Tables[0].Columns[i].ColumnName);
&lt;br /&gt;               Console.WriteLine(&lt;span style="color: #848284"&gt;" ("&lt;/span&gt;+ds.Tables[0].Columns[i].DataType.ToString()+&lt;span style="color: #848284"&gt;")\n"&lt;/span&gt;);
&lt;br /&gt;          }
&lt;br /&gt;     }
&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;&lt;b&gt;VB.NET&lt;/b&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;Shared&lt;/span&gt; &lt;span style="color: #0000FF"&gt;Sub&lt;/span&gt; DisplayDataSetStructure(&lt;span style="color: #0000FF"&gt;ByVal&lt;/span&gt; ds &lt;span style="color: #0000FF"&gt;As&lt;/span&gt; DataSet)
&lt;br /&gt;
&lt;br /&gt;     Console.WriteLine(&lt;span style="color: #848284"&gt;"DataSet structure"&lt;/span&gt; &amp; vbLf)
&lt;br /&gt;     &lt;span style="color: #0000FF"&gt;Dim&lt;/span&gt; j &lt;span style="color: #0000FF"&gt;As&lt;/span&gt; &lt;span style="color: #0000FF"&gt;Integer&lt;/span&gt;
&lt;br /&gt;     &lt;span style="color: #0000FF"&gt;Dim&lt;/span&gt; i &lt;span style="color: #0000FF"&gt;As&lt;/span&gt; &lt;span style="color: #0000FF"&gt;Integer&lt;/span&gt;
&lt;br /&gt;     &lt;span style="color: #0000FF"&gt;Do&lt;/span&gt; &lt;span style="color: #0000FF"&gt;While&lt;/span&gt; (j &lt; ds.Tables.Count)
&lt;br /&gt;
&lt;br /&gt;          Console.WriteLine(vbTab &amp; &lt;span style="color: #848284"&gt;"Table name: "&lt;/span&gt;+ds.Tables(j).TableName &amp; vbLf)
&lt;br /&gt;          &lt;span style="color: #0000FF"&gt;Do&lt;/span&gt; &lt;span style="color: #0000FF"&gt;While&lt;/span&gt; (i &lt; ds.Tables.Count)
&lt;br /&gt;
&lt;br /&gt;               Console.Write(vbTab &amp; vbTab &amp; &lt;span style="color: #848284"&gt;"Column name: "&lt;/span&gt;+ds.Tables[0].Columns[i].ColumnName);
&lt;br /&gt;               Console.WriteLine(&lt;span style="color: #848284"&gt;" ("&lt;/span&gt; &amp; ds.Tables[0].Columns[i].DataType.ToString()&amp;&lt;span style="color: #848284"&gt;")"&lt;/span&gt; &amp; vbLf);
&lt;br /&gt;               i = i + 1
&lt;br /&gt;          &lt;span style="color: #0000FF"&gt;Loop&lt;/span&gt;
&lt;br /&gt;          j = j + 1
&lt;br /&gt;     &lt;span style="color: #0000FF"&gt;Loop&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;span style="color: #0000FF"&gt;End&lt;/span&gt; &lt;span style="color: #0000FF"&gt;Sub&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/DisplayDataSetStructure.aspx#comm</comments><guid>/Blog/DisplayDataSetStructure.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>Useful methods</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/78.aspx</trackback:ping></item><item><title>Metodo ExistsString</title><link>http://www.peppedotnet.it/Blog/ExistsString.aspx</link><pubDate>Fri, 16 Sep 2005 22:57:01 GMT</pubDate><description>Ecco un simpatico modo per controllare se una stringa è nulla, senza doverla confrontare con &lt;span style="color: blue"&gt;null&lt;/span&gt; o con una stringa vuota ...
&lt;br /&gt;
&lt;br /&gt;&lt;b&gt;C#&lt;/b&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;public&lt;/span&gt; &lt;span style="color: #0000FF"&gt;static&lt;/span&gt; &lt;span style="color: #0000FF"&gt;bool&lt;/span&gt; ExistsString(&lt;span style="color: #0000FF"&gt;string&lt;/span&gt; input)
&lt;br /&gt;{
&lt;br /&gt;     &lt;span style="color: #0000FF"&gt;if&lt;/span&gt;((String.Empty + input).Length &gt; 0)
&lt;br /&gt;          &lt;span style="color: #0000FF"&gt;return&lt;/span&gt; &lt;span style="color: #0000FF"&gt;true&lt;/span&gt;;
&lt;br /&gt;     &lt;span style="color: #0000FF"&gt;else&lt;/span&gt;
&lt;br /&gt;          &lt;span style="color: #0000FF"&gt;return&lt;/span&gt; &lt;span style="color: #0000FF"&gt;false&lt;/span&gt;;
&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;&lt;b&gt;VB.NET&lt;/b&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;Public&lt;/span&gt; &lt;span style="color: #0000FF"&gt;Shared&lt;/span&gt; &lt;span style="color: #0000FF"&gt;Function&lt;/span&gt; ExistsString(&lt;span style="color: #0000FF"&gt;ByVal&lt;/span&gt; input &lt;span style="color: #0000FF"&gt;As&lt;/span&gt; &lt;span style="color: #0000FF"&gt;String&lt;/span&gt;) &lt;span style="color: #0000FF"&gt;As&lt;/span&gt; &lt;span style="color: #0000FF"&gt;Boolean&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;     &lt;span style="color: #0000FF"&gt;If&lt;/span&gt; (&lt;span style="color: #0000FF"&gt;String&lt;/span&gt;.Empty + input).Length &gt; 0 &lt;span style="color: #0000FF"&gt;Then&lt;/span&gt;
&lt;br /&gt;          &lt;span style="color: #0000FF"&gt;Return&lt;/span&gt; &lt;span style="color: #0000FF"&gt;True&lt;/span&gt;
&lt;br /&gt;     &lt;span style="color: #0000FF"&gt;Else&lt;/span&gt;
&lt;br /&gt;          &lt;span style="color: #0000FF"&gt;Return&lt;/span&gt; &lt;span style="color: #0000FF"&gt;False&lt;/span&gt;
&lt;br /&gt;     &lt;span style="color: #0000FF"&gt;End&lt;/span&gt; &lt;span style="color: #0000FF"&gt;If&lt;/span&gt;
&lt;br /&gt;&lt;span style="color: #0000FF"&gt;End&lt;/span&gt; &lt;span style="color: #0000FF"&gt;Function&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/ExistsString.aspx#comm</comments><guid>/Blog/ExistsString.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>Useful methods</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/68.aspx</trackback:ping></item><item><title>Metodo TruncString</title><link>http://www.peppedotnet.it/Blog/TruncString.aspx</link><pubDate>Thu, 15 Sep 2005 22:31:14 GMT</pubDate><description>Questa funzione permette di troncare una stringa, lasciando però intatta la parola che coincide con il punto di taglio.
&lt;br /&gt;Mi spiego meglio. Quante volte, durante la stampa a video di record, vi trovate a gestire stringhe di caratteri molte lunghe (come per esempio la descrizione di un prodotto ...), che decidete quindi di troncare per dare un aspetto migliore alle vostre pagine ?
&lt;br /&gt;Accade spessissimo, e la maggiorparte delle volte viene applicato semplicemente il metodo Substring() della classe String, per troncare il testo all'altezza desiderata, e vengono aggiunti i tre puntini alla fine del testo troncato. Attraverso questa tecnica però, può accadere benissimo che la parola finale risulti spezzata.
&lt;br /&gt;Con questo metodo, potete invece troncare la frase all'altezza desiderata, e mantenere le "ultime" parole intatte; potendo anche decidere se far finire la parola, o se troncare anch'essa per intero.
&lt;br /&gt;
&lt;br /&gt;&lt;b&gt;C#&lt;/b&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;public&lt;/span&gt; &lt;span style="color: #0000FF"&gt;static&lt;/span&gt; &lt;span style="color: #0000FF"&gt;string&lt;/span&gt; TruncString(&lt;span style="color: #0000FF"&gt;string&lt;/span&gt; input, &lt;span style="color: #0000FF"&gt;int&lt;/span&gt; maxLength, &lt;span style="color: #0000FF"&gt;bool&lt;/span&gt; goBack)
&lt;br /&gt;{
&lt;br /&gt;     &lt;span style="color: #0000FF"&gt;int&lt;/span&gt; stop = 0;
&lt;br /&gt;     &lt;span style="color: #0000FF"&gt;if&lt;/span&gt;(!goBack)
&lt;br /&gt;          stop = input.IndexOfAny(&lt;span style="color: #0000FF"&gt;new&lt;/span&gt; &lt;span style="color: #0000FF"&gt;char&lt;/span&gt;[] {';',',','.',' ',':'}, maxLength);
&lt;br /&gt;     &lt;span style="color: #0000FF"&gt;else&lt;/span&gt;
&lt;br /&gt;          stop = input.LastIndexOfAny(&lt;span style="color: #0000FF"&gt;new&lt;/span&gt; &lt;span style="color: #0000FF"&gt;char&lt;/span&gt;[] {';',',','.',' ',':'}, maxLength);
&lt;br /&gt;     &lt;span style="color: #0000FF"&gt;return&lt;/span&gt; input.Substring(0, stop) + &lt;span style="color: #848284"&gt;" ..."&lt;/span&gt;;
&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;&lt;b&gt;VB.NET&lt;/b&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;Public&lt;/span&gt; &lt;span style="color: #0000FF"&gt;Shared&lt;/span&gt; &lt;span style="color: #0000FF"&gt;Function&lt;/span&gt; TruncString(&lt;span style="color: #0000FF"&gt;ByVal&lt;/span&gt; input &lt;span style="color: #0000FF"&gt;As&lt;/span&gt; &lt;span style="color: #0000FF"&gt;String&lt;/span&gt;,
&lt;br /&gt;                                   &lt;span style="color: #0000FF"&gt;ByVal&lt;/span&gt; maxLength &lt;span style="color: #0000FF"&gt;As&lt;/span&gt; &lt;span style="color: #0000FF"&gt;Integer&lt;/span&gt;,
&lt;br /&gt;                                   &lt;span style="color: #0000FF"&gt;ByVal&lt;/span&gt; goBack &lt;span style="color: #0000FF"&gt;As&lt;/span&gt; &lt;span style="color: #0000FF"&gt;Boolean&lt;/span&gt;)
&lt;br /&gt;     &lt;span style="color: #0000FF"&gt;Dim&lt;/span&gt; stop &lt;span style="color: #0000FF"&gt;As&lt;/span&gt; &lt;span style="color: #0000FF"&gt;Integer&lt;/span&gt;
&lt;br /&gt;     &lt;span style="color: #0000FF"&gt;If&lt;/span&gt; &lt;span style="color: #0000FF"&gt;Not&lt;/span&gt; goBack &lt;span style="color: #0000FF"&gt;Then&lt;/span&gt;
&lt;br /&gt;          stop = input.IndexOfAny(&lt;span style="color: #0000FF"&gt;New&lt;/span&gt; &lt;span style="color: #0000FF"&gt;Char&lt;/span&gt; {&lt;span style="color: #848284"&gt;";"&lt;/span&gt;,&lt;span style="color: #848284"&gt;","&lt;/span&gt;,&lt;span style="color: #848284"&gt;"."&lt;/span&gt;,&lt;span style="color: #848284"&gt;" "&lt;/span&gt;,&lt;span style="color: #848284"&gt;":"&lt;/span&gt;}, maxLength)
&lt;br /&gt;     &lt;span style="color: #0000FF"&gt;Else&lt;/span&gt;
&lt;br /&gt;          stop = input.LastIndexOfAny(&lt;span style="color: #0000FF"&gt;New&lt;/span&gt; &lt;span style="color: #0000FF"&gt;Char&lt;/span&gt; {&lt;span style="color: #848284"&gt;";"&lt;/span&gt;,&lt;span style="color: #848284"&gt;","&lt;/span&gt;,&lt;span style="color: #848284"&gt;"."&lt;/span&gt;,&lt;span style="color: #848284"&gt;" "&lt;/span&gt;,&lt;span style="color: #848284"&gt;":"&lt;/span&gt;}, maxLength)
&lt;br /&gt;     &lt;span style="color: #0000FF"&gt;End&lt;/span&gt; &lt;span style="color: #0000FF"&gt;If&lt;/span&gt;
&lt;br /&gt;     &lt;span style="color: #0000FF"&gt;Return&lt;/span&gt; input.Substring(0, stop) &amp; &lt;span style="color: #848284"&gt;"..."&lt;/span&gt;
&lt;br /&gt;&lt;span style="color: #0000FF"&gt;End&lt;/span&gt; &lt;span style="color: #0000FF"&gt;Function&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;Passando quindi false come terzo parametro della funzione, decidiamo di troncare la frase subito dopo finita l'ultima parola.</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/TruncString.aspx#comm</comments><guid>/Blog/TruncString.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>Useful methods</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/67.aspx</trackback:ping></item><item><title>Metodo IsNumeric in C#</title><link>http://www.peppedotnet.it/Blog/IsNumeric.aspx</link><pubDate>Thu, 15 Sep 2005 22:10:24 GMT</pubDate><description>Oggi inauguro una nuova categoria del blog: &lt;b&gt;.NET useful methods&lt;/b&gt;, metodi di semplice utilizzo e (speriamo) grande utilità ...
&lt;br /&gt;Mi è venuta questa idea perchè proprio oggi mi sono trovato davanti ad un problema, che poteva sia essere risolto tramite le tanto amate "pezze", che essere risolto come si deve, creandosi cioè una funzioncina ad hoc. Nel prossimo post vedrete a cosa mi riferisco ...
&lt;br /&gt;
&lt;br /&gt;Ora però, vediamo il codice C# per implementare la funzione IsNumeric, propria di VB.NET, che controlla se una stringa può essere trasformata in un numero.
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;public&lt;/span&gt; &lt;span style="color: #0000FF"&gt;static&lt;/span&gt; &lt;span style="color: #0000FF"&gt;bool&lt;/span&gt; IsNumeric(&lt;span style="color: #0000FF"&gt;string&lt;/span&gt; input)
&lt;br /&gt;{
&lt;br /&gt;     &lt;span style="color: #0000FF"&gt;try&lt;/span&gt;
&lt;br /&gt;     {
&lt;br /&gt;          &lt;span style="color: #0000FF"&gt;int&lt;/span&gt;.Parse(input);
&lt;br /&gt;          &lt;span style="color: #0000FF"&gt;return&lt;/span&gt; &lt;span style="color: #0000FF"&gt;true&lt;/span&gt;;
&lt;br /&gt;     }
&lt;br /&gt;     &lt;span style="color: #0000FF"&gt;catch&lt;/span&gt;
&lt;br /&gt;     {
&lt;br /&gt;          &lt;span style="color: #0000FF"&gt;return&lt;/span&gt; &lt;span style="color: #0000FF"&gt;false&lt;/span&gt;;
&lt;br /&gt;     }
&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;</description><dc:creator> (Giuseppe Marchi)</dc:creator><comments>/Blog/IsNumeric.aspx#comm</comments><guid>/Blog/IsNumeric.aspx</guid><source url="http://www.peppedotnet.it/Blog/Rss.aspx" /><category>Useful methods</category><trackback:ping>http://www.peppedotnet.it/Blog/Trackbacks/66.aspx</trackback:ping></item></channel></rss>