La pagina iniziale di un sito Dynamic Data mostra l'elenco delle tabelle del data model in ordine alfabetico. Se si vuole modificare tale ordinamento, è necessario indicare al sistema l'ordine in cui vogliamo che siano mostrate le informazioni. Per fare questo, innanzi tutto aggiungiamo un nuovo Custom Attribute al nostro progetto:
[AttributeUsage(AttributeTargets.Class, AllowMultiple=false)]
public class TableOrderAttribute : Attribute
{
public int Order { get; private set; }
public TableOrderAttribute()
{
Order = int.MaxValue;
}
public TableOrderAttribute(int order)
{
Order = order;
}
public static TableOrderAttribute Default = new TableOrderAttribute();
}
Ora dobbiamo decorare con l'attributo TableOrder le classi che rappresentano le tabelle. Ad esempio, supponiamo di avere una tabella di nome Tasks che vogliamo sia mostrata prima di tutte le altre; dovremmo definire una classe parziale in questo modo:
namespace DynamicDatasite
{
[TableOrder(0)]
public partial class Task
{ }
}
Dove
DynamicDataSite è il root namespace del sito. In questo esempio abbiamo specificato la posizione 0 per la tabella. Poiché, di default, l'ordine di una tabella è
int.MaxValue, per mostrare solo alcune tabelle prima delle altre, è sufficiente decorare queste ultime con l'attributo
TableOrder, senza dover modificare quelle la cui posizione non ci interessa.
Infine, si deve modificare la seguente istruzione, contenuta nell'evento Page_Load file Default.aspx.cs:
System.Collections.IList visibleTables = MetaModel.Default.VisibleTables;
In modo che diventi:
System.Collections.IList visibleTables = MetaModel.Default.VisibleTables
.OrderBy(table => ((TableOrderAttribute)table.Attributes[typeof(TableOrderAttribute)]).Order).ToList();
Semplicemente, ordiniamo le tabelle sulla base del valore di TableOrder.Order. Non è necessario controllare l'esistenza di tale attributo perché, avendo specificato una proprietà statica di nome Default nella sua definizione, il suo valore sarà automaticamente applicato alle tabelle che non la presentano.