Controllo ObjectList

Fornisce una visualizzazione ricca di funzionalità di un elenco di oggetti dati. Il controllo ObjectList eredita molto del comportamento che lo caratterizza dal controllo List, inclusi l'impaginazione interna e il supporto per il rendering basato su modelli eseguito utilizzando insiemi di modelli di dispositivo. Per ulteriori informazioni, vedere la documentazione Insiemi di modelli e controlli basati su modelli o Impaginazione. Il controllo ObjectList differisce dal controllo List nei modi descritti di seguito.

Funzionalità Controllo ObjectList Controllo List
Associazione dati Dati associati in modo esplicito. Il solo modo per aggiungere elementi a un elenco oggetti in un controllo è associare l'elenco all'origine dati. È in grado di supportare l'aggiunta di elementi in modo statico, a livello di codice e tramite l'associazione dati.
Visualizzazione di più proprietà Consente di visualizzare più proprietà o campi associati a ogni elemento. In base alle caratteristiche del dispositivo, è possibile che il controllo venga rappresentato come una tabella in cui viene visualizzata più di una proprietà di ogni oggetto oppure è possibile che venga resa disponibile un'interfaccia utente per consentire all'utente di visualizzare ulteriori proprietà di un oggetto. Consente di visualizzare una proprietà di ogni elemento.
Più comandi per ogni elemento Consente di associare più comandi a ogni elemento. L'insieme di comandi per un elemento può essere condiviso tra tutti gli elemnti oppure può essere univoco per l'elemento. È in grado di supportare un comando predefinito per ogni elemento.
Impaginazione interna e applicazione di modelli Funzionalità supportata. Tuttavia, se si visualizza un oggetto che presenta diverse informazioni, utilizzare un elenco con un form separato per i dettagli relativi all'elemento. Funzionalità supportata.

In questa tabella viene eseguito un confronto tra le funzionalità del controllo ObjectList e le funzionalità del controllo List. Tuttavia, è importante comprendere che sebbene entrambi i controlli supportino l'impaginazione personalizzata e l'applicazione di modelli, la classe SelectionList non supporta l'impaginazione.

Per ulteriori informazioni sull'utilizzo del controllo ObjectList, vedere la documentazione Concetti di base per la progettazione e il rendering dei controlli mobili.

Sintassi dei controlli mobili

Le proprietà necessarie, le impostazioni predefinite e gli elementi dalle funzionalità di codice sono in grassetto.

<mobile:ObjectListrunat="server"
   id="id"
   Font-Name="fontName"
   Font-Size="{NotSet|Normal|Small|Large}"
   Font-Bold="{NotSet|False|True}"
   Font-Italic="{NotSet|False|True}"
   ForeColor="foregroundColor"
   BackColor="backgroundColor"
   Alignment="{NotSet|Left|Center|Right}"
   StyleReference="styleReference"
   Wrapping="{NotSet|Wrap|NoWrap}"

   AutoGenerateFields="{True|false}"
   BackCommandText="backCommandText"
   CommandStyle="commandStyle"
   DataMember="dataMember"
   DetailsCommandText="detailsCommandText"
   ItemCount="itemCount"
   LabelField="dataTextField"
   LabelStyle="labelStyle"
   MoreText="moreText"
   OnItemDataBind="onItemDataBindHandler"
   OnItemCommand="onItemCommandHandler"
   OnItemSelect="onItemSelectHandler"
   OnLoadItems="onLoadItemsHandler"
   OnShowItemCommands="onShowItemCommandsHandler"
   TableFields="tableFields">
Place DeviceSpecific/Choice construct here. (optional)
   <DeviceSpecific>
      <Choice>
        Add choice attributes here.
     </Choice>
   </DeviceSpecific>
Place explicitly declared Fields here. (optional)
   <Field 
      id="id"
      Title="titleText" 
      DataField="value"
      FormatString="formatString" 
      Visible="{True|False}"/>
   </Field>
Place explicitly declared Commands here. (optional)
   <Command Name="CommandName" Text="CommandText" />
</mobile:ObjectList>

Comandi e campi statici possono essere dichiarati come elementi figlio dell'elemento.

Regole di contenimento

I controlli descritti di seguito possono contenere un controllo ObjectList.

