ASP.NET Dynamic Data - Custom Page

by Andrea 22 May 2008 22: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

Comments

17/10/2008 05:34 #

ecco, questa era esattamente una delle cose che mi serviva sapere!

Luca Italy | Reply

18/01/2009 12:07 #

Personalizzare i template dei Dynamic Data

Personalizzare i template dei Dynamic Data

Around and About .NET World | Reply

18/01/2009 12:37 #

Personalizzare i template dei Dynamic Data

Le pagine mostrate dagli ASP .NET Dynamic Data sono facilmente personalizzabili, in quanto basate su

Around and About .NET World | Reply

16/02/2009 20:26 #

Ciao,
i Dynamic Data sono interessanti per chi deve gestire in breve tempo dei dati, volevo chiederti se esisteva un modo per far visualizzare agli utenti un nome diverso da quello delle tabelle reali.
Es.
Tabella esistente ANA_UTENTI vorrei visualizzare UTENTI.

Ciao e grazie (Ottimo post)

Aniello Montoro

Aniello Montoro Italy | Reply

16/02/2009 20:40 #

Ciao, la cosa è possibilissima e hai differenti modi per farla.

Il più corretto sta nel creare un FieldTemplate che si occupa di fare la trasformazione. Creando un FieldTemplate hai la possibilità di eseguire l'operazione inversa che ti verrà richiesta nel momento del salvataggio (immagino che un utente non dovrà inserire ANAG_ in fase di edit), ed in più, lavorando con i FieldTemplate non hai la necessità di crearti una custom page, ma è sufficiente aggiungere un attributo UIHint alla property della tua classe.

Un altro modo è quello di creare una custom page e nell'evento RowDataBound della GridView eseguire l'operazione da te richiesta. Valuta anche la possibilità di crearti una colonna TemplateFields dove visualizzare l'informazione, ed impostare ScaffoldColumn a false nella proprietà della tua classe.

Altro modo ancora, è di crearti una properti in sola lettua in una partial class, che esegua un replace di ANA_ con String.Empty.

Di modalità ce ne sono parecchie, e vanno un pò valutate, quella che preferisco e che ti consiglierei è la prima, e cioè di crearti un tuo FieldTemplate con tutta la logica al suo interno.

Wink

Andrea | Reply

Add comment




  Country flag

biuquote
  • Comment
  • Preview
Loading