Vue d'ensemble de la liaison de données ASP.NET

Traductions disponibles Traductions disponibles
Numéro d'article: 307860 - Voir les produits auxquels s'applique cet article
Cet article se réfère aux espaces de noms de la bibliothèque de classes Microsoft .NET Framework suivants :
  • System.Data
  • System.Data.SqlClient
Agrandir tout | Réduire tout

Sommaire

Résumé

Cet article présente la liaison de données ASP.NET.

Pour d'autres vues d'ensemble d'ASP.NET, reportez-vous à l'article suivant dans la Base de connaissances Microsoft :
305140 Guide ASP.NET

Plus d'informations

La liaison de données ASP.NET vous permet de lier n'importe quel contrôle serveur à de simples propriétés, collections, expressions et/ou méthodes. Avec la liaison de données, vous disposez de davantage de flexibilité lors de l'utilisation des données d'une base de données ou d'autres moyens.

Cet article s'articule autour des rubriques de liaison de données suivantes :

Principes de base sur la liaison de données

Syntaxe <%# %>

ASP.NET présente une nouvelle syntaxe déclarative, <%# %>. Cette syntaxe est la base même de l'utilisation de la liaison de données dans une page .aspx. Toutes les expressions de liaison de données doivent être contenues entre ces caractères. La liste suivante inclut des exemples de liaison de données simples à partir de plusieurs sources :
  • Propriété simple (syntaxe pour un client) :
    <%# custID %>
    					
  • Collection (syntaxe pour une commande) :
    <asp:ListBox id="List1" datasource='<%# myArray %>' runat="server">
    					
  • Expression (syntaxe pour un contact) :
    <%# ( customer.First Name + " " + customer.LastName ) %>
    					
  • Résultat de la méthode (syntaxe pour le restant dû) :
    <%# GetBalance(custID) %>
    					
Dans les exemples précédents, les balises <% #%> incorporées indiquent l'emplacement des informations d'une source de données spécifique dans la page .aspx. L'exemple de liaison de données suivant utilise un contrôle de serveur Web TextBox :
<asp:textbox id=txt text="<%# custID %>" runat=server />
				
Pour plus d'informations sur la syntaxe de la liaison de données, reportez-vous à la rubrique suivante dans la documentation du Kit de développement logiciel .NET Framework (SDK) :
Syntaxe d'expression de la liaison de données
http://msdn.microsoft.com/fr-fr/library/bda9bbfx(vs.71).aspx

Page.DataBind() et Control.DataBind()

Une fois les sources de données spécifiques déterminées et définies pour les objets dans la page .aspx, vous devez lier les données à ces sources de données. Vous pouvez utiliser la méthode Page.DataBind ou Control.DataBind pour effectuer cette liaison.

Les deux méthodes fonctionnent de la même façon. La principale différence réside dans le fait que toutes les sources de données sont liées à leurs contrôles serveur une fois que la méthode Page.DataBind est appelée. Aucune donnée n'est affichée dans le contrôle tant que vous n'appelez pas de manière explicite la méthode DataBind du contrôle serveur Web ou la méthode Page.DataBind au niveau page. En général, la méthode Page.DataBind (ou DataBind) est appelée à partir de l'événement Page_Load.

Pour plus d'informations sur la méthode DataBind, reportez-vous à la rubrique suivante dans la documentation du Kit de développement logiciel .NET Framework (SDK) : Control.DataBind Method (Méthode Control.DataBind)
http://msdn.microsoft.com/fr-fr/library/w5e5992d.aspx

Contrôles de liste liés aux données

Les contrôles de liste sont des contrôles serveur Web spéciaux qui assurent la liaison aux collections. Ils permettent d'afficher des lignes de données dans un format de modèle personnalisé. Tous les contrôles de liste exposent les propriétés DataSource et DataMember, utilisées pour la liaison aux collections.

Ces contrôles peuvent lier leur propriété DataSource à toute collection qui prend en charge l'interface IEnumerable, ICollectionou IListSource.

Contrôle Repeater

Le contrôle Repeater est une liste liée aux données et basée sur des modèles. Le contrôle Repeater n'a pas de mise en forme propre, autrement dit il ne dispose d'aucun style ni mise en page intégré. Par conséquent, vous devez déclarer de manière explicite la mise en page, la mise en forme, et les balises de style HTML dans les modèles du contrôle.

Les exemples de code suivants montrent comment vous pouvez utiliser un contrôle de liste, le contrôle Repeater, pour afficher des données :

REMARQUE : vous devez modifier les paramètres de la chaîne de connexion en fonction de votre environnement.

Visual Basic .NET
<%@ Page Language="vb" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>

<script runat="server">
Sub Page_Load(sender As Object, e As EventArgs)

   Dim cnn As SqlConnection = New SqlConnection("server=(local);" & _
                                                "database=pubs;Integrated Security=SSPI")
   Dim cmd As SqlDataAdapter = New SqlDataAdapter("select * from authors", cnn)
   Dim ds As DataSet = New DataSet()
   cmd.Fill(ds)
   Repeater1.DataSource = ds
   Repeater1.DataBind()

End Sub
</script>
<html>
<body>
   <form id="Form1" method="post" runat="server">
      <asp:Repeater id="Repeater1" runat="server">
         <ItemTemplate>
         <%# DataBinder.Eval(Container.DataItem,"au_id") %><br>
	 </ItemTemplate>
      </asp:Repeater>
   </form>
</body>
</html>
				
Visual C# .NET
<%@ Page language="c#" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>

<script runat="server">
void Page_Load(Object sender, EventArgs e) 
{ 
   SqlConnection cnn = new 
       SqlConnection("server=(local);database=pubs;Integrated Security=SSPI"); 
   SqlDataAdapter da = new SqlDataAdapter("select * from authors", cnn); 
   DataSet ds = new DataSet(); 
   da.Fill(ds, "authors"); 
   Repeater1.DataSource = ds.Tables["authors"];
   Repeater1.DataBind();
}
</script>
<html>
<body>
   <form id="WebForm2" method="post" runat="server">
      <asp:Repeater id="Repeater1" runat="server">
         <ItemTemplate>
         <%# DataBinder.Eval(Container.DataItem,"au_id") %><br>
    	 </ItemTemplate>
      </asp:Repeater>
   </form>
</body>
</html>
				
Visual J# .NET
<%@ Page language="VJ#" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>

 <script runat="server">
