Création d'un objet pour un contrôle List à partir d'un élément de collection
Mise à jour : novembre 2007
Les étapes suivantes montrent comment un contrôle mobile List construit une instance MobileListItem à partir d'un élément de la collection :
Le contrôle vérifie si les propriétés DataTextField ou DataValueField sont définies. Si tel est le cas, le contrôle utilise ces noms de champs pour découvrir les propriétés de l'élément, ainsi que pour définir les propriétés Text et Value de l'instance MobileListItem.
Si les propriétés DataTextField ou DataValueField ne sont pas définies, le contrôle affecte les propriétés Text et Value de l'instance MobileListItem à la représentation sous forme de chaîne de l'élément (via la méthode ToString).
Si un gestionnaire d'événements ItemDataBind est défini, le gestionnaire est appelé. Vous pouvez utiliser ce gestionnaire pour définir les propriétés de l'instance MobileListItem.
Dans un rendu par défaut, le contrôle List représente une instance MobileListItem par sa propriété Text. Dans un rendu basé sur un modèle, ce dernier peut rendre une propriété spécifique de l'instance MobileListItem ou de l'objet associé lié aux données.
Lorsque la propriété ItemsAsLinks est définie, le contrôle List affiche les éléments sous forme de liens hypertexte. La valeur de la propriété Text devient le texte de lien, et la valeur de la propriété Value devient l'URL cible.
Gestion de la sélection
Si votre liste est complexe, par exemple dans le cas d'un tableau d'objets, vous ne pouvez pas accéder directement aux membres de l'élément sélectionné via la sélection. Cependant, si vous créez votre application de manière appropriée, vous pouvez accéder à l'objet associé. Si vous créez un groupe d'objets pour remplir votre liste, vous pouvez faire de ce groupe un tableau global, puis gérer la valeur retournée sous forme d'index dans le tableau, comme le montre l'exemple de code suivant.
<%@ Page Language="VB"
Inherits="System.Web.UI.MobileControls.MobilePage" %>
<%@ Register TagPrefix="mobile"
Namespace="System.Web.UI.MobileControls"
Assembly="System.Web.Mobile" %>
<script >
Private customers(3) As Person
Private Class Person
Private _Name, _Nickname, _Initials As String
Public Sub New(ByVal name As String, _
ByVal nickname As String, ByVal initials As String)
Me._Name = name
Me._Nickname = nickname
Me._Initials = initials
End Sub
Public ReadOnly Property Name() As String
Get
Return _Name
End Get
End Property
Public ReadOnly Property Nickname() As String
Get
Return _Nickname
End Get
End Property
Public ReadOnly Property Initials() As String
Get
Return _Initials
End Get
End Property
End Class
Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
ReDim customers(2)
customers(0) = New Person("George Washington", "George", "GW")
customers(1) = New Person("Abraham Lincoln", "Abe", "AL")
customers(2) = New Person("Theodore Roosevelt", "Teddy", "TR")
If (Not IsPostBack) Then
' Bind the array to the list.
List1.DataSource = customers
List1.DataTextField = "Name"
List1.DataBind()
End If
End Sub
Protected Sub List1_ItemCommand(ByVal sender As Object, _
ByVal e As ListCommandEventArgs)
Dim selectedPerson As Person = customers(e.ListItem.Index)
Label1.Text = String.Format("{0} (AKA {1}), initials {2}", _
selectedPerson.Name, selectedPerson.Nickname, _
selectedPerson.Initials)
ActiveForm = Form2
End Sub
Protected Sub Command1_Click(ByVal sender As Object, _
ByVal e As EventArgs)
Me.ActiveForm = Me.Form1
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<body>
<mobile:form id="Form1" >
<mobile:List ID="List1" Runat="server" OnItemCommand="List1_ItemCommand">
</mobile:List>
</mobile:form>
<mobile:Form ID="Form2" Runat="server">
<mobile:Label ID="Label1" >Label</mobile:Label>
<mobile:Command ID="Command1" Runat="server" OnClick="Command1_Click">Return to Form1</mobile:Command>
</mobile:Form>
</body>
</html>
<%@ Page Language="C#"
Inherits="System.Web.UI.MobileControls.MobilePage" %>
<%@ Register TagPrefix="mobile"
Namespace="System.Web.UI.MobileControls"
Assembly="System.Web.Mobile" %>
<script >
private Person[] customers = new Person[3];
private class Person
{
private String _Name, _Nickname, _Initials;
public Person(String name, String nickname, String initials)
{
this._Name = name;
this._Nickname = nickname;
this._Initials = initials;
}
public String Name { get { return _Name; } }
public String Nickname { get { return _Nickname; } }
public String Initials { get { return _Initials; } }
}
private void Page_Load(object sender, System.EventArgs e)
{
customers[0] = new Person("George Washington", "George", "GW");
customers[1] = new Person("Abraham Lincoln", "Abe", "AL");
customers[2] = new Person("Theodore Roosevelt", "Teddy", "TR");
if(!IsPostBack)
{
// Bind the array to the list.
List1.DataSource = customers;
List1.DataTextField = "Name";
List1.DataBind();
}
}
private void List1_ItemCommand(object sender,
ListCommandEventArgs e)
{
Person selectedPerson = customers[e.ListItem.Index];
Label1.Text = String.Format("{0} (AKA {1}), initials {2}",
selectedPerson.Name, selectedPerson.Nickname,
selectedPerson.Initials);
ActiveForm = Form2;
}
protected void Command1_Click(object sender, EventArgs e)
{
this.ActiveForm = this.Form1;
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<body>
<mobile:form id="Form1" >
<mobile:List ID="List1" Runat="server" OnItemCommand="List1_ItemCommand">
</mobile:List>
</mobile:form>
<mobile:Form ID="Form2" Runat="server">
<mobile:Label ID="Label1" >Label</mobile:Label>
<mobile:Command ID="Command1" Runat="server" OnClick="Command1_Click">Return to Form1</mobile:Command>
</mobile:Form>
</body>
</html>