Personalizzare il layout di visualizzazione con i Dynamic Data Controls

di Marco De Sanctis, in ASP.NET 3.5 SP 1, Dynamic Data Controls, DataBinding,

Uno dei vantaggi principali dell'uso dei Dynamic Data Controls risiede nell'estrema semplicità con cui è possibile applicare layout personalizzati alla visualizzazione o alla modifica di una determinata proprietà.

Supponiamo, ad esempio, di rappresentare lato database il sesso di una persona con "M" o "F". Per far sì che il sito web visualizzi questa informazione in formato esteso, non dobbiamo far altro che costruire un Field Template personalizzato. Il primo passo da compiere è quello di aggiungere uno UserControl (nel nostro esempio, Gender.ascx) alla cartella DyanmicData/FieldTemplates


e successivamente modificarne il code-behind in modo che erediti dalla classe FieldTemplateUserControl:

C#
public partial class Gender : FieldTemplateUserControl
{
  ...
}

A questo punto possiamo iniziare a scrivere il markup personalizzato, ad esempio aggiungendo una Label in binding con la proprietà FieldValueString:

ASPX
<asp:Label runat="server" ID="lblGender" Text="<%# FieldValueString %>" />

Si tratta di una proprietà virtual, definita all'interno di FieldTemplateUserControl, che convenzionalmente restituisce la rappresentazione stringa del dato che il FieldTemplate deve gestire. Nel nostro caso, è sufficiente effettuarne l'override per introdurre la logica di visualizzazione desiderata:

C#
public override string FieldValueString
{
    get
    {
        string value = this.FieldValue as string;

        if (value == "M")
            value = "Maschio";
        else if (value == "F")
            value = "Femmina";

        return value;
    }
}

Il codice in alto è estremamente semplice e si limita a prelevare il dato da FieldValue e a restituire la stringa desiderata. Anche se non necessario, all'interno del custom field template è buona norma anche ridefinire la proprietà DataControl, restituendo l'istanza del controllo web che utilizziamo per rappresentare il dato; ciò consente ad un chiamante esterno (ad esempio, la pagina che ospita il nostro template) di ottenere eventualmente un riferimento ad esso.

C#
public override Control DataControl
{
    get
    {
        return this.lblGender;
    }
}

Come ultimo passaggio, non dobbiamo far altro che associare il template Gender alla proprietà desiderata, utilizzando il sistema dei MetadataType che abbiamo visto nello script #1004:

C#
[MetadataType(typeof(PersonMetadata))]
public partial class Person
{
    
}

public class PersonMetadata
{
    [UIHint("Gender")]
    public string Gender { get; set; }
}

In un prossimo script vedremo come una tecnica simile possa essere utilizzata anche per personalizzare la fase di edit di un dato.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi