Dynamic Data - Nascondere colonne in determinate action

by Andrea 19 December 2008 03:16

Nel visualizzare i dati nelle nostre applicazioni, spesso si ha la necessità di visualizzare un numero di informazioni differenti nel caso fossimo in una lista, o in un dettaglio o in edit di un nostro oggetto.

Lavorando con i Dynamic Data, di default la cosa non è possibile, ma con un pò di codice la cosa è fattibile.

Stephen Naughton ha trovato una soluzione davvero brillante, e cioè implementando l'interfaccia IAutoFieldGenrators (che viene utilizzata dalla GridView, e DetailsView per creare in automatico le colonne e/o fields), e creando un attributo da utilizzare nelle classi dei Metadati dove verranno specificate le action per le diverse property.

Il post è il seguente: Dynamic Data - Hiding Columns in selected PageTemplates

Tags: , , ,

ASP .NET

Passaggio a BlogEngine. Addio WordPress

by Andrea 30 May 2008 02:23

Era da tempo che avevo iniziato la cosa, ma per un motivo o per un'altro avevo sempre posticipato. Ecco che ora il mio blog gira su BlogEngine e non più su WordPress.

Perchè questo?
Semplice perchè BlogEngine è sviluppato in .NET e questo mi permette di personalizzarlo e aggiungergli funzionalità a mio piacimento, senza dipendere da plugin di terze parti.
WordPress è una piattaforma di blog davvero stupenda, e credo proprio di poter dire che è la migliore che conosca, e la consiglierei a tutti....ma purtroppo è in PHP e non ho la voglia (e il tempo) di approfondirlo come argomento (dite pure che è pigrizia). Ecco il motivo di questo cambiamento.
In questo modo avrò anche la possibilità di testare le ultime tecnologie riguardanti il mondo del .NET Framework direttamente nel mio blog, e non è una cosa da poco.

Cambia il blog e cambia anche il dominio.
Il nuovo dominio ora è http://blog.dottor.net perchè il target del mio blog è un pò cambiato da quando ho iniziato, e "il silenzio di un urlo" ha poco a che vedere con i post relativi alle tecnologie Microsoft .NET.
Ma non ho intenzione di far morire quel dominio perchè ci sono proprio affezionato...lo terrò quindi per qualche idea/progetto futuro (che non si sa mai).

Dal vecchio blog è attivo un redirect (redirect 301) che ridirige i vecchi url verso quelli nuovi (e per questo rigrazio Roberto che mi ha dato una mano a riguardo), e spero di esser riuscito a redirigerli tutti. Spero poi che google mi dia una mano, a riposizionare il mio nuovo blog allo stesso livello di quello vecchio, per permettervi di trovare velocemente i miei vecchi post.

Il feed invece rimane invariato, e per chi non lo ha ancora sottoscritto, ecco qui: http://feeds.dottor.net/ilsilenziodiunurlo

Inoltre, se riscontrate qualche problema, non esitate a contattarmi.

Technorati Tags: ,

Tags: , ,

.NET | Sito

AutoComplete Extender - alcuni workaround

by Andrea 04 April 2008 14:04

BoxRicercaStò utilizzando il controllo AutoComplete Extender, contenuto negli Ajax Control Toolkit, e mi sono trovato ad affrontare diversi problemi dovuti a bug del controllo ed altri dovuti a problemi con IE6.
Voglio però sottolineare che grazie alla flessibilità di questi controlli, sono riuscito facilmente a trovare alcuni workaround senza dover scrivere montagne di codice.

Nella mia applicazione mi trovo ad avere un controllo TextBox a cui è collegato l'AutoComplete Extender (per agevolare l'inserimento del testo), e posizionati subito sotto sono presenti alcune DropDownList.