Controllo Commenti
System.Web.UI.MobileControls.Form Può contenere un numero indefinito di controlli ObjectList.
System.Web.UI.MobileControls.Panel Può contenere un numero indefinito di controlli ObjectList.

In un controllo ObjectList possono essere contenuti i controlli descritti di seguito.

Controllo Commenti
System.Web.UI.MobileControls.DeviceSpecific In un controllo ObjectList possono essere contenuti zero oppure un controllo DeviceSpecific.
System.Web.UI.MobileControls.ObjectList.Field In un controllo ObjectList può essere contenuto un numero indefinito di controlli Field.
System.Web.UI.MobileControls.ObjectList.Command In un controllo ObjectList può essere contenuto un numero indefinito di controlli Command.

Modelli di dispositivo

Per ulteriori informazioni sulla specifica dei modelli per il controllo ObjectList, vedere la documentazione Rendering specifico di dispositivo. Nella seguente tabella viene fornito un elenco di modelli che è possibile utilizzare con il controllo ObjectList.

Modello Descrizione
AlternatingItemTemplate Questo modello esegue il rendering degli elementi con il numero dispari in una visualizzazione elenco di un oggetto ObjectList.
HeaderTemplate Il rendering del modello dell'intestazione viene eseguito all'inizio dell'elenco. In modalità di impaginazione il rendering dell'intestazione viene eseguito su ogni pagina.
FooterTemplate Il rendering del modello del piè di pagina viene eseguito alla fine dell'elenco. In modalità di impaginazione il rendering del piè di pagina viene eseguito su ogni pagina.
ItemDetailsTemplate Questo modello sostituisce il rendering della visualizzazione Dettagli/comandi per un oggetto ObjectList.
ItemTemplate Il rendering del modello degli elementi viene eseguito per ogni elemento dell'elenco.
SeparatorTemplate Il modello separatore separa due elementi.

Nota   Soltanto il modello ItemsDetails influisce sulla visualizzazione Dettagli/comandi. Se si desidera applicare un modello a tutte le visualizzazioni, sarà necessario specificare una visualizzazione ItemsDetails per la visualizzazione Dettagli/comandi e uno degli altri modelli per la visualizzazione elenco.

Comportamento specifico del dispositivo per il linguaggio HTML

Sui dispositivi HTML viene inizialmente eseguito il rendering dell'elenco oggetti come una tabella con ogni elemento dell'elenco, ovvero l'oggetto, rappresentato da un collegamento. Per impostazione predefinita, questo collegamento è un valore associato alla prima colonna nel dataset. Se la proprietà LabelField è impostata, il collegamento sarà un valore associato al campo specificato da questa proprietà. È possibile modificare questo comportamento in modo che l'elemento iniziale dell'elenco sia semplicemente un'etichetta e in modo che venga visualizzato un ulteriore collegamento "Altro". Facendo clic su Altro" l'utente può visualizzare in un elenco oggetti ulteriori dettagli relativi a un oggetto particolare. Sarà possibile per l'utente, ad esempio, visualizzare una tabella in cui sono elencati i valori e titoli dei campi insieme a tutti i comandi associati all'elemento.

Diversamente, se la proprietà TableFields è impostata e il dispositivo è abilitato alla modalità di visualizzazione tabella, ogni elemento dell'elenco verrà rappresentato da una riga della tabella con tutti i campi della tabella specificati in una colonna seguiti da un collegamento facoltativo con etichetta "Altro". È possibile eseguire il rendering dell'etichetta dell'elemento o della prima colonna dell'elemento nella visualizzazione tabella come un collegamento ipertestuale.

La scelta dei collegamenti da visualizzare e la modalità di elaborazione di tali collegamenti dipendono dalla possibilità di visualizzare campi aggiuntivi dell'elemento e dalla definizione di un comando predefinito.

Nella tabella riportata di seguito viene fornito un riepilogo di questo comportamento.

