à attribut unique | : <%# custID %> |
Ordres de collecte | <asp:ListBox id="List1" datasource='<%# myArray %>' runat="server"> |
Expression Contact | <%# ( customer.FirstName + " " + customer.LastName ) %> |
La valeur de retour de la méthode | Outstanding Balance : <%# GetBalance(custID) %> |
Bien que la syntaxe ci-dessus ressemble à la syntaxe pratique Response.Write d'ASP (<%= %>), leur comportement est Mais c'est définitivement différent. La syntaxe pratique ASP Response.Write calcule la valeur pendant le traitement de la page, tandis que la syntaxe de liaison de données ASP.NET calcule la valeur uniquement lorsque la méthode DataBind est appelée.
DataBind est une méthode de la page et de tous les contrôles du serveur. Lorsque vous appelez le DataBind du contrôle parent, il appellera tour à tour la méthode DataBind de tous les contrôles enfants. Par exemple, DataList1.DataBind() appellera la méthode DataBind de tous les contrôles du modèle DataList. L'appel de la méthode DataBind de la page -- Page.DataBind() ou simplement l'appel de DataBind() -- provoque l'évaluation de toutes les expressions de liaison de données sur la page. La méthode DataBind est généralement appelée uniquement dans l'événement Page_Load de la page, comme le montre l'exemple suivant.
Dans n'importe quelle section déclarative d'une page .aspx, vous pouvez utiliser une syntaxe de liaison et spécifier le type de données attendu par le runtime pour son évaluation. Les propriétés, expressions et méthodes simples des exemples ci-dessus affichent le contenu textuel à l'utilisateur lors de leur évaluation. Dans ce cas, la valeur de l'expression de liaison de données est de type String. Dans l'exemple de collection ci-dessus, le type de valeur de la syntaxe de liaison de données est la propriété DataSource de ListBox. Vous constaterez que la conversion du type de la valeur dans l’expression de liaison est nécessaire pour produire les résultats souhaités. Par exemple, si count est un entier :
Nombre d'enregistrements : <%# count.ToString() %>
La syntaxe de liaison de données ASP.NET prend en charge la liaison des variables publiques, des propriétés de page et des propriétés d'autres contrôles de la page. L'exemple suivant montre comment établir une liaison avec des variables publiques et des propriétés simples de la page. Veuillez noter que ces valeurs ont été initialisées avant l'appel de DataBind().
<langage de script="VB" runat="serveur">
Sub Page_Load (expéditeur en tant qu'objet, et en tant qu'EventArgs)
Page.DataBind
Fin de la propriété Sub
ReadOnly custID() en tant que chaîne
Obtenir
Retour "ALFKI"
Fin Obtenir
Propriété de fin
Propriété ReadOnly orderCount() en tant qu'entier
Obtenir
Retour 11
Fin Obtenir
Propriété de fin
</script>
<form action="DataBind1_vb.aspx" runat="serveur">
Client : <b><%# custID %></b><br />
Commandes ouvertes : <b><%# orderCount %></b>
</form>
L'exemple suivant montre comment établir une liaison avec une propriété d'un autre contrôle :
<asp:DropDownList id="StateList" runat="server">
<asp:ListItem>CA</asp:ListItem>
…
</asp:DropDownList>
<asp:button ID="Button1" Text="Submit" OnClick="SubmitBtn_Click" runat="server"/>
État sélectionné : <asp:label ID="Label1" text='<%# StateList.SelectedItem.Text %>' runat="server"/>
Les contrôles serveur de type liste (tels que DropDownList, ListBox et HTMLSelect) utilisent des collections comme sources de données. L’exemple suivant montre comment établir une liaison avec un type de collection Common Language Runtime. Ces contrôles ne peuvent être liés qu'à des collections prenant en charge les interfaces Ienumerable, Icollection ou IlistSource. Plus communément, il peut être lié à ArrayList, Hashtable, DataView et DataReader. L'exemple suivant montre comment établir une liaison avec une ArrayList.
Sub Page_Load (expéditeur en tant qu'objet, et en tant qu'EventArgs)
Si ce n'est pas IsPostBack, alors
Dim les valeurs comme ArrayList= new ArrayList()
valeurs.Add("IN")
valeurs.Add("KS")
valeurs.Add("MD")
valeurs.Add("MI")
valeurs.Ajouter ("OU")
valeurs.Add ("TN")
DropDown1.DataSource = valeurs
DropDown1.DataBind
Fin si
End SubL'exemple
suivant montre comment établir une liaison avec un DataView. Veuillez noter que la classe DataView est définie dans l'espace de noms System.Data.
Sub Page_Load (expéditeur en tant qu'objet, et en tant qu'EventArgs)
Si ce n'est pas IsPostBack, alors
Dim dt comme DataTable
Dim dr comme DataRow
Dim i As Integer
'Créer un DataTable
dt = Nouveau tableau de données
dt.Columns.Add(New DataColumn("IntegerValue", GetType(Integer)))
dt.Columns.Add(New DataColumn("StringValue", GetType(String)))
dt.Columns.Add(New DataColumn("DateTimeValue", GetType(DateTime)))
dt.Columns.Add(New DataColumn("BooleanValue", GetType(Boolean)))
'Remplissez quelques données
pour i = 1 à 9
dr = dt.NewRow()
dr(0) = je
dr(1) = "Article" + i.ToString()
dr(2) = DateTime.Now.ToShortTimeString
Si (i Mod 2 <> 0) Alors
dr(3) = Vrai
Autre
dr(3) = Faux
Fin si
'Ajouter des lignes de données à la table dt.Rows.Add(dr)
Suivant
GridView1.DataSource = Nouveau DataView (dt)
GridView1.DataBind()
Fin si
End Sub
L'exemple suivant montre comment établir une liaison avec une table de hachage.
Sub Page_Load (expéditeur en tant qu'objet, et en tant qu'EventArgs)
Si ce n'est pas IsPostBack, alors
Dim h As Hashtable = new Hashtable()
h.Ajouter ("clé1", "valeur1")
h.Ajouter ("clé2", "valeur2")
h.Add ("key3", "value3")
MyDataList.DataSource = h
MyDataList.DataBind
Fin si
End Sub
Souvent, vous souhaiterez peut-être traiter les données avant de les lier à la page ou au contrôle. L'exemple suivant montre comment lier des expressions et des valeurs de retour de méthode.
Sub Page_Load (expéditeur en tant qu'objet, et en tant qu'EventArgs)
Si ce n'est pas IsPostBack, alors
Dim les valeurs comme ArrayList = nouvelles
valeurs ArrayList().Add (0)
valeurs.Ajouter (1)
valeurs.Ajouter (2)
valeurs.Add(3)
valeurs.Add(4)
valeurs.Add(5)
valeurs.Ajouter (6)
DataList1.DataSource = valeurs
DataList1.DataBind
Fin si
Fin de la sous
-fonction EvenOrOdd (nombre sous forme d'entier) sous forme de chaîne
Si (numéro Mod 2 <> 0) Alors
Renvoie "Imparable"
Autre
Renvoie "Même"
Fin si
Fonction de fin
<asp:DataList id="DataList1" ……>
<Modèle d'élément>
Valeur numérique : <%# Container.DataItem %>
Pair/Impair : <%# EvenOrOdd(Container.DataItem) %>
</Modèle d'élément>
</asp:DataList>
Le composant ASP.NET Page Framework fournit une méthode statique qui évalue une expression de liaison de données à liaison tardive et formate éventuellement le résultat sous forme de chaîne. Dans ce cas, DataBinder.Eval est pratique car il élimine une grande partie du travail de conversion explicite que le développeur doit effectuer pour convertir l'estimation dans le type de données souhaité. Cela est particulièrement utile lorsqu'il existe des contrôles liés aux données dans une liste basée sur un modèle, car dans ce cas, les lignes de données et les champs de données doivent généralement être convertis.
Jetez un œil à l'exemple suivant, qui doit afficher un entier sous forme de chaîne monétaire. Dans la syntaxe de liaison de données ASP.NET standard, vous devez d'abord convertir le type de la ligne de données pour récupérer le champ de données IntegerValue. Passez-le ensuite en paramètre à la méthode String.Format.
<%# String.Format("{0:c}", (CType(Container.DataItem, DataRowView)("IntegerValue"))) %>
Cette syntaxe est très compliquée et pas facile à retenir. En revanche, DataBinder.Eval est une méthode simple avec seulement trois paramètres : le conteneur de dénomination de l'élément de données, le nom du champ de données et la chaîne de format. Dans les contrôles basés sur un modèle (tels que FormView, GridView, DetailsView, DataList ou Repeater), le conteneur nommé est Container.DataItem. Page est un autre conteneur nommé qui peut également être utilisé pour DataBinder.Eval. Comme nous l'avons mentionné précédemment, ASP.NET 2.0 fournit une nouvelle syntaxe simplifiée (Eval) pour DataBinder.Eval, que vous pouvez utiliser dans les modèles de contrôle liés aux données pour analyser automatiquement Container.DataItem.
<%# DataBinder.Eval(Container.DataItem, "IntegerValue", "{0:c}") %>
<%# Eval("IntegerValue", "{0:c}") %>
Le paramètre de chaîne de format est facultatif. Si ce paramètre est omis, DataBinder.Eval renverra une valeur de type Object, comme indiqué ci-dessous :
<%# CType(DataBinder.Eval(Container.DataItem, "BoolValue"), Boolean) %> Ce
à quoi nous devons prêter attention, c'est que , avec la norme Par rapport à la syntaxe de liaison de données, DataBinder.Eval affectera considérablement les performances car il utilise une réflexion de liaison paresseuse. Veuillez utiliser DataBinder.Eval judicieusement, surtout si vous n'avez pas besoin de formater la chaîne.