Iniziamo dal primo problema:
con IE6, all'apertura del pannello dell'AutoComplete Extender, le DropDownList rimangono in primo piano, "bucando" il pannello.
La soluzione che ho trovato è stata quella di intervenire nelle animations, inserendo alcuni ActionScript che nascondono le DropDownList quando il pannello si apre, e le rivisualizzano non appena il pannello si stà chiudendo. In questo modo, l'AutoComplete Extender sarà visualizzato senza problemi grafici.

Altro problema:
alla chiusura del pannello non riuscivo più a modificare il valore delle DropDownList perchè il pannello viene nascosto impostando lo stile visibility, che lo fa quindi mantere in primo piano, bloccando l'accesso ai controlli posti sotto.
La soluzione più veloce è stata quella di intervenire anche qui nelle ActionScript, recuperandomi l'oggetto del pannello (che ha l'ID composto da BehaviorID__completionListElem) e settandogli la proprietà display a none. Facendo così, il pannello non risulta più essere in primo piano, e si ha l'accesso ai controlli in precedenza bloccati.

Ecco qui il codice per risolvere questi due problemi:

<ajaxToolkit:AutoCompleteExtender 
    runat="server" 
    BehaviorID="AutoCompleteEx" 
    ID="autoComplete1"
    TargetControlID="CittaCod" 
    ServiceMethod="GetCityList" 
    ServicePath="~/Services.asmx"
    MinimumPrefixLength="2" 
    CompletionInterval="1000" 
    FirstRowSelected="true" 
    EnableCaching="true"
    CompletionSetCount="20" 
    CompletionListCssClass="autocomplete_completionListElement"
    CompletionListItemCssClass="autocomplete_listItem" 
    CompletionListHighlightedItemCssClass="autocomplete_highlightedListItem">
    <Animations>
    <OnShow>
        <Sequence>
            <OpacityAction Opacity="0" />
            <HideAction Visible="true" />
            <ScriptAction Script="
                var behavior = $find('AutoCompleteEx');
                if (!behavior._height) {
                    var target = behavior.get_completionList();
                    behavior._height = target.offsetHeight - 2;
                    target.style.height = '0px';
                }" />
            <Parallel Duration=".4">
                <FadeIn />
                <Length PropertyKey="height" 
                        StartValue="0" 
                        EndValueScript="$find('AutoCompleteEx')._height" />
            </Parallel>                                
            <ScriptAction Script="                 
                var ddlPrezzoMin = $get(ddlPrezzoMinID);
                var ddlPrezzoMax = $get(ddlPrezzoMaxID);
                var ddlMqMin = $get(ddlMqMinID);
                var ddlMqMax = $get(ddlMqMaxID);
                
                ddlPrezzoMin.style.visibility = 'hidden';
                ddlPrezzoMax.style.visibility = 'hidden';
                ddlMqMin.style.visibility = 'hidden';
                ddlMqMax.style.visibility = 'hidden'; 
                " />
        </Sequence>
    </OnShow>
    <OnHide>
        <Sequence>
            <ScriptAction Script="    
                var ddlPrezzoMin = $get(ddlPrezzoMinID);
                var ddlPrezzoMax = $get(ddlPrezzoMaxID);
                var ddlMqMin = $get(ddlMqMinID);
                var ddlMqMax = $get(ddlMqMaxID);
                
                ddlPrezzoMin.style.visibility = 'visible';
                ddlPrezzoMax.style.visibility = 'visible';
                ddlMqMin.style.visibility = 'visible';
                ddlMqMax.style.visibility = 'visible';
                
                var autoCompleteElement = $get('AutoCompleteEx_completionListElem');
                autoCompleteElement.style.display = 'none';                                    
                " />
            <Parallel Duration=".4">
                <FadeOut />
                <Length 
                    PropertyKey="height" 
                    StartValueScript="$find('AutoCompleteEx')._height" 
                    EndValue="0" />
            </Parallel>
        </Sequence>
    </OnHide>
    </Animations>
</ajaxToolkit:AutoCompleteExtender>

 

Tags: , , , ,

ASP.NET AJAX

Creare un Control Extender, da dove cominciare