Comandi definiti Comando predefinito Campi aggiuntivi Comportamento
No No No Il contenuto di cui è stato eseguito il rendering è statico.
No No Gli elementi sono visualizzati come collegamenti ipertestuali. Se si fa clic su un collegamento ipertestuale, verranno visualizzati i dettagli relativi all'elemento.
No(*) No Gli elementi sono visualizzati come collegamenti ipertestuali. Se si fa clic su un collegamento ipertestuale, verrà generato un comando predefinito.
No(*) Gli elementi sono visualizzati come collegamenti ipertestuali. Se si fa clic su un collegamento ipertestuale, verrà generato un comando predefinito.
Vengono visualizzati ulteriori collegamenti. Se si fa clic su un collegamento ipertestuale, verranno visualizzati i dettagli relativi all'elemento.
No Sì o No Gli elementi sono visualizzati come collegamenti ipertestuali. Se si fa clic su un collegamento ipertestuale, verranno visualizzati i dettagli relativi all'elemento.
No Gli elementi sono visualizzati come collegamenti ipertestuali. Se si fa clic su un collegamento ipertestuale, verranno visualizzati i dettagli relativi all'elemento.
Sì o No Gli elementi sono visualizzati come collegamenti ipertestuali. Se si fa clic su un collegamento ipertestuale, verrà generato un comando predefinito. Vengono visualizzati ulteriori collegamenti. Se si fa clic su un collegamento ipertestuale, verranno visualizzati i dettagli relativi all'elemento.

Nella tabella precedente vengono utilizzate le seguenti intestazioni di colonna:

  • Comandi definiti indica se i comandi sono definiti nell'elenco oggetti. Un asterisco (*) indica che non è definito alcun comando diverso dal comando predefinito.
  • Comando predefinito indica se è stato definito un comando predefinito impostando la proprietà DefaultCommand.
  • Campi aggiuntivi specifica se nell'elenco oggetti esistono campi aggiuntivi definiti non visualizzati nella visualizzazione elenco.

Nella visualizzazione Dettagli, se disponibile, è presente una tabella in cui sono elencati i valori e titoli dei campi insieme a tutti comandi associati all'elemento e un collegamento con etichetta "Indietro" per tornare alla visualizzazione elenco.

Comportamento specifico del dispositivo per il linguaggio WML

Sui dispositivi WML viene inizialmente eseguito il rendering dell'elenco oggetti come un elenco di selezione con ogni elemento rappresentato dalla relativa etichetta. Selezionando l'elemento, sarà possibile per l'utente visualizzare un menu con i comandi per l'elemento, incluso un collegamento con etichetta "Dettagli". Facendo clic su "Dettagli", l'utente potrà visualizzare tutti i valori e titoli dei campi.

Esempio

Nell'esempio riportato di seguito viene utilizzato un controllo ObjectList per eseguire il rendering di un elenco di elementi in un negozio di alimentari. L'utente può visualizzare i dettagli relativi ai singoli elementi e ha accesso a comandi quali Reserve e Buy.

<%@ Page Inherits= "System.Web.UI.MobileControls.MobilePage"
    Language="VB" %>
<%@ Register TagPrefix="mobile"
    Namespace="System.Web.UI.MobileControls"
    Assembly="System.Web.Mobile" %>

<script language="vb" runat="server">

Public Class GroceryItem
   private _department, _item, _status As String

   Public Sub New( department As String, item As String, status As String)
      _department = department
      _item = item
      _status = status
   End Sub

   Public ReadOnly Property Department as String
      Get
         Return _department
      End Get
   End Property
   Public ReadOnly Property Item as String
      Get
         Return _item
      End Get
   End Property
   Public ReadOnly Property Status as String
      Get
         Return _status
      End Get
   End Property
End Class

Public Sub Page_Load(o As Object, e As EventArgs)
   If Not IsPostBack Then
      Dim arr As New ArrayList()
      arr.Add (New GroceryItem ("Bakery", "French Rolls", "On Sale"))
      arr.Add (New GroceryItem ("Dairy", "Eggnog", "Half price"))
      arr.Add (New GroceryItem ("Produce", "Apples", "A dollar a bushel"))

      List1.DefaultCommand = "Default"
      List1.MoreText       = "Click for Details"
      List1.DataSource = arr
      List1.DataBind
   End If
End Sub

Public Sub List1_Click(sender As Object, e As ObjectListCommandEventArgs)
   If e.CommandName = "Reserve" Then
      ActiveForm = Form2
   ElseIf e.CommandName = "Buy"
      ActiveForm = Form3
   Else
      ActiveForm = Form4
   End If
End Sub

</script>