void Page_Load(Object sender, EventArgs e) 
{ 
    SqlConnection cnn = new SqlConnection("server=(local);database=pubs;Integrated
         Security=SSPI"); 
    SqlDataAdapter da = new SqlDataAdapter("select * from authors", cnn); 
    DataSet ds = new DataSet(); 
    da.Fill(ds, "authors"); 
    DataTableCollection dtc = ds.get_Tables();
    int index = dtc.IndexOf("authors");
    Repeater1.set_DataSource(dtc.get_Item(index));
    Repeater1.DataBind();
}
</script>
<html>
<body>
   <form id="WebForm2" method="post" runat="server">
      <asp:Repeater id="Repeater1" runat="server">
         <ItemTemplate>
         <%# DataBinder.Eval(Container.DataItem,"au_id") %><br>
             </ItemTemplate>
      </asp:Repeater>
   </form>
</body>
</html>
				
Pour plus d'informations sur le contrôle Repeater, reportez-vous à la rubrique suivante dans la documentation du Kit de développement logiciel .NET Framework (SDK) :
Contrôle serveur Web Repeater
http://msdn.microsoft.com/fr-fr/library/x8f2zez5.aspx

Contrôle DataList

La classe DataList est une liste riche en fonctionnalités, basée sur des modèles et liée aux données. Vous pouvez modifier les modèles pour personnaliser ce contrôle. À la différence du contrôle Repeater, DataList prend en charge le rendu directionnel et peut éventuellement effectuer un rendu dans une table HTML au moment de l'exécution.

Pour plus d'informations sur le contrôle DataList, reportez-vous à la rubrique suivante dans la documentation du Kit de développement logiciel .NET Framework (SDK) :
Contrôle serveur Web DataList
http://msdn.microsoft.com/fr-fr/library/9cx2f3ks(VS.85).aspx

Contrôle DataGrid

Le contrôle DataGrid est une grille complète, à plusieurs colonnes et liée aux données. Pour personnaliser la disposition de colonnes individuelles dans DataGrid, vous pouvez définir le type de colonne avec la valeur « templated » (basé sur des modèles) et modifier les modèles de la colonne. Le contrôle DataGrid peut s'afficher sans modèles, ce qui le rend idéal pour les scénarios de rapport. Le contrôle DataGrid prend également en charge la sélection, la modification, la suppression, la pagination et le tri par colonne et colonnes de bouton.

Pour plus d'informations sur le contrôle DataGrid, reportez-vous à la rubrique suivante dans la documentation du Kit de développement logiciel .NET Framework (SDK) :
Contrôle serveur Web DataGrid
http://msdn.microsoft.com/fr-fr/library/aa710742(VS.71).aspx

Accès aux données

Cette section explique comment accéder aux données à partir d'une base de données et comment les lier aux contrôles de liste. Vous pouvez utiliser la classe DataSet ou DataReader pour obtenir des données à partir d'une base de données.

Classe DataSet

Une classe DataSet contient une représentation complète des données, y compris la structure de la table, les relations entre les tables, et le classement des données. Les classes DataSet sont assez souples pour stocker toute sorte d'informations d'une base de données dans un fichier XML (Extensible Markup Language). Les classes DataSet sont sans état, autrement dit vous pouvez les passer du client au serveur sans bloquer les ressources de connexion du serveur. Le code suivant montre comment utiliser une classe DataSet pour lier les données à un contrôle :

REMARQUE : vous devez modifier les paramètres de la chaîne de connexion en fonction de votre environnement.

Visual Basic .NET
Dim cnn As SqlConnection = New SqlConnection("server=(local);" & _
                                             "database=pubs;Integrated Security=SSPI")
Dim cmd As SqlDataAdapter = New SqlDataAdapter("select * from authors", cnn)
Dim ds As DataSet = New DataSet()
cmd.Fill(ds)
MyRepeater.DataSource = ds
MyRepeater.DataBind() 
				
Visual C# .NET
SqlConnection cnn = new SqlConnection("server=(local);
                                       database=pubs;Integrated Security=SSPI"); 
SqlDataAdapter da = new SqlDataAdapter("select * from authors", cnn); 
DataSet ds = new DataSet(); 
da.Fill(ds);
MyRepeater.DataSource = ds;
MyRepeater.DataBind(); 
				
Visual J# .NET
SqlConnection cnn = new SqlConnection("server=(local);
                                       database=pubs;Integrated Security=SSPI"); 
SqlDataAdapter da = new SqlDataAdapter("select * from authors", cnn); 
DataSet ds = new DataSet(); 
da.Fill(ds); 
MyRepeater.set_DataSource(ds);
MyRepeater.DataBind();
				
Pour plus d'informations sur la classe DataSet, reportez-vous à la rubrique suivante dans la documentation du Kit de développement logiciel .NET Framework (SDK) (en anglais) :
Classe DataSet
http://msdn.microsoft.com/fr-fr/library/system.data.dataset(vs.71).aspx

Classe DataReader

Par contre, si vous devez seulement afficher (sans les modifier) les données à restituer, une classe DataReader peut s'avérer être une meilleure solution. Par exemple, il est préférable d'utiliser une classe DataReader pour un contrôle DropDownList car DataReader est un curseur de données avant uniquement. Le code suivant montre comment utiliser une classe SqlDataReader pour lier les données à un contrôle :

Visual Basic .NET
Dim cnn As SqlConnection = New SqlConnection("server=(local);" & _
                                             "database=pubs;Integrated Security=SSPI")
Dim cmd As SqlCommand = New SqlCommand("select * from authors", cnn)

cnn.Open()
MyRepeater.DataSource = cmd.ExecuteReader(CommandBehavior.CloseConnection)
MyRepeater.DataBind()
				
Visual C# .NET
SqlConnection cnn = new SqlConnection("server=(local);
                                       database=pubs;Integrated Security=SSPI");
SqlCommand cmd = new SqlCommand("select * from authors", cnn);

cnn.Open();
MyRepeater.DataSource = cmd.ExecuteReader(CommandBehavior.CloseConnection);
MyRepeater.DataBind();
				
Visual J# .NET
SqlConnection cnn = new SqlConnection("server=(local);
                                       database=pubs;Integrated Security=SSPI"); 

SqlCommand cmd = new SqlCommand("select * from authors", cnn); 

cnn.Open();
MyRepeater.set_DataSource(cmd.ExecuteReader(CommandBehavior.CloseConnection));
MyRepeater.DataBind();
				
Pour plus d'informations sur la classe SqlDataReader et l'accès aux données avec ASP.NET, reportez-vous aux rubriques suivantes dans la documentation du Kit de développement logiciel .NET Framework (SDK) (en anglais) :
Classe SqlDataReader
http://msdn.microsoft.com/fr-fr/library/system.data.sqlclient.sqldatareader.aspx

Developing High-Performance ASP.NET Applications (Développement d'applications à hautes performances ASP.NET)
http://msdn.microsoft.com/fr-fr/library/5dws599a(vs.71).aspx

Liaison des modèles de contrôle de liste

Vous pouvez utiliser des modèles dans les contrôles de liste pour lier et personnaliser les enregistrements individuels d'une source de données. Cette section comprend trois méthodes décrivant cette procédure.

Méthode DataBinder.Eval

Lorsque la source de données fonctionne avec des données qui sont renvoyées d'une base de données, la source de données peut contenir de nombreuses informations. Vous pouvez utiliser la méthode générique DataBinder.Eval pour renvoyer les données. Dans l'exemple de code suivant, le champ « au_id » est renvoyé de la source de données de l'objet conteneur :
<%# DataBinder.Eval(Container.DataItem,"au_id") %>
				
Pour plus d'informations sur la méthode DataBinder.Eval, reportez-vous à la rubrique suivante dans la documentation du Kit de développement logiciel .NET Framework (SDK) (en anglais) :
Méthode DataBinder.Eval
http://msdn.microsoft.com/fr-fr/library/4hx47hfe.aspx

Cast explicite

Si vous avez besoin de davantage de contrôle, utilisez le cast explicite. Une conversion explicite utilise un mot clé de conversion de type. Ces mots clés se comportent comme des fonctions, si ce n'est que le compilateur génère le code incorporé. Par conséquent, l'exécution est légèrement plus rapide qu'avec un appel de fonction. Les exemples de code suivants utilisent un cast explicite :

Visual Basic .NET
' DataTable as the DataSource
<%# CType(Container.DataItem, System.Data.DataRowView)("au_id") %>

' DataReader as the DataSource
<%# CType(Container.DataItem, System.Data.Common.DbDataRecord)("au_id") %>

' DataReader as the DataSource
<%# CType(Container.DataItem, System.Data.Common.DbDataRecord)(0) %>
				
Visual C# .NET
// DataTable as the DataSource
<%# ((System.Data.DataRowView)Container.DataItem)["au_id"] %> 

// DataReader as the DataSource
<%# ((System.Data.Common.DbDataRecord)Container.DataItem)["au_id"] %>

// DataReader as the DataSource
<%# ((System.Data.Common.DbDataRecord)Container.DataItem)[0] %>
				
Visual J# .NET
// DataTable as the DataSource
<%# ((System.Data.DataRowView)Container.DataItem)["au_id"] %> 

// DataReader as the DataSource
<%# ((System.Data.Common.DbDataRecord)Container.DataItem)["au_id"] %>

// DataReader as the DataSource
<%# ((System.Data.Common.DbDataRecord)Container.DataItem)[0] %>
				
Notez que les exemples précédents utilisent soit DataTable, qui est un sous-ensemble de DataSet, soit DataReader comme source de données.

Événement ItemDataBound

Vous pouvez également utiliser l'événement ItemDataBound du contrôle pour lier les données. Cet événement se produit lorsqu'un élément est lié au contrôle par les données. L'exemple de code HTML suivant définit un contrôle Repeater avec un ItemTemplate :
<asp:repeater id=rptr runat=server>
   <itemtemplate>
      <asp:label id=lblAuthorID runat=server />
   </itemtemplate>
</asp:repeater>
				
Les méthodes suivantes sont requises dans votre page :

Visual Basic .NET
public Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
  
   'TODO: Retrieve data from a database,
   'and bind the data to a list control.

End Sub

public Sub rptr_OnItemDataBound(ByVal sender As Object, _
ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles rptr.ItemDataBound
   Dim rec As DataRowView
   rec = e.Item.DataItem

   'Make sure that you have the data.
   If Not IsDBNull(rec) Then
      Dim l1 As Label
      l1 = e.Item.FindControl("lblAuthorID")
      l1.Text = rec("au_id").ToString()
   End If
End Sub
				
Visual C# .NET
public void Page_Init(object sender, System.EventArgs e)
{
   rptr.ItemDataBound += new RepeaterItemEventHandler(rptr_OnItemDataBound);
}
public void Page_Load(object sender, System.EventArgs e)
{
   // TODO: Retrieve data from a database,
   // and bind the data to a list control.
}
public void rptr_OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
   System.Data.Common.DbDataRecord rec = (System.Data.Common.DbDataRecord)
                                          e.Item.DataItem;
   if(rec!=null) //Make sure that you have the data.
   {
      Label l1 = (Label)e.Item.FindControl("lblAuthorID");
      l1.Text = rec["au_id"].ToString();
   }
}
				
Visual J# .NET
public void Page_Init(Object sender, System.EventArgs e)
{
            rptr.add_ItemDataBound(new RepeaterItemEventHandler(rptr_OnItemDataBound));
}
private void Page_Load(Object sender, System.EventArgs e)
{
            // TODO: Retrieve data from a database,
            // and bind the data to a list control.
}
public void rptr_OnItemDataBound(Object sender, RepeaterItemEventArgs e)
{
            System.Data.Common.DbDataRecord rec = (System.Data.Common.DbDataRecord)
                                                   e.get_Item().get_DataItem();
            if (rec != null) //Make sure that you have the data.
            {
                        Label l1 = (Label)e.get_Item().FindControl("lblAuthorID");
                        l1.set_Text(((rec.get_Item("au_id")).ToString()));
            }
}
				
Remarque Il s'agit d'un article de « PUBLICATION RAPIDE » rédigé directement au sein du service de support technique Microsoft. Les informations qui y sont contenues sont fournies en l'état, en réponse à des problèmes émergents. En raison du délai rapide de mise à disposition, les informations peuvent contenir des erreurs typographiques et, à tout moment et sans préavis, faire l'objet de révisions. Pour d'autres considérations, consultez les Conditions d'utilisation.

Propriétés

Numéro d'article: 307860 - Dernière mise à jour: vendredi 23 août 2013 - Version: 2.0
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft ASP.NET 1.0
  • Microsoft Visual Basic .NET 2002 Initiation
  • Microsoft Visual C# .NET 2002 Initiation
  • Microsoft Visual J# .NET 2003 Initiation
  • Microsoft ASP.NET 1.1
  • Microsoft Visual Basic .NET 2003 Initiation
  • Microsoft Visual C# .NET 2003 Initiation
Mots-clés : 
kbarttyperoadmap kbdatabinding kbinfo kbservercontrols KB307860
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com