Dynamic Data e Field Template per relazione Molti a Molti

by Andrea 17 November 2008 01:39

Chi di voi ha iniziato a utilizzare i Dynamic Data con l’Entity Framework si sarà accorto della difficolta (o impossibilità) di editare le relazioni molti a molti delle proprie classi.

Un post di David Ebbo ci viene in soccorso proponendoci la creazione di un Field Template in grado di renderizzare una lista di CheckBox per visualizzare ed editare queste informazioni.
Il post è il seguente: A ‘Many To Many’ field template for Dynamic Data

Nello zip che potrete scaricare sono contenuti 2 Field Template, uno per la lettura e uno per l’edit delle relazioni (questi controlli saranno inseriti nella prossima versione dei Dynamic Data).ManyToMany_read ManyToMany_Edit

Tags: , ,

ASP .NET

Un nuovo MVP

by Andrea 01 October 2008 09:45

MVP_FullColor_ForScreen E' con un'emozione unica che vi voglio rendere partecipi...oggi mi è stato conferito il premio di MVP (Most Valuable Professionals) nella categoria ASP/ASP.NET.

Oltre alla mail arrivata, ecco un post di Alessandro Teglia che ne da la conferma: MVP Award Program – October 2008

Mi sento di dover ringraziare Andrea Boschin e Davide Vernole perchè è per merito loro che sono potuto crescere professionalmente fino a questi livelli…e sono semper loro che hanno saputo trasmettere in me cosa significa fare community ed essere community.
Un grazie va a Microsoft (ad Alessandro Teglia) per credere nelle mie capacità, e un enorme grazie a tutte le persone che hanno partecipato agli eventi XeDotNet e Microsoft, o che mi hanno scritto in questo blog, per avermi motivato e stimolato ogni giorno a continuare in ciò che credevo, e a dare sempre di più.
Grazie davvero.

Ho sempre pensato che il premio di MVP fosse per me un punto di arrivo, un sogno (quasi irraggiungibile)....ed invece ora è diventato uno stimolo maggiore per crescere, e per diffondere lo spirito di community. GRAZIE

 

Technorati Tags: ,,

Tags:

.NET | +1 | ASP .NET | Microsoft

SiteMapPath e la proprietà SkipLinkText

by Andrea 28 August 2008 00:57

accessibilità Il controllo SiteMapPath ha una proprietà SkipLinkText che permette di inserire un collegamento invisibile che permette agli screen reader di poter saltare i link che il controllo visualizzerà.

Di default il controllo renderizza un link con l’alternate text “Skip Navigation Links” e al suo interno un’immagine da 0px per 0px (e quindi il tutto risualta invisibile).
La cosa però è di estrema utilità per i non vedenti, che usano browser che leggono il contenuto delle pagine (screen reader) e che invece sarebbero costretti a sentirsi leggere (per esempio) un gran numero di link (a volte inutili).

Nel caso volessimo disabilitare questa funzionalità, è sufficiente impostare a string.Empty il valore di SkipLinkText (SiteMapPath.SkipLinkText = “”).

Nel progetto a cui stò lavorando mi sono accorto di questa cosa analizzando il sorgente della pagina. Nel mio caso però questo codice aggiunto era inutile in quanto il controllo mi visualizza al massimo due link. Non capendo chi fosse ad aggiungere quel codice, mi sono messo a fare qualche ricerca fino a quando ho trovato la proprietà in oggetto, che a quanto pare è anche di utilità per aumentare l’accessibilità nei siti.

Technorati Tags: ,

Tags:

accessibilità | ASP .NET

LINQ to SQL - Generare query IN utilizzando CONTAINS

by Andrea 29 July 2008 14:02

Oggi mi sono trovato ad affrontare un problema di quelli banali, ma che (come al solito) mi ha fatto perdere un bel pò di tempo.
Il mio problema era ricavare un elenco di ID e Title dato un array di questi ID.

In SQL quello che avrei fatto sarebbe stato semplicissimo e con l’operatore IN avrei rislto in questo modo:

select id, title from Pages where id in (1,2,3,8,9)

