Procédure pas à pas : récupération, mise à jour, insertion et suppression de données avec les contrôles LinqDataSource et DetailsView
Mise à jour : novembre 2007
Dans cette procédure pas à pas, vous aller créer une simple table de base de données et une page Web qui utilise le contrôle LinqDataSource. La page Web permet aux utilisateurs de récupérer, mettre à jour, insérer et supprimer des données de la table de base de données. Vous allez utiliser un contrôle DetailsView pour afficher les données sur la page. Le contrôle LinqDataSource vous permet d'exécuter toutes ces opérations sans écrire d'instructions Select, Update, Insert ou Delete.
Vous utiliserez le Concepteur Objet/Relationnel pour créer une classe qui représente la table de la base de données contenant les valeurs. Le contrôle LinqDataSource agira sur cette classe générée afin de récupérer, de mettre à jour, d'insérer et de supprimer des données.
Composants requis
Pour implémenter les procédures dans votre propre environnement de développement, vous avez besoin des éléments suivants :
Visual Studio 2008 ou Visual Web Developer Express
SQL Server Express Edition installé sur votre ordinateur. Si SQL Server est installé, vous pouvez l'utiliser, mais vous devrez apporter de légères modifications à certaines des procédures.
avoir un site Web ASP.NET.
Création d'une table de base de données
Pour exécuter les étapes de cette procédure pas à pas, vous devez avoir une table de base de données. Si vous n'avez pas encore de table, vous pouvez en créer une en suivant les étapes de la procédure suivante. Si vous utilisez une table existante, les étapes de certaines procédures ne correspondront pas exactement à votre base de données. Toutefois, les concepts illustrés dans la procédure pas à pas seront les mêmes.
Pour créer une table de base de données
Si le site Web ne possède pas déjà un dossier App_Data, dans l'Explorateur de solutions, cliquez avec le bouton droit sur le projet, cliquez sur Ajouter le dossier ASP.NET, puis cliquez sur App_Data.
Cliquez avec le bouton droit sur le dossier App_Data, puis cliquez sur Ajouter un nouvel élément.
Sous Modèles installés, sélectionnez Base de données SQL, renommez le fichier en Reviews.mdf, puis cliquez sur Ajouter.
Dans l'Explorateur de serveurs, ouvrez le nœud Reviews.mdf puis cliquez avec le bouton droit sur le dossier Tables.
Cliquez sur Ajouter une nouvelle table.
Créez les colonnes suivantes dans la table :
Nom de la colonne
Type de données
Propriétés
MovieID
int
IsIdentity = Yes
Non null
Clé primaire
Title
nvarchar(50)
Theater
nvarchar(50)
Review
nvarchar(1000)
Score
int
Non null
Enregistrez la table et nommez-la MovieReviews.
Ajoutez plusieurs enregistrements à la table MovieReviews avec les exemples de données.
Dans l'Explorateur de serveurs, cliquez avec le bouton droit sur la table MovieReviews, puis cliquez sur Afficher les données de la table. Vous n'avez pas à spécifier de valeur pour MovieID, car cette valeur est générée par la base de données.
Création de classes pour représenter des entités de base de données
Pour utiliser le contrôle LinqDataSource, vous travaillez avec les classes qui représentent des entités de base de données. Vous pouvez utiliser un outil de Visual Studio 2008 ou Visual Web Developer Express pour créer ces classes.
Pour créer une classe pour la table MovieReviews
Si le site Web ne possède pas déjà un dossier App_Code, dans l'Explorateur de solutions, cliquez avec le bouton droit sur le projet, cliquez sur Ajouter le dossier ASP.NET, puis cliquez sur App_Code.
Cliquez avec le bouton droit sur le dossier App_Code, puis cliquez sur Ajouter un nouvel élément.
Sous Modèles installés, sélectionnez le modèle Classes LINQ to SQL, renommez le fichier Reviews.dbml, puis cliquez sur Ajouter.
Le Concepteur Objet/Relationnel s'affiche.
Dans l'Explorateur de serveurs, faites glisser la table MovieReviews dans la fenêtre du Concepteur Objet/Relationnel.
La table MovieReviews et ses colonnes sont représentées comme une entité nommée MovieReview dans la fenêtre du Concepteur O/R.
Enregistrez le fichier Reviews.dbml.
Dans l'Explorateur de solutions, ouvrez le fichier Reviews.designer.cs ou Reviews.designer.vb.
Remarquez qu'il a maintenant des classes pour ReviewsDataContext et MovieReview. La classe ReviewsDataContext représente la base de données et la classe MovieReview représente la table de base de données. Le constructeur sans paramètre pour la classe ReviewsDataContext lit la chaîne de connexion du fichier Web.config.
Ouvrez le fichier Web.config.
Remarquez que la chaîne de connexion a été ajoutée dans l'élément connectionStrings.
Fermez le fichier de classe et le fichier Web.config.
Création et configuration d'un contrôle LinqDataSource
Maintenant que vous avez une table de base de données et des classes qui représentent des entités de base de données, vous pouvez utiliser un contrôle LinqDataSource sur une page Web ASP.NET pour gérer des données.
Pour créer et configurer un contrôle LinqDataSource
Dans Visual Studio, créez une page Web ASP.NET et basculez en mode Design.
À partir de l'onglet Données de la Boîte à outils, faites glisser un contrôle LinqDataSource et déposez-le dans l'élément form de la page Web.
Vous pouvez conserver à la propriété ID la valeur LinqDataSource1.
Affectez à la propriété ContextTypeName la valeur ReviewsDataContext.
Affectez à la propriété TableName la valeur MovieReviews.
Affectez à AutoPage la valeur true et basculez en mode Source.
L'exemple suivant illustre le balisage déclaratif du contrôle LinqDataSource.
<asp:LinqDataSource ContextTypeName="ReviewsDataContext" TableName="MovieReviews" AutoPage="true" ID="LinqDataSource1" > </asp:LinqDataSource>
Remarquez que vous n'avez pas eu à spécifier de commandes de base de données pour sélectionner les données.
Ajout d'un contrôle pour afficher les données
Vous pouvez à présent ajouter un contrôle DetailsView et le lier au contrôle LinqDataSource. Le contrôle DetailsView permet aux utilisateurs de consulter des données gérées par le contrôle LinqDataSource.
Pour connecter les données LinqDataSource à un DetailsView
Sous l'onglet Données de la Boîte à Outils, double-cliquez sur le contrôle DetailsView pour l'ajouter à la page.
Vous pouvez conserver à la propriété ID la valeur DetailsView1.
Affectez à la propriété DataSourceID la valeur LinqDataSource1.
Affectez à la propriété DataKeyNames la valeur MovieID.
Affectez à AllowPaging la valeur true.
L'exemple suivant illustre le balisage déclaratif du contrôle DetailsView.
<asp:DetailsView DataSourceID="LinqDataSource1" DataKeyNames="MovieID" AllowPaging="true" ID="DetailsView1" > </asp:DetailsView>
Enregistrez vos modifications et appuyez sur CTRL+F5 pour afficher la page dans un navigateur.
Le contrôle DetailsView affiche les valeurs de l'enregistrement actuel de la table MovieReviews. Le contrôle DetailsView crée automatiquement les contrôles Web pour afficher chaque colonne de la table de base de données.
Activation d'utilisateurs pour mettre à jour, insérer et supprimer des données
Le contrôle LinqDataSource peut créer les commandes de mise à jour, insertion et suppression de données.
Pour activer les opérations de mise à jour, insertion et suppression
Dans le contrôle LinqDataSource, affectez aux propriétés EnableUpdate, EnableInsert et EnableDelete la valeur true.
L'exemple suivant illustre le balisage déclaratif du contrôle LinqDataSource.
<asp:LinqDataSource ContextTypeName="ReviewsDataContext" TableName="MovieReviews" AutoPage="true" EnableUpdate="true" EnableInsert="true" EnableDelete="true" ID="LinqDataSource1" > </asp:LinqDataSource>
Dans le contrôle DetailsView, affectez aux propriétés AutoGenerateEditButton, AutoGenerateInsertButton et AutoGenerateDeleteButton la valeur true.
Pour restreindre les champs affichés dans le contrôle DetailsView et définir l'ordre des champs, affectez à la propriété AutoGenerateRows la valeur false.
Ajoutez des champs pour les colonnes Title, Theater, Rating et Review et liez-les aux champs de données correspondants.
L'exemple suivant illustre le balisage déclaratif du contrôle DetailsView.
<asp:DetailsView DataSourceID="LinqDataSource1" DataKeyNames="MovieID" AutoGenerateRows="false" AutoGenerateEditButton="true" AutoGenerateInsertButton="true" AutoGenerateDeleteButton="true" AllowPaging="true" ID="DetailsView1" > <Fields> <asp:BoundField HeaderText="Title" DataField="Title" /> <asp:BoundField HeaderText="Theater" DataField="Theater" /> <asp:BoundField HeaderText="Number of Stars" DataField="Score" /> <asp:BoundField HeaderText="Review" DataField="Review" /> </Fields> </asp:DetailsView>
La colonne MovieID est sélectionnée avec les autres colonnes de la source de données. Elle n'apparaît toutefois pas dans le contrôle DetailsView et l'utilisateur n'est pas en mesure de modifier sa valeur. La propriété MovieID doit être sélectionnée pour permettre au contrôle LinqDataSource de créer automatiquement les commandes de mise à jour, insertion et suppression de données.
Remarquez que vous n'avez pas eu à spécifier de commandes pour ces opérations de données.
Enregistrez les modifications, puis appuyez sur CTRL+F5 pour afficher la page dans un navigateur.
Le contrôle DetailsView affiche les champs de l'enregistrement actuel de la table MovieReviews. Vous pouvez mettre à jour, insérer et supprimer des enregistrements en cliquant sur les boutons correspondants du contrôle DetailsView.
Étapes suivantes
Cette procédure pas à pas a décrit les fonctionnalités de base pour la mise à jour, l'insertion et la suppression d'enregistrements à l'aide du contrôle LinqDataSource. Pour plus d'informations sur les fonctionnalités supplémentaires du contrôle LinqDataSource, vous disposez des options suivantes :
Vous pouvez filtrer les enregistrements de données retournés en donnant une valeur à la propriété Where. Vous pouvez également sélectionner un sous-ensemble de colonnes uniquement en donnant une valeur à la propriété Select. Pour plus d'informations, consultez Procédure pas à pas : sélection et filtrage d'un sous-ensemble de données avec les contrôles LinqDataSource et GridView.
Pour s'assurer que les données dans la base de données n'ont pas changé depuis leur lecture par la page Web, le contrôle LinqDataSource stocke les valeurs d'origine de toutes les données sélectionnées. Lorsque la mise à jour est publiée sur le serveur Web, l'objet LinqDataSource compare chaque champ stocké à la valeur actuelle dans la base de données. S'ils correspondent (indiquant ainsi que l'enregistrement n'a pas changé), l'objet LinqDataSource met à jour ou supprime l'enregistrement. Le stockage de toute les valeurs d'origine de colonne peut manquer d'efficacité. Pour éviter ce problème, vous pouvez ajouter une colonne timestamp à votre table de base de données. Pour plus d'informations, consultez Procédure pas à pas : utilisation d'un horodatage avec le contrôle LinqDataSource pour vérifier l'intégrité des données.