Dynamic Data: attributo DisplayColumn e override di ToString()

datemartedì 18 novembre 2008 alle 23.05  - posted by Manuel Scapolan in ASP.NET

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.

[MetadataType(typeof(CustomerMetadata))]
[DisplayColumn("CompanyName", "CompanyName", false)]
public partial class Customer
{
   ...
}

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:

public string GetDisplayString(object row)
{
  if (row != null)
  {
    row = this.PreprocessRowObject(row);
    if (this.HasToStringOverride)
    {
      return row.ToString();
    }
    object propertyValue = 
      DataBinder.GetPropertyValue(row, this.DisplayColumn.Name);
    if (propertyValue != null)
    {
      return propertyValue.ToString();
    }
  }
  return string.Empty;
}

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...

public override string ToString()
{
  return String.Format("{0} - ({1})", this.CompanyName, this.Country);
} 

... l'effetto che otteniamo è il seguente:

dynamic data website screenshot

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

tagsTags:

Commenti chiusi

About me

manuel scapolanSono un consulente informatico. Nel 2004 terminati gli studi in Ingegneria Informatica (1° livello), ho iniziato come freelance collaborando con una ditta di consulenza informatica ed una agenzia di marketing e comunicazione nello sviluppo di applicazioni web. Attualmente divido il lavoro di sviluppatore e progettista web con attività di formazione nel settore della programmazione.
View Manuel Scapolan's profile on LinkedIn

Follow me on Follow manuelscapolan on Twitter
Member of:
innova

Calendario


<<  maggio 2012  >>
lumamegivesado
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

Disclaimer

Eccetto dove diversamente specificato, i contenuti di questo sito sono rilasciati mediante:
creative commons
Attribuzione: Non commerciale
Condividi allo stesso modo. R.2.5

Books (a bit more about my library)

Domain Driven Design - Eric Evans Applying Domain-Driven Design and Patterns - Jimmy Nilsson Refactoring to Patterns - Joshua Kerievsky Design Patterns -  Erich Gamma, Richard Helm, Ralph Johnson, John M. Vlissides Code Complete Second Edition - Steve McConnell Patterns of Enterprise Application Architecture - Martin Fowler Agile Principles, Patterns, and Practices in C# - Robert C. Martin xUnit Test Patterns - Gerard Meszaros Refactoring - Martin Fowler CLR via C# Second Edition - Jeffrey Richter Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries - Krzysztof Cwalina, Brad Abrams Don't make me think! - Steve Krug Bulletproof Ajax - Jeremy Keith

Manuel Scapolan Copyright © 2007 - 2010 - Tutti i diritti riservati - Powered by BlogEngine.NET 1.5.0.7 - silk icons by famfamfam - Time CET