Nel progetto a cui stò lavorando stò però utilizzando LINQ to SQL e trovare l’equivalente query è stata davvero dura (è il primo progetto dove uso seriamente LINQ to SQL), ma alla fine grazie al Contains sono riuscito a trovare la soluzione:

int[] pagesID = new int[] {1,2,3,8,9};
 
var pages = (from p in dc.Pages
             where pagesID.Contains(p.ID)
             select new { p.ID, p.Title });

Questa invece è la query generata da LINQ per recuperare i dati, che come vedete è simile a quella che avremmo realizzato noi:

exec sp_executesql N'SELECT [t0].[id] AS [ID], [t0].[Titolo] AS [Title]
FROM [dbo].[Pages] AS [t0]
WHERE [t0].[id] IN (@p0, @p1)',N'@p0 int,@p1 int',@p0=701,@p1=694

La soluzione è davvero banale, ma lo posso dire solo ora, dopo che ci ho sbattuto la testa, e la posto qui nel caso servisse anche a qualcuno di voi, o a me nel caso perdessi la memoria. ;-)

Lo spunto per la soluzione l’ho trovata in questo post: Creating IN Queries With Linq To Sql

Technorati Tags: ,

Tags:

ASP .NET | .NET

ASP.NET Dynamic Data - alcuni link

by Andrea 20 July 2008 13:43

Ecco alcuni link che possono essere utili a chi stà provando ad utilizzare i Dynamic Data:

Using ASP.NET Dynamic Data with ObjectDataSource
http://blogs.msdn.com/.../using-asp-net-dynamic-data-with-objectdatasource.aspx

Dynamic Data and the Associated Metadata Class
http://blogs.msdn.com/.../dynamic-data-and-the-associated-metadata-class.aspx

How to add Dynamic Data to an Existing Web Site
http://blogs.msdn.com/.../how-to-add-dynamic-data-to-an-existing-web-site.aspx

How to add Dynamic Data to an Existing Web Application
http://blogs.msdn.com/.../how-to-add-dynamic-data-to-an-existing-web-application.aspx

A DynamicData Attribute Based Permission Solution using User Roles
http://csharpbits.notaclue.net/2008/05/introduction-this-project-is-going-to.html

Ed ecco i blog da seguire per rimanere aggiornati sulle novità dei Dynamic Data:

Technorati Tags: ,

Tags:

ASP .NET

Slide e Codice ultimi meeting

by Andrea 09 July 2008 08:07

In questi giorni è stato pubblicato il meteriale (slide e codice) degli utlimi meeting. Mi spiace per il ritardo, ma gli impegni che abbiamo avuto in questo periodo non erano pochi.

Ecco i link agli eventi che sono stati aggiornati, dove potrete trovare le slide e il codice degli esempi:

Per qualsiasi domanda, o dubbio relativo ai vari argomenti e/o al materiale, non esitate a contattarmi.

Tags:

XeDotNet | ASP .NET

ASP.NET Dynamic Data - Custom Page

by Andrea 22 May 2008 13:05

Come abbiamo vsito nel precedente post (Dynamic Data - Per iniziare), le pagine renderizzate sono basate su dei template che sono contenuti all'interno della cartella /DynamicData/PageTemplate/.
I template che abbiamo a disposizione sono:

  • Details.aspx
  • Edit.aspx
  • Insert.aspx
  • List.aspx
  • ListDetails.aspx

queste pagine utilizzano i classici controlli di ASP.NET (e ulterioli controlli contenuti nei Dynamic Data) che permettono di renderizzare in modo dinamico le informazioni presenti nel DataContext.

Ma nel caso volessimo personalizzare queste pagine per una determinata classe?

WebSiteFolder 1- All'interno della cartella /DynamicData/CustomPage/ creiamo una cartella con il nome della tabella di cui vogliamo personalizzare la visualizzazione, per esempio per Products dovremo creare la cartella
/DynamicData/CustomPage/Products/.

2- Copiare il template che si desidera modificare all'interno della cartella appena creata. Per esempio, per modificare la pagina di visualizzazione prodotti si dovrà copiare la pagina List.aspx in /DynamicData/CustomPage/Products/List.aspx.