by Andrea 19 June 2007 23:06

AspNetAjax Se avete intenzione di cimentarvi a creare un Control Extender sappiate che la cosa è più semplice di quello che credete.

Per cominciare vi consiglio alcuni link:
Il primo è un tutorial che trovate nel sito di ASP .NET AJAX e vi guiderà passo passo: Creating a new extender

Un'altra risorsa molto utile è il webcast tenuto da :
ASP.NET 2.0 AJAX: Extending ASP.NET AJAX

Ed infine il link al progetto AJAX Control Toolkit. All'interno del progetto scaricato è disponibile anche il pacchetto di installzione per aggiungere il template per creare un Control Extender (il file si chiama AjaxControlExtender.vsi) e permetterà di creare in automatico i file necesssari allo sviluppo di un Extender (file *Behavior.js, *Designer.cs ed *Extender.cs): AJAX Control Toolkit

Tags: , , , ,

ASP.NET AJAX

ASP .NET AJAX e validazione di controlli aggiunti in un postback

by Andrea 21 March 2007 22:03

Se avete provato a validare controlli inseriti in un postback all'interno di un UpdatePanel, vi sarete accorti che la cosa non funziona e nemmeno genera errori.
La storia è semplice, l'UpdatePanel renderizza solamente il suo contenuto e non aggiorna le altre pagine della pagina, che nel caso dei validatori avrebbero contenuto degli script per agganciare il validatore al controllo.
Matt Gibbs, che fa parte del team di sviluppo di ASP .NET AJAX ci è venuto in contro e ha modificato il codice dei validatori facendo si che gli script necessari venissero registrati nella pagina tramite lo ScriptManager.
A questo link trovate un suo post sull'argomento e sono disponibili i sorgenti dei validatori modificati e pronti per il download.

Per sostituire i validatori, è sufficente referenziare la dll contenente i validatori modificati ed aggiungere nella sezione pages del Web.config questa sezione tagMapping:

<tagMapping>
    <add tagType="System.Web.UI.WebControls.CompareValidator"
        mappedTagType=" Sample.Web.UI.Compatibility.CompareValidator, Validators, Version=1.0.0.0"/>
    <add tagType="System.Web.UI.WebControls.CustomValidator"
        mappedTagType=" Sample.Web.UI.Compatibility.CustomValidator, Validators, Version=1.0.0.0"/>
    <add tagType="System.Web.UI.WebControls.RangeValidator"
        mappedTagType=" Sample.Web.UI.Compatibility.RangeValidator, Validators, Version=1.0.0.0"/>
    <add tagType="System.Web.UI.WebControls.RegularExpressionValidator"
        mappedTagType=" Sample.Web.UI.Compatibility.RegularExpressionValidator, Validators, Version=1.0.0.0"/>
    <add tagType="System.Web.UI.WebControls.RequiredFieldValidator"
        mappedTagType=" Sample.Web.UI.Compatibility.RequiredFieldValidator, Validators, Version=1.0.0.0"/>
    <add tagType="System.Web.UI.WebControls.ValidationSummary"
        mappedTagType=" Sample.Web.UI.Compatibility.ValidationSummary, Validators, Version=1.0.0.0"/>
</tagMapping>

In questo modo, i validatori dichiarati come <asp:CompareValidator .../> e gli altri, saranno ridirezionati nel nuovo namespace (nell'assembly appena aggiunto).
Occhi quando vi trovate nel codebehind al namespace che state usando, controllate di puntare effettivamente alla nuova dll.

E tutto questo vale per:

  • CompareValidator
  • CustomValidator
  • RangeValidator
  • RegularExpressionValidator
  • RequiredFieldValidator
  • ValidationSummary

Devo ammettere che ha fatto proprio un buon lavoro, e gli faccio i miei complimenti perchè sarebbe stata una grave mancanza non avere la validazioni in controlli aggiunti dinamicamente in un postback.

Technorati tags: ,

Tags: , , , ,

ASP.NET AJAX