Posts by tag: dynamic data

by in / ASP.NET
No peoples think this is good

Dynamic Data: attributo DisplayColumn e override di ToString()

Nei Dynamic Data quando abbiamo una relazione uno a molti possiamo utilizzare l’attributo DisplayColumn per determinare quale tra le proprietà della classe sulla parte uno della relazione viene utilizzata nel testo del link.

Analizzando nel dettaglio il controllo ForeignKey.ascx che visualizza il campo chiave esterna notiamo che il testo del link viene popolato utilizzando il metodo GetDisplayString della classe MetaTable. Utilizzando Reflector vediamo come si comporta questo metodo:

Dall’analisi del codice notiamo come l’attributo DisplayColumn non abbia effetto se abbiamo eseguito l’override del metodo ToString() nella classe della chiave esterna.

In questo modo se nella classe Customer dell’esempio andiamo ad eseguire l’override del metodo ToString() nel seguente modo…

… l’effetto che otteniamo è il seguente:

DisplayColumn

Ovviamente possiamo ovviare a questo comportamento modificando opportunamente il controllo ForeignKey affinché utilizzi direttamente l’attributo DisplayColumn.

/ Read Article /
by in / ASP.NET
No peoples think this is good

Passaggio di parametri ad un dynamic data control tramite l’attributo UIHint

Nei Dynamic Data possiamo, attraverso l’attributo UIHint, impostare il FieldTemplate da utilizzare per un determinato campo dati, e non solo, tramite la proprietà ControlParameters possiamo passare delle informazioni ai controlli, per esempio per impostarne delle proprietà. Vediamo come:

La proprietà ControlParameters è un insieme di coppie chiave/valore che possiamo popolare direttamente nella decorazione del campo nella classe dei metadati intervallando chiavi e valori separati da una virgola:

Nell’esempio sopra utilizziamo per il campo ContactName il template Text al quale passiamo una coppia chiave/valore con la quale vogliamo impostare la lunghezza della TextBox a 75 colonne.

Nel FieldTemplate andiamo ad intercettare l’evento PreRender e ciclando sulla collezione dei parametri utilizziamo la chiave per ottenere la proprietà corrispondente per il controllo TextBox esposto dalla proprietà DataControl. A questo punto assegnamo alla proprietà il valore utilizzando l’opportuno convertitore ottenuto dal tipo attraverso la classe TypeDescriptor.

In questo esempio ho utilizzato il FieldTemplate Text_Edit.ascx, ma se vogliamo estendere tale funzionalità a tutti i controlli possiamo pensare di creare una nostra classe che erediti direttamente da FieldTemplateUserControl ed inserire questo codice nell’override del metodo OnPreRender. Ovviamente questo implica (per questa soluzione) che le proprietà impostate nella ControlParameters vengano propagate per tutti i controlli utilizzati per renderizzare i dati del campo così decorato (ad esempio Text.ascx, Text_Edit.ascx e se esiste Text_Insert.ascx).

/ Read Article /