3- Ora si può modificare a piacimento la pagina List.aspx appena creata. Si potrà sostituire il controllo GridView con un DataList, oppure modificare la GridView visualizzando solamente determinate colonne.
Per visualizzare in modo automatico i controlli di edit e visualizzazione i modo dinamico a seconda del tipo di DataField che andremo a bindare, i Dynamic Data introducono dei nuovi controlli, che sono per esempio i DynamicControl e il DynamicField. Questi controlli hanno la capacità di renderizzare il controllo apposito a seconda del tipo di dato che dovranno visualizzare, e creeranno anche tutti i validatori necessari.
Andremo in dettaglio su questi controlli in uno dei prossimi post.

<asp:GridView ID="GridView1" runat="server" 
    DataSourceID="GridDataSource"
    AllowPaging="True" 
    AllowSorting="True"
    CssClass="gridview" 
    AlternatingRowStyle-CssClass="even" 
    AutoGenerateColumns="false">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:HyperLink 
                    ID="EditHyperLink" 
                    runat="server"
                    NavigateUrl='<%# table.GetActionPath(PageAction.Edit, GetDataItem()) %>'
                    Text="Edit" />&nbsp;
                <asp:LinkButton 
                    ID="DeleteLinkButton" 
                    runat="server" 
                    CommandName="Delete"
                    CausesValidation="false" Text="Delete"
                    OnClientClick='return confirm("Are you sure you want to delete this item?");'/>&nbsp;
                <asp:HyperLink 
                    ID="DetailsHyperLink" 
                    runat="server"
                    NavigateUrl='<%# table.GetActionPath(PageAction.Details, GetDataItem()) %>'
                    Text="Details" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:DynamicField DataField="ProductName" HeaderText="Nome Prodotto" />
        <asp:DynamicField DataField="UnitsInStock" HeaderText="Unità"  />
        <asp:DynamicField DataField="Discontinued" HeaderText="Produzione"  />
    </Columns>
 
    <PagerStyle CssClass="Footer"/>        
    <PagerTemplate>
        <asp:GridViewPager runat="server" />
    </PagerTemplate>
    <EmptyDataTemplate>
        There are currently no items in this table.
    </EmptyDataTemplate>
</asp:GridView>

Ecco come in semplici passi siamo riusciti a personalizzare una precisa pagina, potendola modificare in ogni suo particolare, da quello grafico, fino ad arrivare ai controlli inseriti. Utilizzando i template già esistenti, ci si trova di fronte un buon punto di partenza, dove saranno necessarie poche modifiche per adattare il tutto e arrivare al risultato voluto.

Tags:

ASP .NET

ASP.NET Dynamic Data - Per iniziare

by Andrea 19 May 2008 13:05

Il miglior modo per capire cosa siano i Dynamic Data è quello di provare a realizzare una semplice applicazione che ne faccia uso.

1- Creazione Dynamic Data WebSite

Creiamo da Visual Studio 2008 un nuovo WebSite, e tra i template disponibili selezioniamo Dynamic Data WebSite. Ricordo che questo template è disponibile solo installando il SP1 del Framework 3.5, o per chi abbia scaricato in precedenza il codice da questo link.

DynData_CreateWebsite

DynData_StructureIl WebSite appena creato avrà al suo interno una struttura di cartelle e file che permetteranno ai Dynamic Data di funzionare, e che permetteranno allo sviluppatore di poter personalizzare l'applicazione per adattarla alle proprie esigenze.

 

 

 2- Creazione Classe Linq To SQL

Dovremo poi creare una classe Linq To SQL (oppure Linq to Entity) da utilizzare come fonte dati per i Dynamic Data. Le classi che verranno inserite in Linq To SQL saranno poi quelle visualizzate (in automatico) nell'applicazione, e in qui sarà possibile leggere, modificare, inserire e cancellare i dati.
DynData_LinqToSqlSelezioniamo il progetto e procediamo a creare un oggetto di tipo LINQ to SQL Classes e rinominiamolo a seconda del db che andremo a interrogare (nel mio caso Northwind.dbml). Una volta creato l'oggetto, trasciniamo all'interno le tabelle che vogliamo utilizzare la LINQ to SQL.
(Nel codice da me realizzato faccio uso del database Northwind presente tra i samples di SQL Server)

3 - Configurazione - Modifica Global.asax

Per associare il datacontext di LINQ to SQL ai Dynamic Data dovremo intervenire nel file Global.asax.
Si dovrà togliere il commento e modifcare la riga di codice dove viene eseguito la registrazione del datacontext, come segue (specificando il datacontext creato da LINQ to SQL nel passo precedente):

model.RegisterContext(
    typeof(NorthwindDataContext), 
    new ContextConfiguration() { ScaffoldAllTables = true });

Impostanto a ScaffoldAllTables a True, permetterete ai Dynamic Data di interfacciare tutte le tabelle presenti nel datacontext associato. (Nei prossimi post vedremo come modificare questa parte di configurazione per interfacciare solo determinate classi).

4 - Avvio del progetto - Il gioco è fatto

Ora non rimane altro che premere F5 ed eseguire il progetto.
Il WebSite che ci si trova davanti permetterà sarà completamente navigabile, e conterrà tutte le pagine necessarie per visualizzare e modificare i dati presenti nel db (interfacciati da LINQ to SQL).
Da notare che le pagine di modifica e inserimento dei dati comprendono anche tutta la validazione necessaria.

DynData_WebSiteDynData_ProductsDynData_Product

I Dynamic Data permettono allo sviluppatore di ridurre in modo notevole i tempi di sviluppo, in quanto ci si dovrà occupare della grafica del portale, di eventuali permessi/ruoli di visibilità e di accesso, e di configurare l'applicazione in modo da permettere la visualizzazione o la modifica solo di alcuni campi presenti (e questo argomento verrà approfondito in uno dei prossimi post).

Codice Sorgente di questo esempio - Download

ASP.NET 3.5 Dynamic Data su MSDN Code Gallery

Technorati Tags: ,

Tags:

ASP .NET

ASP.NET Dynamic Data... cosa sono?

by Andrea 17 May 2008 13:05

Lo devo proprio ammettere, questi Dynamic Data sono proprio stupendi!
In questo periodo ho avuto modo di approfondirli per bene, e rilascio dopo rilascio si può dire che Microsoft stà facendo proprio un bel lavoro, e i progressi si vedono.

Cosa sono i Dynamic Data?
I Dynamic Data permettono di creare una Web Application per l'accesso e la gestione dati utilizzando un meccanismo chiamato scaffolding. Questo meccanismo, unito ai Dynamic Data Control, permette di creare dinamicamente tutte le pagine per la visualizzazione, inserimento e modifica di dati recuperandoli da un DataContext (per esempio LINQ to SQL o LINQ to Entity). Le pagine create sono facilmente customizzabili e hanno al loro interno già tutte le regole e la logica di validazione.

Questa ovviamente è una definizione grossolana dei Dynamic Data, ma con i prossimi post vedrò di andare in dettaglio nelle varie parti che compongono questo nuovo mondo.

Se volete rimanere aggiornati sull'argomento, vi consiglio di seguire i blog di:

e ovviamente il mio. :D

Per chi volesse provare i Dynamic Data, al momento l'unica possibilità è solamente quella di installarsi il Microsoft .NET Framework 3.5 Service pack 1 Beta che ricordo è in BETA e li racchiude al suo interno.

E buon divertimento!!

Technorati Tags: ,

Tags:

ASP .NET

Remainder per i ritardatari - ASP.NET 3.5 Community Meeting

by Andrea 16 May 2008 08:05

Siamo al 16 Maggio 2008 ed è giunta la giornata in cui terrò il Community Meeting su ASP.NET 3.5 al NOVOTEL a Mestre.

Cosa vi spetterà questa sera?
Le novità introdotte in Visual Studio 2008 per gli sviluppatori Web, i nuovi Data Control (ListView, LinqDataSource, DataPager), ASP.NET AJAX e per quanto riguarderà il futuro, vedrete all'opera i Dynamic Data. E vedrete degli esempi che dimostreranno il come realizzare un'applicazione completa sia ora ancora più facile.

Non vi siete ancora registrati?
Ecco qui il link: http://www.xedotnet.org/48/section.aspx/295

Tags:

ASP .NET | XeDotNet