<mobile:Form id="Form1" runat="server" BackColor="LightBlue">
   <mobile:ObjectList id="List1" runat="server"
         LabelField="item"
         OnItemCommand="List1_Click">
      <Command Name="Reserve" Text="Reserve"/>
      <Command Name="Buy" Text="Buy"/>
   </mobile:ObjectList>
</mobile:Form>

<mobile:Form id="Form2" runat="server" BackColor="LightBlue">
   <mobile:Label id="ResLabel" runat="server"
        text="Sale item reservation system coming soon!" />
   <mobile:Link id="ResLink" NavigateURL="#Form1" runat="server" text="Return" />
</mobile:Form>

<mobile:Form id="Form3" runat="server" BackColor="LightBlue">
   <mobile:Label id="BuyLabel" runat="server"
        text="Online purchasing system coming soon!" />
   <mobile:Link id="BuyLink" NavigateURL="#Form1" runat="server" text="Return" />
</mobile:Form>

<mobile:Form id="Form4" runat="server" BackColor="LightBlue">
   <mobile:Label id="DefLabel" runat="server"
        text="Detailed descriptions of the items will be here soon!" />
   <mobile:Link id="DefLink" NavigateURL="#Form1" runat="server" text="Return" />
</mobile:Form>
[C#]
<%@ Page Inherits= "System.Web.UI.MobileControls.MobilePage"
    Language="C#" %>
<%@ Register TagPrefix="mobile"
    Namespace="System.Web.UI.MobileControls"
    Assembly="System.Web.Mobile" %>

<script language="c#" runat="server">

class GroceryItem
{
   private String _department, _item, _status;

   public GroceryItem(string department, string item, string status)
   { 
      _department = department;
      _item = item;
      _status = status;
   }

   public String Department { get { return _department; } }
   public String Item { get { return _item; } }
   public String Status { get { return _status; } }
}

public void Page_Load(Object o, EventArgs e)
{
   if (!IsPostBack)
   {
      ArrayList arr = new ArrayList();
      arr.Add (new GroceryItem ("Bakery", "French Rolls", "On Sale"));
      arr.Add (new GroceryItem ("Dairy", "Eggnog", "Half price"));
      arr.Add (new GroceryItem ("Produce", "Apples", "A dollar a bushel"));

      List1.DefaultCommand = "Default";
      List1.MoreText       = "Click for Details";
      List1.DataSource = arr;
      List1.DataBind ();
   }
}

public void List1_Click(Object sender, ObjectListCommandEventArgs e)
{
   if (e.CommandName == "Reserve")
   {
      ActiveForm = Form2;
   }
   else if (e.CommandName == "Buy")
   {
      ActiveForm = Form3;
   }
   else
   {
      ActiveForm = Form4;
   }
}

</script>

<mobile:Form id="Form1" runat="server" BackColor="LightBlue">
   <mobile:ObjectList id="List1" runat="server"
         LabelField="item"
         OnItemCommand="List1_Click">
      <Command Name="Reserve" Text="Reserve"/>
      <Command Name="Buy" Text="Buy"/>
   </mobile:ObjectList>
</mobile:Form>

<mobile:Form id="Form2" runat="server" BackColor="LightBlue">
   <mobile:Label id="ResLabel" runat="server"
        text="Sale item reservation system coming soon!" />
   <mobile:Link id="ResLink" NavigateURL="#Form1" runat="server" text="Return" />
</mobile:Form>

<mobile:Form id="Form3" runat="server" BackColor="LightBlue">
   <mobile:Label id="BuyLabel" runat="server"
        text="Online purchasing system coming soon!" />
   <mobile:Link id="BuyLink" NavigateURL="#Form1" runat="server" text="Return" />
</mobile:Form>

<mobile:Form id="Form4" runat="server" BackColor="LightBlue">
   <mobile:Label id="DefLabel" runat="server"
        text="Detailed descriptions of the items will be here soon!" />
   <mobile:Link id="DefLink" NavigateURL="#Form1" runat="server" text="Return" />
</mobile:Form>

Output dell'esempio

Nel primo form sono visualizzati i tre elementi con un collegamento alle informazioni aggiuntive:

Quando si fa clic per ottenere ulteriori dettagli per la voce Eggnog, verrà visualizzata la seguente schermata:

Vedere anche

Classe ObjectList | Membri della classe ObjectList | Controllo List | Riferimenti ai controlli