Share via


ObjectList Control

Provides a feature-rich view of a list of data objects. The ObjectList control inherits much of its behavior, including support for templated rendering by using device template sets, and internal pagination, from the List control. For more information, see the Template Sets and Templated Controls or Pagination documentation. The ObjectList control differs from the List control in the following ways.

Features ObjectList control List control
Data bound Strictly data bound. The only way to add items to an object list in a control is by binding the list to a data source. Supports adding items statically, programmatically, and through data binding.
Multiple-property view Allows you to view multiple properties, or fields, associated with each item. Depending on device characteristics, the control can be rendered as a table that displays more than one property of each object, or UI can be provided to allow the user to view additional properties of an object. Displays one property of each item.
Multiple item commands Allows you to associate multiple commands with each item. The set of commands for an item can be either shared among all items or unique to the item. Supports a default command for each item.
Internal pagination and templating Supported; however, if you are viewing an object with a lot of information, use a list with a separate form for item details. Supported.

This table compares the features of the ObjectList and List controls. However, it is important to understand that although both of these controls support custom pagination and templating, the SelectionList class does not support pagination.

For more information about using the ObjectList control, see the Designing and Rendering Concepts for Mobile Controls documentation.

Mobile Controls Syntax

Required properties, defaults, and code-featured elements are noted in bold type.

<mobile:ObjectList
   runat="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>

Static fields and commands can be declared as item child elements.

Containment Rules

The following controls can contain an ObjectList control.

Control Comments
System.Web.UI.MobileControls.Form Can contain any number of ObjectList controls.
System.Web.UI.MobileControls.Panel Can contain any number of ObjectList controls.

An ObjectList control can contain the following controls.

Control Comments
System.Web.UI.MobileControls.DeviceSpecific 0 or 1 DeviceSpecific controls can be contained in an ObjectList control.
System.Web.UI.MobileControls.ObjectList.Field Any number of Field controls can be contained in an ObjectList control.
System.Web.UI.MobileControls.ObjectList.Command Any number of Command controls can be contained in an ObjectList control.

Device Templates

For information about specifying templates for the ObjectList control, see the Device-Specific Rendering documentation. The following table contains a list of templates that you can use with the ObjectList control.

Template Description
AlternatingItemTemplate This template renders even-numbered items in a list view of an ObjectList object.
HeaderTemplate The header template is rendered at the beginning of the list. In paginated mode, the header is rendered on each page.
FooterTemplate The footer template is rendered at the end of the list. In paginated mode, the footer is rendered on each page.
ItemDetailsTemplate This template replaces the rendering of the commands/details view for an ObjectList object.
ItemTemplate The item template is rendered for each list item.
SeparatorTemplate The separator template separates items from each other.

Note   Only the ItemsDetails template affects the commands/details view. If you want to apply a template to all views, you must specify an ItemsDetails view for the commands/details view and one of the other templates for the list view.

Device-Specific Behavior - HTML

On HTML devices, the object list is initially rendered as a table, with each list item (object) represented by a link. By default, this link is a value associated with the first column in the dataset. If the LabelField Property is set, the link is a value associated with the field specified by this property. It is possible to change this behavior so that the initial list item is simply a label and a further "More" link" displayed. By clicking "More", the user can view more details about a particular object in an object list. For example, the user can see a table that lists each field title and value, along with all the commands associated with the item.

If the TableFields property is set, and the device is appropriate for showing a table view, each list item is instead represented by a table row, with each specified table field in a column, followed by an optional link labeled "More". The item label (or the first column of the item in table view) can itself be rendered as a hyperlink.

The decisions on what links to show, and how to process them, depends on whether additional item fields can be shown, and whether a default command is defined.

The following table summarizes this behavior.

Commands defined Default command Additional fields Behavior
No No No Rendered content is static.
No No Yes Items are shown as hyperlinks. Clicking one shows item details.
No(*) Yes No Items are shown as hyperlinks. Clicking one raises a default command.
No(*) Yes Yes Items are shown as hyperlinks. Clicking one raises a default command.
More links are shown. Clicking one shows item details.
Yes No Yes or No Items are shown as hyperlinks. Clicking one shows item details.
Yes No Yes Items are shown as hyperlinks. Clicking one shows item details.
Yes Yes Yes or No Items are shown as hyperlinks. Clicking one raises a default command. More links are shown. Clicking one shows item details.

The preceding table uses the following column headings:

  • Commands Defined indicates whether commands are defined in the object list. An asterisk (*) means that no commands other than the default command are defined.
  • Default Command indicates whether a default command has been defined by setting the DefaultCommand property.
  • Additional Fields specifies whether there are additional fields defined in the object list that are not shown in the list view.

The details view, if one is shown, has a table that lists each field title and value, along with all the commands associated with the item, and a link labeled "Back" to return to the list view.

Device-Specific Behavior - WML

On WML devices, the object list is initially rendered as a select list, with each item represented by its label. By selecting the item, the user can view a menu of commands for the item, including a link labeled "Details". By clicking "Details", the user can view each field title and value.

Example

The following example uses an ObjectList control to render a list of grocery store items. The user can view details about individual items, and has access to commands such as Reserve and 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>

Example Output

The first form displays the three items, with a link for additional information:

When you click "Click for Details" for the Eggnog entry, you get the following screen:

See Also

ObjectList Class | ObjectList Class Members | List Control | Control Reference