<?xml version="1.0" encoding="iso-8859-15"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"><channel><title>blogs.ASPItalia.com</title><link>http://blogs.aspitalia.com//nostromo//</link><description>blogs.ASPItalia.com</description><language>it-it</language><copyright>1998-2013 ASPItalia.com/blogs.ASPItalia.com</copyright><generator>Generated by feed.ASPItalia.com 'Cortana' 2013.5.16</generator><sy:updatePeriod>hourly</sy:updatePeriod><sy:updateFrequency>1</sy:updateFrequency><sy:updateBase>1998-01-01T12:00+00:00</sy:updateBase><lastBuildDate>Tue, 02 Dec 2008 07:00:00 GMT</lastBuildDate><image><title>blogs.ASPItalia.com</title><url>http://gui.aspitalia.com/images/aspitalia/syndication.gif</url><link>http://blogs.aspitalia.com//nostromo//</link></image><item><title>Modificare il controllo TreeView</title><link>http://blogs.aspitalia.com/nostromo/post2439/Modificare-Controllo-TreeView.aspx</link><pubDate>Tue, 02 Dec 2008 07:00:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2439" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Durante la gestazione dell'ultimo &lt;a href="http://www.silverlightitalia.com/articoli/silverlight/sito-silverlight-2.0-frontend-animazioni.aspx"&gt;articolo&lt;/a&gt; tra la difficoltà emerse, una inerente il nuovo controllo TreeView per SL mi ha particolarmente infastidito.&lt;/p&gt;&lt;p&gt;Cliccate nel TreeView ma in un area vuota, vedrete come per magia che il TreeView perde la selezione attuale in favore del primo elemento.&lt;/p&gt;&lt;p&gt;Onestamente un comportamento fastidioso quanto indesiderato.&lt;/p&gt;&lt;p&gt;Questo comportamento trova riscontro in un &lt;a href="http://www.codeplex.com/silverlight/workitem/view.aspx?workitemid=1081"&gt;Bug&lt;/a&gt; segnalato nell'apposito spazio su Codeplex e sembra sia stato risolto.&lt;/p&gt;&lt;p&gt;in attesa che sia pubblicato il nuovo codice sorgente, ecco la mia soluzione per evitare quel comportamento.&lt;/p&gt;&lt;p&gt;per prima cosa apriamo il file TreeViewItem.cs navigamo al metodo OnGotFocus e sostituiamo tutto con :&lt;/p&gt;&lt;p&gt;&lt;code&gt;protected override void OnGotFocus(RoutedEventArgs e) { base.OnGotFocus(e); } &lt;/code&gt;&lt;/p&gt;&lt;p&gt;ed eseguiamo l'override del metodo OnMouseLeftButtonDown:&lt;/p&gt;&lt;p&gt;&lt;code&gt;protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e) &lt;/code&gt;&lt;code&gt;{ &lt;br /&gt;Select(true); // Activate the selection &lt;br /&gt;IsSelectionActive = true; &lt;br /&gt;UpdateVisualState(true);&lt;br /&gt; } &lt;/code&gt;&lt;/p&gt;&lt;p&gt;personalmente non ho capito e non ho codiviso la scelta di impostare la selezione ogni volta che il TreeView o meglio un TreeViewItem riceve il focus.&lt;/p&gt;&lt;p&gt;sono curioso e attendo la soluzione che verrà da CodePlex.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/Silverlight/" rel="tag"&gt;Silverlight&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/XAML/" rel="tag"&gt;XAML&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/nostromo/post2439/Modificare-Controllo-TreeView.aspx"&gt;&lt;em&gt;Modificare il controllo TreeView&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2013 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco Leoncini</dc:creator><category>asp.net, Silverlight, XAML</category><guid isPermaLink="true">http://blogs.aspitalia.com/nostromo/post2439/Modificare-Controllo-TreeView.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/nostromo/post2439/Modificare-Controllo-TreeView.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/nostromo/CommentRSS2439.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2439</trackback:ping></item><item><title>Perfezioniamo il ProfileDataSorce</title><link>http://blogs.aspitalia.com/nostromo/post2405/Perfezioniamo-ProfileDataSorce.aspx</link><pubDate>Mon, 13 Oct 2008 12:14:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2405" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;&lt;a onclick="function anonymous()
{
blankUrl(this.href); return false;
}" href="http://blogs.aspitalia.com/nostromo/post2403/datasource-profile.aspx"&gt;Venerdì&lt;/a&gt; ho proposto una soluzione per non perdere determinati automatismi quando si lavora con il Profile e ad esempio controlli tipo FormView.&lt;/p&gt;&lt;p&gt;La soluzione è realizzare un ProfileDataSorce, per chi ha dato un occhiata al codice, si sarà reso contro che tutto il meccaniscmo funziona finche le proprietà del Profile rimangano stringhe.&lt;/p&gt;&lt;p&gt;Abbastanza limitativa come limitazione&lt;img alt="smile_teeth" src="http://spaces.live.com/rte/emoticons/smile_teeth.gif" /&gt;&lt;/p&gt;&lt;p&gt;Al fini di poter utilizzare tutti i tipi primitivi è sufficente creare un metodo che si occupa di recuperare il converter adatto.&lt;/p&gt;&lt;code&gt;&lt;p&gt;private object ConvertType(Object value, Type type) &lt;br /&gt;{ &lt;br /&gt;    if ((value != null) &amp;amp;&amp;amp; !type.IsInstanceOfType(value)) &lt;br /&gt;    { &lt;br /&gt;        string text = value as string; &lt;/p&gt;&lt;p&gt;        if (text != null) &lt;br /&gt;        { &lt;br /&gt;            TypeConverter converter = TypeDescriptor.GetConverter(type); &lt;br /&gt;            if (converter == null) &lt;br /&gt;            { &lt;br /&gt;                return value; &lt;br /&gt;            } &lt;br /&gt;            try &lt;br /&gt;            { &lt;br /&gt;               return converter.ConvertFromInvariantString(text); &lt;br /&gt;            } &lt;br /&gt;            catch (NotSupportedException) &lt;br /&gt;            { &lt;br /&gt;                throw new InvalidOperationException(string.Format(&amp;quot;impossibile convertire nel tipo {0}, tipi non compatibili&amp;quot;, type.FullName)); &lt;br /&gt;            } &lt;br /&gt;            catch (FormatException) &lt;br /&gt;            { &lt;br /&gt;                throw new InvalidOperationException(string.Format(&amp;quot;impossibile convertire nel tipo {0}, formato non valido&amp;quot;,type.FullName)); &lt;br /&gt;            } &lt;br /&gt;        } &lt;br /&gt;        else &lt;br /&gt;        { &lt;br /&gt;            return text; &lt;br /&gt;        } &lt;br /&gt;    } &lt;br /&gt;    return value; &lt;br /&gt;}&lt;/p&gt;&lt;/code&gt;&lt;p&gt;e modificare ad esempio il metodo ExecuteUpdate così:&lt;/p&gt;&lt;code&gt;&lt;p&gt;protected override int ExecuteUpdate(IDictionary keys, IDictionary values, IDictionary oldValues) &lt;br /&gt;{ &lt;br /&gt;    foreach (DictionaryEntry item in values) &lt;br /&gt;    { &lt;br /&gt;        _profile[item.Key.ToString()] = ConvertType(values[item.Key.ToString()], _profile[item.Key.ToString()].GetType()); &lt;br /&gt;    } &lt;br /&gt;    _profile.Save(); &lt;br /&gt;    return 0; &lt;br /&gt;}&lt;/p&gt;&lt;/code&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/nostromo/post2405/Perfezioniamo-ProfileDataSorce.aspx"&gt;&lt;em&gt;Perfezioniamo il ProfileDataSorce&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2013 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco Leoncini</dc:creator><category>asp.net</category><guid isPermaLink="true">http://blogs.aspitalia.com/nostromo/post2405/Perfezioniamo-ProfileDataSorce.aspx</guid><slash:comments>2</slash:comments><wfw:comment>http://blogs.aspitalia.com/nostromo/post2405/Perfezioniamo-ProfileDataSorce.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/nostromo/CommentRSS2405.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2405</trackback:ping></item><item><title>Un DataSource per il Profile</title><link>http://blogs.aspitalia.com/nostromo/post2403/DataSource-Profile.aspx</link><pubDate>Fri, 10 Oct 2008 16:32:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2403" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;se come me diventare sempre pià prigri e anche un FindControl diventa faticoso, apprezzere sicuramente i vari xxxDataSource.&lt;/p&gt;&lt;p&gt;ma quando avete a che fare con il Profile? &lt;/p&gt;&lt;p&gt;bhe realizziamone uno ad hoc, così non ci perdiamo nessun automatismo &lt;img alt="smile_teeth" src="http://spaces.live.com/rte/emoticons/smile_teeth.gif" /&gt;&lt;/p&gt;&lt;code&gt;&lt;p&gt;using System;&lt;br /&gt;using System.Web;&lt;br /&gt;using System.Collections.ObjectModel;&lt;br /&gt;using System.Web.UI;&lt;br /&gt;using System.Web.Profile;&lt;br /&gt;using System.Collections;&lt;/p&gt;&lt;p&gt;namespace MyCustomControl&lt;br /&gt;{&lt;br /&gt;    public class ProfileDataSourceControl : DataSourceControl&lt;br /&gt;    {&lt;br /&gt;        protected override DataSourceView GetView(string viewName)&lt;br /&gt;        {&lt;br /&gt;            return new ProfileView(this, viewName);&lt;br /&gt;        }&lt;br /&gt;    }&lt;/p&gt;&lt;p&gt;    public class ProfileView : DataSourceView&lt;br /&gt;    {&lt;br /&gt;        private ProfileBase _profile = null;&lt;br /&gt;        private HttpContext _context = null;&lt;/p&gt;&lt;p&gt;        public ProfileView(IDataSource owner, string viewName): base(owner, viewName)&lt;br /&gt;        {&lt;br /&gt;            _context = HttpContext.Current;&lt;br /&gt;            if (_context == null)&lt;br /&gt;            {&lt;br /&gt;                throw new ApplicationException(&amp;quot;Impossibile ricavare il contesto della chiamata&amp;quot;);&lt;br /&gt;            }&lt;br /&gt;            _profile = _context.Profile;&lt;br /&gt;        }&lt;/p&gt;&lt;p&gt;        protected override System.Collections.IEnumerable ExecuteSelect(DataSourceSelectArguments arguments)&lt;br /&gt;        {&lt;br /&gt;            return new Collection&lt;profilebase /&gt;() { _profile };&lt;br /&gt;        }&lt;/p&gt;&lt;p&gt;        protected override int ExecuteInsert(IDictionary values)&lt;br /&gt;        {&lt;br /&gt;            _profile = ProfileBase.Create(_context.User.Identity.Name, _context.User.Identity.IsAuthenticated);&lt;br /&gt;            foreach (DictionaryEntry item in values)&lt;br /&gt;            {&lt;br /&gt;                _profile[item.Key.ToString()] = item.Value;&lt;br /&gt;            }&lt;br /&gt;            _profile.Save();&lt;br /&gt;            return 0;&lt;br /&gt;        }&lt;/p&gt;&lt;p&gt;        protected override int ExecuteUpdate(IDictionary keys, IDictionary values, IDictionary oldValues)&lt;br /&gt;        {&lt;br /&gt;            foreach (DictionaryEntry item in values)&lt;br /&gt;            {&lt;br /&gt;                _profile[item.Key.ToString()] = values[item.Key.ToString()];&lt;br /&gt;            }&lt;br /&gt;            _profile.Save();&lt;br /&gt;            return 0;&lt;br /&gt;        }&lt;/p&gt;&lt;p&gt;        protected override int ExecuteDelete(IDictionary keys, IDictionary oldValues)&lt;br /&gt;        {&lt;br /&gt;            foreach (DictionaryEntry item in oldValues)&lt;br /&gt;            {&lt;br /&gt;                _profile[item.Key.ToString()] = null;&lt;br /&gt;            }&lt;br /&gt;            _profile.Save();&lt;br /&gt;            return 0;&lt;br /&gt;        }&lt;br /&gt;    }&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;/code&gt;il codice non è completo, ad esempio non prendo mai in cosiderazione mai i vecchi valori e le chiavi, ma per farlo ci vuole davvero poco&lt;p /&gt;&lt;p&gt;nel lab trovare altri &lt;a onclick="function anonymous()
{
function anonymous()
{
function anonymous()
{
function anonymous()
{
blankUrl(this.href); return false;
}
}
}
}" href="http://lab.aspitalia.com/50/ftpdatasource-datasource-ftp.aspx"&gt;xxxDataSource&lt;/a&gt; creati da &lt;a onclick="function anonymous()
{
function anonymous()
{
function anonymous()
{
function anonymous()
{
blankUrl(this.href); return false;
}
}
}
}" href="http://www.aspitalia.com/autori/cristian_civera.aspx"&gt;Cristian&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/nostromo/post2403/DataSource-Profile.aspx"&gt;&lt;em&gt;Un DataSource per il Profile&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2013 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco Leoncini</dc:creator><category>asp.net</category><guid isPermaLink="true">http://blogs.aspitalia.com/nostromo/post2403/DataSource-Profile.aspx</guid><slash:comments>2</slash:comments><wfw:comment>http://blogs.aspitalia.com/nostromo/post2403/DataSource-Profile.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/nostromo/CommentRSS2403.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2403</trackback:ping></item><item><title>TrueSpace 7 gratuito</title><link>http://blogs.aspitalia.com/nostromo/post2343/TrueSpace-Gratuito.aspx</link><pubDate>Thu, 24 Jul 2008 08:59:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2343" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Tempo fa MS acquista Caligari, è di ieri &lt;a href="http://blogs.msdn.com/virtualearth/archive/2008/07/23/announcing-truespace-for-virtual-earth-3d-development.aspx"&gt;l'annuncio&lt;/a&gt; che TrueSpace diventa completamente gratuito e si integra con VE (Virtual Earth).&lt;/p&gt;&lt;p&gt;OK BELLO (scusate mi sto alterando)&lt;/p&gt;&lt;p&gt;qualcuno potrebbe rammentare a MS che WPF offre un supporto 3D, e che ancora oggi passati 2 anni dall'uscita non esiste un modellatore serio (non mi parlate di ZAM 3D per carità) che possa aiutare un grafico a creare qualcosa di più complesso di un cubo.&lt;/p&gt;&lt;p&gt;detto questo correte a scaricarlo&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework_3.0/" rel="tag"&gt;.NET Framework 3.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Windows_Presentation_Foundation/" rel="tag"&gt;Windows Presentation Foundation&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/nostromo/post2343/TrueSpace-Gratuito.aspx"&gt;&lt;em&gt;TrueSpace 7 gratuito&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2013 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco Leoncini</dc:creator><category>asp.net, .NET Framework 3.0, Windows Presentation Foundation</category><guid isPermaLink="true">http://blogs.aspitalia.com/nostromo/post2343/TrueSpace-Gratuito.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/nostromo/post2343/TrueSpace-Gratuito.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/nostromo/CommentRSS2343.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2343</trackback:ping></item><item><title>adesso dico la mia sull&amp;#39;Iphone</title><link>http://blogs.aspitalia.com/nostromo/post2341/Adesso-Dico-Iphone.aspx</link><pubDate>Tue, 22 Jul 2008 08:33:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2341" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Prendo spunto da questo post di &lt;a href="http://community.ugiss.org/blogs/lbianchi/archive/2008/07/22/bellissima-sull-iphone.aspx"&gt;Luca Bianchi&lt;/a&gt; per dire la mia sull'IPhone che possiedo più o meno da Aprile.&lt;/p&gt;&lt;p&gt;Premessa non ricordo soldi spesi peggio.&lt;br /&gt;&lt;br /&gt;Il telefono si è bello da vedere, ma i mille sensori di cui è costellato iphone servono solo per TRE applicazioni, le foto e ipod e safari.&lt;/p&gt;&lt;p&gt;Per il resto se siete abituati a cambiare l'orientamento del desktop del vostro smartphone, cosa che con un banale Windows Mobile 6 è possibile fare con la pressione di un tasto, scordatevelo non è possibile.&lt;/p&gt;&lt;p&gt;volete scorrere le vostre chiamate recenti mentre telefonate per dare un numero ad un amico? scordatevelo&lt;/p&gt;&lt;p&gt;volete cancellare un file sincronizzato con itunes? scordatevelo&lt;/p&gt;&lt;p&gt;volete sincronizzare la posta? scordatevelo, io ci ho rinunciato, cosa che il mio vecchio HTC Touch facevo senza cliccare nulla.&lt;/p&gt;&lt;p&gt;volete cancellare un singolo sms? scordatevelo dovete cancellare tutta la conversazione, perché gli sms sono memorizzati a mo di chat.&lt;/p&gt;&lt;p&gt;Che dire, venderà e ha veduto un botto perché è apple.&lt;/p&gt;&lt;p&gt;sono ancora indeciso su cosa farne, se usarlo come ferma carte, visto quanto pesa o come tostapane visto quanto scalda dopo 10 minuti di telefonate.&lt;/p&gt;&lt;p&gt; la tanto decantata durata della batterie, insostituibile se non in un centro assistenza, è solo un illusione anche senza telefonare ogni 2 gg va caricata.&lt;/p&gt;&lt;p&gt;insomma passata l'euforia iniziale passati a giocherellare con le icone non rimane veramente nulla, niente video, niente mms, niente download niente copia&amp;amp;incolla e la lista è veramente lunga...&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/Off_Topic/" rel="tag"&gt;Off Topic&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/nostromo/post2341/Adesso-Dico-Iphone.aspx"&gt;&lt;em&gt;adesso dico la mia sull&amp;#39;Iphone&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2013 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco Leoncini</dc:creator><category>asp.net, Off Topic</category><guid isPermaLink="true">http://blogs.aspitalia.com/nostromo/post2341/Adesso-Dico-Iphone.aspx</guid><slash:comments>7</slash:comments><wfw:comment>http://blogs.aspitalia.com/nostromo/post2341/Adesso-Dico-Iphone.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/nostromo/CommentRSS2341.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2341</trackback:ping></item><item><title>Come tutto ebbe inizio</title><link>http://blogs.aspitalia.com/nostromo/post2337/Inizio.aspx</link><pubDate>Mon, 21 Jul 2008 07:22:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2337" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Visto che &lt;a href="#post2329/How-Got-Started-Software-Development.aspx"&gt;Ughetto&lt;/a&gt; minaccia di non parlarmi più eccomi quà  raccontarvi la mia poca originale storia di Dev.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;A quale età hai cominciato a programmare?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Onestamente penso di non aver ancora iniziato, ma ricordi fumosi puntano al periodo C64 appena uscito e dei libroni di Basic.&lt;strong&gt;&lt;br /&gt;&lt;br /&gt;Come hai cominciato a programmare?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Quando me lo hanno chiesto, prima era un hobby poco frequentato pure.&lt;strong&gt;&lt;br /&gt;&lt;br /&gt;Qual?è stato il tuo primo linguaggio di programmazione?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Basic.&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;Qual?è stato il primo programma vero che hai scritto?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Una form Basic per l'inserimento di qualcosa che non ricordo :D, era un esempio preso da un libro&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Quali linguaggi hai usato da quando hai cominciato a programmare?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Diciamo C#, prima ne ho utilizzati altri tipo Lingo :D :D&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Quando è stato il tuo primo vero lavoro da programmatore?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;C'è poco che sento mio, quindi per adesso risposta non pervenuta&lt;strong&gt;&lt;br /&gt;&lt;br /&gt;Con il senno di poi, rifaresti lo stesso il programmatore? Ricominceresti a programmare?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;No credo di no, sarei un biologo, un ricercatore un archeologo o un astronauta o un XMan.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Se ci fosse una cosa che hai imparato nella tua carriera e che vorresti dire ai giovani programmatori, cosa diresti?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Non programmare il prevedibile ma pensare all'imprevedibile, non escludere l'impossibile perché spesso è la prima cosa che si verifica.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Qual?è la cosa più divertente che hai programmato?&lt;br /&gt;&lt;br /&gt;&lt;/strong&gt;L'addio al celibato di un mio amico.&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;Adesso è l?ora di taggare qualcun?altro...&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;vediamo, il mio collega che è in ferie &lt;a href="http://blogs.aspitalia.com/novecento/"&gt;novecento&lt;/a&gt;, e poi &lt;a href="http://blogs.aspitalia.com/az/"&gt;Andrea Zani&lt;/a&gt;, perche ho avuto il piacere di incontrarlo una volta sola &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/Off_Topic/" rel="tag"&gt;Off Topic&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/nostromo/post2337/Inizio.aspx"&gt;&lt;em&gt;Come tutto ebbe inizio&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2013 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco Leoncini</dc:creator><category>asp.net, Off Topic</category><guid isPermaLink="true">http://blogs.aspitalia.com/nostromo/post2337/Inizio.aspx</guid><slash:comments>5</slash:comments><wfw:comment>http://blogs.aspitalia.com/nostromo/post2337/Inizio.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/nostromo/CommentRSS2337.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2337</trackback:ping></item><item><title>un Provider Custom per l&amp;#39;health monitoring</title><link>http://blogs.aspitalia.com/nostromo/post2325/Provider-Custom-Health-Monitoring.aspx</link><pubDate>Mon, 14 Jul 2008 23:11:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2325" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;In un &lt;a href="http://blogs.aspitalia.com/nostromo/post2317/MailWebEventProvider-Perche-Public-Abstract.aspx"&gt;precedente&lt;/a&gt; post mi lamentavo della scarsa estendibilità della classe MailWebEventProvider e affini , alla fine mi sono deciso a implementare un provider completamente personalizzato, più semplice, senza buffer.&lt;br /&gt;Ho già parlato del &lt;a href="http://www.aspitalia.com/script/789/Custom-Provider-Health-Monitoring-Output-Formato-RSS.aspx"&gt;Health Monitoring&lt;/a&gt; Lo trovo comodo e quando posso mi piace estenderlo.&lt;br /&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Web.Management;&lt;br /&gt;using System.Web;&lt;br /&gt;using System.Net.Mail;&lt;br /&gt;using System.IO;&lt;br /&gt;using System.Collections.Specialized;&lt;br /&gt;using log4net;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;namespace TopSeed&lt;br /&gt;{&lt;br /&gt;    public class MyTemplatedMailWebEventProvidert : WebEventProvider&lt;br /&gt;    {&lt;br /&gt;        #region CAMPI PRIVATI&lt;/p&gt;&lt;p&gt;        private static readonly object _lockObject = new object();&lt;br /&gt;        private static ILog _logger = LogManager.GetLogger(&amp;quot;TopSeed&amp;quot;);&lt;/p&gt;&lt;p&gt;        #endregion &lt;/p&gt;&lt;p&gt;        #region PROPRIETA' PUBBLICHE&lt;br /&gt;       &lt;br /&gt;        public string Subject { get; set; }&lt;br /&gt;        public string Template { get; set; }&lt;br /&gt;        public string To { get; set; }&lt;br /&gt;        public string From { get; set; }&lt;br /&gt;        &lt;br /&gt;        #endregion&lt;/p&gt;&lt;p&gt;        #region METODI PUBBLICI&lt;br /&gt;       &lt;br /&gt;        public MyTemplatedMailWebEventProvidert() { }&lt;/p&gt;&lt;p&gt;        public override void Initialize(string name, NameValueCollection config)&lt;br /&gt;        {&lt;br /&gt;            base.Initialize(name, config);&lt;/p&gt;&lt;p&gt;            lock (_lockObject)&lt;br /&gt;            {&lt;br /&gt;                Subject =  HttpUtility.HtmlEncode(GetAndRemoveConfig(&amp;quot;subject&amp;quot;, config));&lt;br /&gt;                Template = GetAndRemoveConfig(&amp;quot;template&amp;quot;, config);&lt;br /&gt;                To = GetAndRemoveConfig(&amp;quot;to&amp;quot;, config);&lt;br /&gt;                From = GetAndRemoveConfig(&amp;quot;from&amp;quot;, config);&lt;br /&gt;            }&lt;/p&gt;&lt;p&gt;        }&lt;/p&gt;&lt;p&gt;        public override void ProcessEvent(WebBaseEvent raisedEvent)&lt;br /&gt;        {&lt;br /&gt;            if (raisedEvent != null)&lt;br /&gt;            {&lt;br /&gt;                HttpContext.Current.Items.Add(&amp;quot;MyTemplatedMailWebEventProvidertCurrentEvent&amp;quot;, raisedEvent);&lt;br /&gt;                SendMail();&lt;br /&gt;            }&lt;br /&gt;        }&lt;/p&gt;&lt;p&gt;        public override void Shutdown() { }&lt;/p&gt;&lt;p&gt;        public override void Flush() { }&lt;br /&gt;        &lt;br /&gt;        #endregion&lt;/p&gt;&lt;p&gt;        #region METODI PROTETTI&lt;/p&gt;&lt;p&gt;        protected string GetMailBody()&lt;br /&gt;        {&lt;br /&gt;            using (TextWriter stringWriter = new StringWriter())&lt;br /&gt;            {&lt;br /&gt;                HttpContext.Current.Server.Execute(&amp;quot;~/MailMessage.aspx&amp;quot;, stringWriter);&lt;/p&gt;&lt;p&gt;                return stringWriter.ToString();&lt;br /&gt;            }&lt;br /&gt;        }&lt;/p&gt;&lt;p&gt;        protected void SendMail()&lt;br /&gt;        {&lt;br /&gt;            try&lt;br /&gt;            {&lt;br /&gt;                SmtpClient _smtpClient = new SmtpClient();&lt;/p&gt;&lt;p&gt;                using (MailMessage _message = new MailMessage(From, To))&lt;br /&gt;                {&lt;br /&gt;                    _message.Body = GetMailBody();&lt;br /&gt;                    _message.IsBodyHtml = true;&lt;br /&gt;                    _message.Subject = Subject;&lt;br /&gt;                    _smtpClient.Send(_message);&lt;br /&gt;                }&lt;/p&gt;&lt;p&gt;            }&lt;br /&gt;            catch(Exception ex)&lt;br /&gt;            {&lt;br /&gt;                LogError(ex);&lt;br /&gt;            }&lt;br /&gt;        }&lt;/p&gt;&lt;p&gt;        protected void LogError(Exception ex)&lt;br /&gt;        {&lt;br /&gt;            _logger.Error(&amp;quot;Impossibile inviare la mail&amp;quot;, ex);&lt;br /&gt;        }&lt;/p&gt;&lt;p&gt;        protected void LogInfo(string message)&lt;br /&gt;        {&lt;br /&gt;            _logger.Info(message);&lt;br /&gt;        }&lt;/p&gt;&lt;p&gt;        #endregion&lt;/p&gt;&lt;p&gt;        #region METODI SATICI&lt;br /&gt;       &lt;br /&gt;        public static WebBaseEvent CurrentNotification()&lt;br /&gt;        {&lt;br /&gt;            if (HttpContext.Current != null)&lt;br /&gt;            {&lt;br /&gt;                return (WebBaseEvent)HttpContext.Current.Items[&amp;quot;MyTemplatedMailWebEventProvidertCurrentEvent&amp;quot;];&lt;br /&gt;            }&lt;br /&gt;            else&lt;br /&gt;            {&lt;br /&gt;                throw new ApplicationException(&amp;quot;Impossibile recuperare il contesto http corrente&amp;quot;);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        #endregion &lt;/p&gt;&lt;p&gt;        #region METODI PRIVATI&lt;br /&gt;       &lt;br /&gt;        private string GetAndRemoveConfig(string key, NameValueCollection config)&lt;br /&gt;        {&lt;br /&gt;            if (config[key] == null)&lt;br /&gt;            {&lt;br /&gt;                throw new ApplicationException(string.Format(&amp;quot;Impossibile recuperare il campo {0} delle impostazioni&amp;quot;, key));&lt;br /&gt;            }&lt;br /&gt;            else&lt;br /&gt;            {&lt;br /&gt;                string _value = config[key];&lt;br /&gt;                config.Remove(key);&lt;br /&gt;                return _value;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        #endregion&lt;br /&gt;    }&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;il funzionamento è simile alla classe &lt;span id="nsrTitle"&gt;TemplatedMailWebEventProvider, è possibile specificare una pagina aspx da utilizzare come template, ed è possibile recuperare l'evento corrente per estrarne le informazioni&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework/" rel="tag"&gt;.NET Framework&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/.NET_Framework_2.0/" rel="tag"&gt;.NET Framework 2.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET/" rel="tag"&gt;ASP.NET&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/nostromo/post2325/Provider-Custom-Health-Monitoring.aspx"&gt;&lt;em&gt;un Provider Custom per l&amp;#39;health monitoring&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2013 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco Leoncini</dc:creator><category>asp.net, .NET Framework, .NET Framework 2.0, ASP.NET</category><guid isPermaLink="true">http://blogs.aspitalia.com/nostromo/post2325/Provider-Custom-Health-Monitoring.aspx</guid><slash:comments>2</slash:comments><wfw:comment>http://blogs.aspitalia.com/nostromo/post2325/Provider-Custom-Health-Monitoring.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/nostromo/CommentRSS2325.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2325</trackback:ping></item><item><title>MailWebEventProvider  perche sei public e abstract</title><link>http://blogs.aspitalia.com/nostromo/post2317/MailWebEventProvider-Perche-Public-Abstract.aspx</link><pubDate>Thu, 10 Jul 2008 15:30:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2317" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;in questi giorni di calura, volevo utilizzare l' health monitoring per inviare una semplice mail, all'inserimento di un nuovo record in un db.&lt;/p&gt;&lt;p&gt;non mi dilungo troppo, volevo estendere la classe TemplatedMailWebEventProvider perché ho la necessità di cambiare il subject della mail.&lt;/p&gt;&lt;p&gt;questo non è stato possibile perchè TemplatedMailWebEventProvider è sealed, ok mi dico io, no problem, estendo MailWebEventProvider che è public e abstract.&lt;/p&gt;&lt;p&gt;ok la guida dice chiaramente:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;This API supports the .NET Framework infrastructure and is not intended to be used directly from your code.&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;scioccamente penso: ma io devo fare solo due cosine semplici, istanziare tramite reflection TemplatedMailWebEventProvider, perché il costruttore è internal e utilizzarne le caratteriste di &amp;quot;templating&amp;quot; che mi piacciono.&lt;/p&gt;&lt;p&gt;ok diciamo subito che non è possibile, visto che i metodi abstract della classe MailWebEventProvider sono anche internal, quindi per me inutilizzabili.&lt;/p&gt;&lt;p&gt;quindi alla fine della fiera mi tocca ricreare una classe nuova da zero con le stesse caratteristiche di TemplatedMailWebEventProvider e tutto questo solo per cambiare il subject della mail.&lt;/p&gt;&lt;p&gt;ok magari sono io pigro e sfaticato, ma la versione asp.net 2.0 è sarà ricordata da tutti per aver introdotto l'architettura a provider, ok il provider c'è, le classi pure, solo che non puoi estenderle nemmeno per le cose semplici&lt;/p&gt;&lt;p&gt;ditemi sbaglio io?&lt;/p&gt;&lt;p&gt;visto che ci sono rifarò una classe simile a TemplatedMailWebEventProvider o la istanzierò in un provider che estende WebEventProvider, devo ancora pensare a quale soluzione adottare&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework/" rel="tag"&gt;.NET Framework&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/.NET_Framework_2.0/" rel="tag"&gt;.NET Framework 2.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET/" rel="tag"&gt;ASP.NET&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/nostromo/post2317/MailWebEventProvider-Perche-Public-Abstract.aspx"&gt;&lt;em&gt;MailWebEventProvider  perche sei public e abstract&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2013 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco Leoncini</dc:creator><category>asp.net, .NET Framework, .NET Framework 2.0, ASP.NET</category><guid isPermaLink="true">http://blogs.aspitalia.com/nostromo/post2317/MailWebEventProvider-Perche-Public-Abstract.aspx</guid><slash:comments>1</slash:comments><wfw:comment>http://blogs.aspitalia.com/nostromo/post2317/MailWebEventProvider-Perche-Public-Abstract.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/nostromo/CommentRSS2317.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2317</trackback:ping></item><item><title>un visualizzatore di eccezioni parte 1: helper</title><link>http://blogs.aspitalia.com/nostromo/post2291/Visualizzatore-Eccezioni-Parte-1-Helper.aspx</link><pubDate>Wed, 28 May 2008 12:56:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2291" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;a questo&lt;a href="http://www.aspitalia.com/script/848/Gestire-Intercettare-Eccezioni-Controlli-SqlDataSource.aspx"&gt; link&lt;/a&gt; trovare un eccellente esempio di come gestire l'eccezioni sollevate dal controllo SqlDataSource.&lt;/p&gt;&lt;p&gt;Analogamente è possibile gestire l'eccezioni sollevate dai controlli ObjectDataSource e LinqDataSource.&lt;/p&gt;&lt;p&gt;Utilizzando molto, ognuno dei suddetti controlli, mi sono trovato presto a affrontare la manutenzione di una marea di pagine contenente la logica di visualizzazione delle eccezioni.&lt;/p&gt;&lt;p&gt;ho deciso quindi di realizzare un WebControl che associato a un DataSourceControl potesse intercettare l'eccezioni e visualizzare.&lt;/p&gt;&lt;p&gt;per prima cosa ci creeremo una serie di metodi helper, per associare runtime un gestore all'evento , in particolare realizzeremo degli Extension Methods.&lt;/p&gt;&lt;code&gt;&lt;p /&gt;&lt;p&gt;using System;&lt;br /&gt;using System.Web;&lt;br /&gt;using System.Web.UI;&lt;br /&gt;using System.Web.UI.WebControls;&lt;br /&gt;using System.Reflection;&lt;br /&gt;using ReflectionExtension;&lt;/p&gt;&lt;p&gt;namespace ReflectionExtension&lt;br /&gt;{&lt;br /&gt;    public static class ObjectReflectionExtension&lt;br /&gt;    {&lt;br /&gt;        public static void AddHanlder(this Object objectEventRaiser, object objectBoundToDelegate, string methodName, string eventName)&lt;br /&gt;        {&lt;br /&gt;            if (objectEventRaiser == null | objectBoundToDelegate == null | string.IsNullOrEmpty(methodName) | string.IsNullOrEmpty(eventName))&lt;br /&gt;            {&lt;br /&gt;                throw new ArgumentNullException();&lt;br /&gt;            }&lt;br /&gt;            else&lt;br /&gt;            {&lt;br /&gt;                Type _dataSourceType = objectEventRaiser.GetType();&lt;/p&gt;&lt;p&gt;                EventInfo _eventInfo = _dataSourceType.GetEvent(eventName);&lt;/p&gt;&lt;p&gt;                if (_eventInfo == null)&lt;br /&gt;                {&lt;br /&gt;                    throw new ArgumentException(string.Format(&amp;quot;Impossibile trovare l'evento {0}&amp;quot;, eventName));&lt;br /&gt;                }&lt;br /&gt;                else&lt;br /&gt;                {&lt;br /&gt;                    MethodInfo _methodInfo = objectBoundToDelegate.GetType().GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance);&lt;/p&gt;&lt;p&gt;                    if (_eventInfo == null)&lt;br /&gt;                    {&lt;br /&gt;                        throw new ArgumentException(string.Format(&amp;quot;Impossibile trovare il metodo {0}&amp;quot;, methodName));&lt;br /&gt;                    }&lt;br /&gt;                    else&lt;br /&gt;                    {&lt;br /&gt;                        Delegate _delegate = Delegate.CreateDelegate(_eventInfo.EventHandlerType, objectBoundToDelegate, _methodInfo);&lt;/p&gt;&lt;p&gt;                        _eventInfo.AddEventHandler(objectEventRaiser, _delegate);&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        public static bool IsNull(this Object item)&lt;br /&gt;        {&lt;br /&gt;            return item == null;&lt;br /&gt;        }&lt;/p&gt;&lt;p&gt;    }&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;namespace WebControlReflectionExtension&lt;br /&gt;{&lt;br /&gt;    public static class WebControlReflectionExtension&lt;br /&gt;    {&lt;/p&gt;&lt;p&gt;        public static void AddInsertedHandler(this DataSourceControl dataSourceControl, object objectBoundToDelegate, string methodName)&lt;br /&gt;        {&lt;br /&gt;            ObjectReflectionExtension.AddHanlder(dataSourceControl, objectBoundToDelegate, methodName, &amp;quot;Inserted&amp;quot;);&lt;br /&gt;        }&lt;/p&gt;&lt;p&gt;        public static void AddDeleteddHandler(this DataSourceControl dataSourceControl, object objectBoundToDelegate, string methodName)&lt;br /&gt;        {&lt;br /&gt;            ObjectReflectionExtension.AddHanlder(dataSourceControl, objectBoundToDelegate, methodName, &amp;quot;Deleted&amp;quot;);&lt;br /&gt;        }&lt;/p&gt;&lt;p&gt;        public static void AddUpdateddHandler(this DataSourceControl dataSourceControl, object objectBoundToDelegate, string methodName)&lt;br /&gt;        {&lt;br /&gt;            ObjectReflectionExtension.AddHanlder(dataSourceControl, objectBoundToDelegate, methodName, &amp;quot;Updated&amp;quot;);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/p&gt;&lt;p /&gt;&lt;/code&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework/" rel="tag"&gt;.NET Framework&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/.NET_Framework_3.5/" rel="tag"&gt;.NET Framework 3.5&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET/" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Custom_Control/" rel="tag"&gt;Custom Control&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/nostromo/post2291/Visualizzatore-Eccezioni-Parte-1-Helper.aspx"&gt;&lt;em&gt;un visualizzatore di eccezioni parte 1: helper&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2013 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco Leoncini</dc:creator><category>asp.net, .NET Framework, .NET Framework 3.5, ASP.NET, Custom Control</category><guid isPermaLink="true">http://blogs.aspitalia.com/nostromo/post2291/Visualizzatore-Eccezioni-Parte-1-Helper.aspx</guid><slash:comments>4</slash:comments><wfw:comment>http://blogs.aspitalia.com/nostromo/post2291/Visualizzatore-Eccezioni-Parte-1-Helper.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/nostromo/CommentRSS2291.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2291</trackback:ping></item><item><title>StringValidatorAttribute ConfigurationProperty e DefaultValue</title><link>http://blogs.aspitalia.com/nostromo/post2290/StringValidatorAttribute-ConfigurationProperty-DefaultValue.aspx</link><pubDate>Tue, 27 May 2008 22:40:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2290" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;se come me amate fare una sezione di configurazione custom per ogni tipo di impostazione, fate attenzione quando decorare una proprietà con StringValidatorAttribute, in particolare quando specificate la lunghezza minima di una stringa impostando la proprietà &lt;span class="identifier"&gt;MinLength.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="identifier"&gt;a causa del particolare sistema di parserizzazione del file di configurazione e inizializzazione&lt;/span&gt; degli oggetti &amp;quot;nati&amp;quot; da questo processo, la validazione è destinata a fallire miseramente se non si specifica mediante l'attributo ConfigurationProperty un valore predefinito che soddisfi i requisiti di validazione.&lt;/p&gt;&lt;p&gt;        [ConfigurationProperty(&amp;quot;Type&amp;quot;,DefaultValue = &amp;quot;object&amp;quot;)]&lt;br /&gt;        [StringValidator(InvalidCharacters = &amp;quot;&lt;a href="mailto:~!-@#$%^&amp;amp;*(){}/;'\&amp;quot;|\\"&gt;~!-@#$%^&amp;amp;*(){}/;'\&amp;quot;|\\&lt;/a&gt;&amp;quot;, MinLength= 1, MaxLength = 60)]&lt;br /&gt;        public string Type&lt;br /&gt;        {&lt;br /&gt;            get&lt;br /&gt;            {&lt;br /&gt;                return (string)base[&amp;quot;Type&amp;quot;];&lt;br /&gt;            }&lt;br /&gt;        } &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework/" rel="tag"&gt;.NET Framework&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/.NET_Framework_2.0/" rel="tag"&gt;.NET Framework 2.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET/" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_2.0/" rel="tag"&gt;ASP.NET 2.0&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/nostromo/post2290/StringValidatorAttribute-ConfigurationProperty-DefaultValue.aspx"&gt;&lt;em&gt;StringValidatorAttribute ConfigurationProperty e DefaultValue&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2013 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco Leoncini</dc:creator><category>asp.net, .NET Framework, .NET Framework 2.0, ASP.NET, ASP.NET 2.0</category><guid isPermaLink="true">http://blogs.aspitalia.com/nostromo/post2290/StringValidatorAttribute-ConfigurationProperty-DefaultValue.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/nostromo/post2290/StringValidatorAttribute-ConfigurationProperty-DefaultValue.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/nostromo/CommentRSS2290.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2290</trackback:ping></item><item><title>Modificare i CSS Friendly Control Adapters </title><link>http://blogs.aspitalia.com/nostromo/post2289/Modificare-CSS-Friendly-Control-Adapters.aspx</link><pubDate>Tue, 27 May 2008 20:44:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2289" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;in particolare mi occuperò del WebControl Menu.&lt;/p&gt;&lt;p&gt;Utilizzando l'adapter il funzionamento del menu è completamente basato su css, cosa buona e giusta, ma solo fino a quando desideriamo che il menù si apra al passaggio del mouse.&lt;/p&gt;&lt;p&gt;ma naturalmente presto il vostro progetto richiederà che il menu su apra al click, la cosa non è difficile da realizzare, per prima cosa modifichiamo il css in modo da evitare la visualizzazione del menu al passaggio del mouse, cambiamo questo:&lt;/p&gt;&lt;p&gt;ul.AspNet-Menu li:hover ul,&lt;br /&gt;ul.AspNet-Menu li li:hover ul,&lt;br /&gt;ul.AspNet-Menu li li li:hover ul,&lt;br /&gt;ul.AspNet-Menu li.AspNet-Menu-Hover ul,&lt;br /&gt;ul.AspNet-Menu li li.AspNet-Menu-Hover ul,&lt;br /&gt;ul.AspNet-Menu li li li.AspNet-Menu-Hover ul&lt;br /&gt;{&lt;br /&gt;    visibility: visible;&lt;br /&gt;}&lt;br /&gt;&lt;/p&gt;&lt;p&gt;in :&lt;/p&gt;&lt;p&gt;ul.AspNet-Menu li.AspNet-Menu-Hover ul,&lt;br /&gt;ul.AspNet-Menu li li.AspNet-Menu-Hover ul,&lt;br /&gt;ul.AspNet-Menu li li li.AspNet-Menu-Hover ul&lt;br /&gt;{&lt;br /&gt;    visibility: visible;&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;è il momento di passare al javascript, apriamo il file MenuAdapter.js, in particolare nella funzione SetHover__AspNetMenu modifichiaro la registrazione dell'event handler:&lt;/p&gt;&lt;p&gt;if(items[k].className.indexOf(menuWithChildren) &amp;gt; -1 &amp;amp; items[k].parentNode.className == topmostClass)&lt;br /&gt;                {&lt;br /&gt;                    if (items[k].addEventListener)&lt;br /&gt;                    {&lt;br /&gt;                        items[k].addEventListener('click', Click__AspNetMenu, false); &lt;br /&gt;                    } &lt;br /&gt;                    else if (items[k].attachEvent)&lt;br /&gt;                    {&lt;br /&gt;                        items[k].onclick = function() { Click__AspNetMenuie(this);} &lt;br /&gt;                    }&lt;br /&gt;                }&lt;/p&gt;&lt;p&gt;il passo successivo è creare i due gestori per l'evento click:&lt;br /&gt;&lt;br /&gt;function Click__AspNetMenu(e)&lt;br /&gt;{&lt;br /&gt;    if(typeof(e) != &amp;quot;undefined&amp;quot;)&lt;br /&gt;    {&lt;br /&gt;        e.stopPropagation();&lt;br /&gt; }&lt;br /&gt;    Unhover__AspNetMenu(openTab);&lt;br /&gt;    openTab = this;&lt;br /&gt;    Hover__AspNetMenu(this);&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;function Click__AspNetMenuie(element)&lt;br /&gt;{&lt;br /&gt;  var e = window.event;&lt;br /&gt;     Unhover__AspNetMenu(openTab);&lt;br /&gt;    openTab = element;&lt;br /&gt;    Hover__AspNetMenu(element);&lt;br /&gt;    e.cancelBubble=true;&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;infine è necessario modificare nelle funzioni Unhover__AspNetMenu e Hover__AspNetMenu la condizione per la creazioni di quelli elementi che permettono di aggirare alcune limitazioni di ie6&lt;/p&gt;&lt;p&gt; if (isPreIE7 &amp;amp; typeof(element) != &amp;quot;undefined&amp;quot;)&lt;/p&gt;&lt;p&gt;ed infine non dimentichiamoci di associare al click anche la chiusura del menu correntemente aperto&lt;/p&gt;&lt;p&gt;document.onclick = function() { Unhover__AspNetMenu(openTab);} &lt;/p&gt;&lt;p&gt;nei prossimi giorni dovrei riuscire a inserire tutto nel Lab&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework/" rel="tag"&gt;.NET Framework&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/.NET_Framework_2.0/" rel="tag"&gt;.NET Framework 2.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET/" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/CSS/" rel="tag"&gt;CSS&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Custom_Control/" rel="tag"&gt;Custom Control&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/nostromo/post2289/Modificare-CSS-Friendly-Control-Adapters.aspx"&gt;&lt;em&gt;Modificare i CSS Friendly Control Adapters &lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2013 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco Leoncini</dc:creator><category>asp.net, .NET Framework, .NET Framework 2.0, ASP.NET, CSS, Custom Control</category><guid isPermaLink="true">http://blogs.aspitalia.com/nostromo/post2289/Modificare-CSS-Friendly-Control-Adapters.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/nostromo/post2289/Modificare-CSS-Friendly-Control-Adapters.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/nostromo/CommentRSS2289.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2289</trackback:ping></item><item><title>ListView &amp;#232; DataPager</title><link>http://blogs.aspitalia.com/nostromo/post2230/ListView-DataPager.aspx</link><pubDate>Tue, 19 Feb 2008 14:24:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2230" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;è arrivato il Framework 3.5 e con lui una nuova versione di asp.net, la new entry più gradita è certamente il nuovo controllo ListView.&lt;br /&gt;&lt;br /&gt;il ListView ha il non trascurabile pregio di unire la flessibilità del Repeater in quanto a definizione del layout, e le funzionalità evolute del GridView, come la paginazione.&lt;br /&gt;&lt;br /&gt;in particolare la paginazione è interessante, in quanto svincolata dal controllo stesso e fornita invece attraverso un nuovo controllo, il DataPager.&lt;br /&gt;&lt;br /&gt;il DataPager ha tra le sue caratteristiche la possibilità di visualizzare un numero variabili di campi utili alla navigazione tra le pagine, cose come l'avanti, indietro, numeri di pagina ecc ecc.&lt;br /&gt;&lt;br /&gt;se nessuno dei campi preconfezionati si adattasse alla nostra veste grafica possiamo sempre ricorrere ha campi personalizzati o ad una Template.&lt;br /&gt;&lt;br /&gt;la TemplatePagerField permette di dare libero sfogo alla vostra fantasia, Button, Link, DropDownList e chi più ne ha più ne metta.&lt;br /&gt;&lt;br /&gt;ma ai me...dopo dovrete fare lo sporco lavoro di comunicare la nuova pagina e altre cosette al controllo da paginare, cosa che con il DataGrid in pensione non siamo più abituati a fare.&lt;br /&gt;&lt;br /&gt;visto che uno in un progetto sicuramente utilizzeremo più di una volta il DataPager, e che con altrettanta probabilità lo utilizzeremo in tutti i nostri progetti, mi sono preso la briga di realizzarne uno che usa come Ui un UserControl.&lt;br /&gt;&lt;br /&gt;la prima cosa da fare è estendere la classe TemplatePagerField:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;namespace Soluzioni4D.WebControl&lt;br /&gt;{&lt;br /&gt;public class CustomTemplatePagerField : TemplatePagerField&lt;br /&gt;{&lt;br /&gt;public string PageTemplatePath&lt;br /&gt;{&lt;br /&gt;get&lt;br /&gt;{&lt;br /&gt;if (ViewState[&amp;quot;PageTemplatePath&amp;quot;] == null)&lt;br /&gt;{&lt;br /&gt;return Resources.Navigation.PagerWebUserControl;&lt;br /&gt;}&lt;br /&gt;return (string)ViewState[&amp;quot;PageTemplatePath&amp;quot;];&lt;br /&gt;}&lt;br /&gt;set { ViewState[&amp;quot;PageTemplatePath&amp;quot;] = value; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public override ITemplate PagerTemplate&lt;br /&gt;{&lt;br /&gt;get&lt;br /&gt;{&lt;br /&gt;return null;&lt;br /&gt;}&lt;br /&gt;set&lt;br /&gt;{&lt;br /&gt;throw new NotSupportedException();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public override void CreateDataPagers(DataPagerFieldItem container, int startRowIndex, int maximumRows, int totalRowCount, int fieldIndex)&lt;br /&gt;{&lt;br /&gt;base.CreateDataPagers(container, startRowIndex, maximumRows, totalRowCount, fieldIndex);&lt;br /&gt;&lt;br /&gt;if (!string.IsNullOrEmpty(PageTemplatePath))&lt;br /&gt;{&lt;br /&gt;IPagerAccessor _control = container.Page.LoadControl(PageTemplatePath) as IPagerAccessor;&lt;br /&gt;&lt;br /&gt;if (_control != null)&lt;br /&gt;{&lt;br /&gt;_control.PageSize = container.Pager.PageSize;&lt;br /&gt;_control.StartRowIndex = container.Pager.StartRowIndex;&lt;br /&gt;_control.TotalRowCount = container.Pager.TotalRowCount;&lt;br /&gt;container.Controls.Add((Control)_control);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;protected override void OnPagerCommand(DataPagerCommandEventArgs e)&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;switch (e.CommandName)&lt;br /&gt;{&lt;br /&gt;case &amp;quot;Next&amp;quot;:&lt;br /&gt;int _newNextIndex = e.Item.Pager.StartRowIndex + e.Item.Pager.PageSize;&lt;br /&gt;&lt;br /&gt;if (_newNextIndex &amp;lt;= e.TotalRowCount)&lt;br /&gt;{&lt;br /&gt;e.NewStartRowIndex = _newNextIndex;&lt;br /&gt;e.NewMaximumRows = e.Item.Pager.MaximumRows;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;break;&lt;br /&gt;case &amp;quot;Previus&amp;quot;:&lt;br /&gt;int _newPreviusIndex = e.Item.Pager.StartRowIndex - e.Item.Pager.PageSize;&lt;br /&gt;&lt;br /&gt;if (_newPreviusIndex &amp;gt;= 0)&lt;br /&gt;{&lt;br /&gt;e.NewStartRowIndex = _newPreviusIndex;&lt;br /&gt;&lt;br /&gt;e.NewMaximumRows = e.Item.Pager.MaximumRows;&lt;br /&gt;}&lt;br /&gt;break;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;la proprietà PageTemplatePath contiene il percorso dell'UserControl, se non impostato ne restituisce uno predefinito.&lt;br /&gt;&lt;br /&gt;nel metodo CreateDataPager recuperiamo l'UserControl e impostiamo alcuni parametri, usi l'interfaccia IPagerAccessor perche nel mio UserControl voglio utilizzare alcune proprietà del DataPager.&lt;br /&gt;&lt;br /&gt;infine il lavoro sporco e ripetitivo che saremmo stato costretti a inserire in ogni pagina, viene eseguito nel metodo OnPagerCommand.&lt;br /&gt;&lt;br /&gt;infine l'UserControl, il codice è semplice :&lt;br /&gt;&lt;br /&gt;&lt;code&gt;public partial class Shared_UserControl_PagerWebUserControl : UserControlBase&amp;lt;object&amp;gt;, IPagerAccessor&lt;br /&gt;{&lt;br /&gt;public int TotalRowCount { get; set; }&lt;br /&gt;&lt;br /&gt;public int StartRowIndex { get; set; }&lt;br /&gt;&lt;br /&gt;public int PageSize { get; set; }&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;&lt;/code&gt;ci limitiamo a implementare l'interfaccia IPagerAccessor, è una mia interfaccia il suo utilizzo è facoltativo è utile solo perche devo accedere al numero totale di pagina ed al numero di elementi&lt;br /&gt;&lt;br /&gt;infien L'userControl vero e proprio:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;%--Tasto indietro--%&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;asp:LinkButton CssClass=&amp;quot;PreviusButton&amp;quot; runat=&amp;quot;server&amp;quot; CommandName=&amp;quot;Previus&amp;quot; ID=&amp;quot;_previusLinkButton&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;span&amp;gt;&lt;br /&gt;&amp;lt;asp:Literal ID=&amp;quot;Literal1&amp;quot; runat=&amp;quot;server&amp;quot; Text=&amp;quot;&amp;lt;%$ Resources:Shared, Indietro %&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;/span&amp;gt;&lt;br /&gt;&amp;lt;/asp:LinkButton&amp;gt;&lt;br /&gt;&amp;lt;%-- Pagine --%&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;div class=&amp;quot;PagerInfo&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;div&amp;gt;&lt;br /&gt;&amp;lt;span&amp;gt;&lt;br /&gt;&amp;lt;asp:Literal ID=&amp;quot;_pageLabel&amp;quot; runat=&amp;quot;server&amp;quot; Text=&amp;quot;&amp;lt;%$ Resources:Shared, Pagina %&amp;gt;&amp;quot;&amp;gt;&amp;lt;/asp:Literal&amp;gt;&lt;br /&gt;&amp;lt;/span&amp;gt;&lt;br /&gt;&amp;lt;span&amp;gt;&lt;br /&gt;&amp;lt;asp:Literal ID=&amp;quot;_currentPage&amp;quot; runat=&amp;quot;server&amp;quot; Text=&amp;quot;&amp;lt;%# TotalRowCount&amp;gt;0 ? (StartRowIndex / PageSize) + 1 : 0 %&amp;gt;&amp;quot;&amp;gt;&amp;lt;/asp:Literal&amp;gt;&lt;br /&gt;&amp;lt;/span&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div&amp;gt;&lt;br /&gt;&amp;lt;span&amp;gt;&lt;br /&gt;&amp;lt;asp:Literal ID=&amp;quot;_ofPageLabel&amp;quot; runat=&amp;quot;server&amp;quot; Text=&amp;quot;&amp;lt;%$ Resources:Shared, PaginaDi %&amp;gt;&amp;quot;&amp;gt;&amp;lt;/asp:Literal&amp;gt;&lt;br /&gt;&amp;lt;/span&amp;gt;&lt;br /&gt;&amp;lt;span&amp;gt;&lt;br /&gt;&amp;lt;asp:Literal ID=&amp;quot;_totalPages&amp;quot; runat=&amp;quot;server&amp;quot; Text=&amp;quot;&amp;lt;%# Math.Ceiling ((double)TotalRowCount / PageSize)%&amp;gt;&amp;quot;&amp;gt;&amp;lt;/asp:Literal&amp;gt;&lt;br /&gt;&amp;lt;/span&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;%--Tasto avanti--%&amp;gt;&lt;br /&gt;&amp;lt;asp:LinkButton CssClass=&amp;quot;NextButton&amp;quot; runat=&amp;quot;server&amp;quot; CommandName=&amp;quot;Next&amp;quot; ID=&amp;quot;_nextLinkkButton&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;span&amp;gt;&lt;br /&gt;&amp;lt;asp:Literal ID=&amp;quot;Literal2&amp;quot; runat=&amp;quot;server&amp;quot; Text=&amp;quot;&amp;lt;%$ Resources:Shared, Avanti %&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;/span&amp;gt;&lt;br /&gt;&amp;lt;/asp:LinkButton&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;e questo è tutto, se magari non avete la necessità di visualizzare il numero di pagine, e vi limitate al solo tasto avanti e indietro, è possibile non implementare l'interfaccia IPagerAccessor e modificare leggermente il codice della classe CustomTemplatePagerField&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework/" rel="tag"&gt;.NET Framework&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/.NET_Framework_3.5/" rel="tag"&gt;.NET Framework 3.5&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET/" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_3.5/" rel="tag"&gt;ASP.NET 3.5&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/Custom_Control/" rel="tag"&gt;Custom Control&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/User_Control/" rel="tag"&gt;User Control&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/nostromo/post2230/ListView-DataPager.aspx"&gt;&lt;em&gt;ListView &amp;#232; DataPager&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2013 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco Leoncini</dc:creator><category>asp.net, .NET Framework, .NET Framework 3.5, ASP.NET, ASP.NET 3.5, Custom Control, User Control</category><guid isPermaLink="true">http://blogs.aspitalia.com/nostromo/post2230/ListView-DataPager.aspx</guid><slash:comments>6</slash:comments><wfw:comment>http://blogs.aspitalia.com/nostromo/post2230/ListView-DataPager.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/nostromo/CommentRSS2230.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2230</trackback:ping></item><item><title>Disponibile parte del codice sorgente del Framework</title><link>http://blogs.aspitalia.com/nostromo/post2209/Disponibile-Parte-Codice-Sorgente-Framework.aspx</link><pubDate>Thu, 17 Jan 2008 09:47:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2209" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;Come promesso tempo fa da &lt;a href="http://weblogs.asp.net/scottgu/default.aspx"&gt;ScottGu&lt;/a&gt; finalmente è disponibile il codice sorgente del &lt;a href="http://weblogs.asp.net/scottgu/archive/2008/01/16/net-framework-library-source-code-now-available.aspx"&gt;Framework&lt;/a&gt; trovate tutti i dettagli di come utilizzarlo nel debugger del VS &lt;a href="http://blogs.msdn.com/sburke/archive/2008/01/16/configuring-visual-studio-to-debug-net-framework-source-code.aspx"&gt;qua&lt;/a&gt;&lt;/p&gt;&lt;p&gt;unica nota negativa non è possibile scaricarlo con la versione express&lt;/p&gt;&lt;p&gt;ciao marco&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework/" rel="tag"&gt;.NET Framework&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/.NET_Framework_2.0/" rel="tag"&gt;.NET Framework 2.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/.NET_Framework_3.0/" rel="tag"&gt;.NET Framework 3.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET/" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_2.0/" rel="tag"&gt;ASP.NET 2.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_3.5/" rel="tag"&gt;ASP.NET 3.5&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/nostromo/post2209/Disponibile-Parte-Codice-Sorgente-Framework.aspx"&gt;&lt;em&gt;Disponibile parte del codice sorgente del Framework&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2013 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco Leoncini</dc:creator><category>asp.net, .NET Framework, .NET Framework 2.0, .NET Framework 3.0, ASP.NET, ASP.NET 2.0, ASP.NET 3.5</category><guid isPermaLink="true">http://blogs.aspitalia.com/nostromo/post2209/Disponibile-Parte-Codice-Sorgente-Framework.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/nostromo/post2209/Disponibile-Parte-Codice-Sorgente-Framework.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/nostromo/CommentRSS2209.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2209</trackback:ping></item><item><title>uno snippet per inserire riga di commento</title><link>http://blogs.aspitalia.com/nostromo/post2195/Snippet-Inserire-Riga-Commento.aspx</link><pubDate>Fri, 28 Dec 2007 13:26:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2195" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;più volte mi sono provato ad utilizzare le &amp;quot;region&amp;quot; per suddividere il codice, ma proprio non ci riesco, alla fine il codice mi appare più disordinato, certo è una sensazione, ma le region mi danno fastidio.&lt;/p&gt;&lt;p&gt;così oggi mi sono realizzato un semplice snippet per inserire una riga di commento per separare le varie parti del codice, sarà che all'università con il pascal facevo così....&lt;/p&gt;&lt;p&gt;&amp;lt;CodeSnippets&lt;br /&gt;    xmlns=&amp;quot;&lt;a href="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"&gt;http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet&lt;/a&gt;&amp;quot;&amp;gt;&lt;br /&gt;  &amp;lt;CodeSnippet Format=&amp;quot;1.0.0&amp;quot;&amp;gt;&lt;br /&gt;    &amp;lt;Header&amp;gt;&lt;br /&gt;      &amp;lt;Title&amp;gt;&lt;br /&gt;        My Comment Snippet&lt;br /&gt;      &amp;lt;/Title&amp;gt;&lt;br /&gt;    &amp;lt;/Header&amp;gt;&lt;br /&gt;    &amp;lt;Snippet&amp;gt;&lt;br /&gt;      &amp;lt;Declarations&amp;gt;&lt;br /&gt;        &amp;lt;Literal&amp;gt;&lt;br /&gt;          &amp;lt;ID&amp;gt;Message&amp;lt;/ID&amp;gt;&lt;br /&gt;          &amp;lt;ToolTip&amp;gt;inserisci il commeto&amp;lt;/ToolTip&amp;gt;&lt;br /&gt;          &amp;lt;Default&amp;gt;Commento&amp;lt;/Default&amp;gt;&lt;br /&gt;        &amp;lt;/Literal&amp;gt;&lt;br /&gt;      &amp;lt;/Declarations&amp;gt;&lt;br /&gt;      &amp;lt;Code Language=&amp;quot;CSharp&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;![CDATA[//---------------------------------------------- $Message$ --------------------------------------------------------------------//]]&amp;gt;&lt;br /&gt;      &amp;lt;/Code&amp;gt;&lt;br /&gt;    &amp;lt;/Snippet&amp;gt;&lt;br /&gt;  &amp;lt;/CodeSnippet&amp;gt;&lt;br /&gt;&amp;lt;/CodeSnippets&amp;gt; &lt;/p&gt;&lt;p&gt;uno snippet consiste in un semplice file xml, contenente il codice, nel mio caso solo un commento che viene inserito nel &amp;quot;segna posto&amp;quot; $message$&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework/" rel="tag"&gt;.NET Framework&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/.NET_Framework_2.0/" rel="tag"&gt;.NET Framework 2.0&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET/" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_2.0/" rel="tag"&gt;ASP.NET 2.0&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/nostromo/post2195/Snippet-Inserire-Riga-Commento.aspx"&gt;&lt;em&gt;uno snippet per inserire riga di commento&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2013 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco Leoncini</dc:creator><category>asp.net, .NET Framework, .NET Framework 2.0, ASP.NET, ASP.NET 2.0</category><guid isPermaLink="true">http://blogs.aspitalia.com/nostromo/post2195/Snippet-Inserire-Riga-Commento.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/nostromo/post2195/Snippet-Inserire-Riga-Commento.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/nostromo/CommentRSS2195.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2195</trackback:ping></item><item><title>Extension Method per semplificare la Reflection</title><link>http://blogs.aspitalia.com/nostromo/post2194/Extension-Method-Semplificare-Reflection.aspx</link><pubDate>Fri, 28 Dec 2007 13:25:00 GMT</pubDate><description>&lt;img src="http://blogs.aspitalia.com/services/counter_rss.aspx?PostID=2194" border="0" style="width:1px; height:1px;" /&gt;&lt;p&gt;per esigenze personali, che poi condividerò tramite script o blog, avevo la necessità di assegnare runtime un event handler per una serie di controlli.&lt;/p&gt;&lt;p&gt;per rendere il codice più semplice e riutilizzabile ho deciso di realizzare 4 semplici Extension Method che sono più o meno questi:&lt;/p&gt;&lt;code&gt;&lt;p&gt;using System;&lt;br /&gt;using System.Web;&lt;br /&gt;using System.Web.UI;&lt;br /&gt;using System.Web.UI.WebControls;&lt;br /&gt;using System.Reflection;&lt;br /&gt;using ReflectionExtension;&lt;/p&gt;&lt;p&gt;namespace ReflectionExtension&lt;br /&gt;{&lt;br /&gt;    public static class ObjectReflectionExtension&lt;br /&gt;    {&lt;br /&gt;        public static void AddHanlder(Object objectEventRaiser, object objectBoundToDelegate, string methodName, string eventName)&lt;br /&gt;        {&lt;br /&gt;            if (objectEventRaiser == null | objectBoundToDelegate == null | string.IsNullOrEmpty(methodName) | string.IsNullOrEmpty(eventName) )&lt;br /&gt;            {&lt;br /&gt;                throw new ArgumentNullException();&lt;br /&gt;            }&lt;br /&gt;            else&lt;br /&gt;            {&lt;br /&gt;                Type _dataSourceType = objectEventRaiser.GetType();&lt;/p&gt;&lt;p&gt;                EventInfo _eventInfo = _dataSourceType.GetEvent(eventName);&lt;br /&gt;                &lt;br /&gt;                if (_eventInfo == null)&lt;br /&gt;                {&lt;br /&gt;                    throw new ArgumentException(string.Format(&amp;quot;Impossibile trovare l'evento {0}&amp;quot;, eventName));&lt;br /&gt;                }&lt;br /&gt;                else&lt;br /&gt;                {&lt;br /&gt;                    MethodInfo _methodInfo = objectBoundToDelegate.GetType().GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance);&lt;/p&gt;&lt;p&gt;                    if (_eventInfo == null)&lt;br /&gt;                    {&lt;br /&gt;                        throw new ArgumentException(string.Format(&amp;quot;Impossibile trovare il metodo {0}&amp;quot;, methodName));&lt;br /&gt;                    }&lt;br /&gt;                    else&lt;br /&gt;                    {&lt;br /&gt;                        Delegate _delegate = Delegate.CreateDelegate(_eventInfo.EventHandlerType, objectBoundToDelegate, _methodInfo);&lt;/p&gt;&lt;p&gt;                        _eventInfo.AddEventHandler(objectEventRaiser, _delegate);&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;namespace WebControlReflectionExtension&lt;br /&gt;{&lt;br /&gt;    public static class WebControlReflectionExtension&lt;br /&gt;    {&lt;/p&gt;&lt;p&gt;        public static void AddInsertedHandler(this DataSourceControl dataSourceControl, object objectBoundToDelegate, string methodName)&lt;br /&gt;        {&lt;br /&gt;            ObjectReflectionExtension.AddHanlder(dataSourceControl, objectBoundToDelegate, methodName, &amp;quot;Inserted&amp;quot;);&lt;br /&gt;        }&lt;/p&gt;&lt;p&gt;        public static void AddDeleteddHandler(this DataSourceControl dataSourceControl, object objectBoundToDelegate, string methodName)&lt;br /&gt;        {&lt;br /&gt;            ObjectReflectionExtension.AddHanlder(dataSourceControl, objectBoundToDelegate, methodName, &amp;quot;Deleted&amp;quot;);&lt;br /&gt;        }&lt;/p&gt;&lt;p&gt;        public static void AddUpdateddHandler(this DataSourceControl dataSourceControl, object objectBoundToDelegate, string methodName)&lt;br /&gt;        {&lt;br /&gt;            ObjectReflectionExtension.AddHanlder(dataSourceControl, objectBoundToDelegate, methodName, &amp;quot;Updated&amp;quot;);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/p&gt;&lt;p /&gt;&lt;p&gt;&lt;/p&gt;&lt;/code&gt;&lt;br /&gt;associare ad un oggetto che erediti da DataSourceControl un evento tramite reflection diventa davverso semplice: &lt;br /&gt;&lt;br /&gt;dataSourceControl.AddInsertedHandler(this, &amp;quot;InsertedHandler&amp;quot;); &lt;br /&gt;&lt;br /&gt;nati a supporto di Linq gli Extension Method risulatno davvero utili a scriver codice manutenibile e altamente riutilizzabile. &lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;a href="http://tags.aspitalia.com/.NET_Framework/" rel="tag"&gt;.NET Framework&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/.NET_Framework_3.5/" rel="tag"&gt;.NET Framework 3.5&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET/" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://tags.aspitalia.com/ASP.NET_3.5/" rel="tag"&gt;ASP.NET 3.5&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Continua a leggere &lt;a href="http://blogs.aspitalia.com/nostromo/post2194/Extension-Method-Semplificare-Reflection.aspx"&gt;&lt;em&gt;Extension Method per semplificare la Reflection&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;a href="http://www.aspitalia.com/"&gt;(C) 2013 ASPItalia.com Network - All rights reserved&lt;/a&gt;&lt;/p&gt;</description><dc:creator>Marco Leoncini</dc:creator><category>asp.net, .NET Framework, .NET Framework 3.5, ASP.NET, ASP.NET 3.5</category><guid isPermaLink="true">http://blogs.aspitalia.com/nostromo/post2194/Extension-Method-Semplificare-Reflection.aspx</guid><slash:comments>0</slash:comments><wfw:comment>http://blogs.aspitalia.com/nostromo/post2194/Extension-Method-Semplificare-Reflection.aspx#feedback</wfw:comment><wfw:commentRss>http://blogs.aspitalia.com/nostromo/CommentRSS2194.aspx</wfw:commentRss><trackback:ping>http://blogs.aspitalia.com/services/trackback.aspx?PostID=2194</trackback:ping></item></channel></rss>