1. La base de données... 1 2. Création de l'application GestionCours... 2 2.1. Créer l'application «GestionCours» à l'aide de l'ide Visual Studio 2010... 2 2.2. Objectif : créer un formulaire permettant la gestion des cours... 2 3. Génération du fichier Cours.edmx avec Entity Framework... 2 3.1. Ajouter le composant objet ADO.Net pour générer le modèle edmx... 2 3.2. Générer le fichier.edmx... 3 4. Exécution de requêtes pour visualiser les départements... 3 4.1. Déclarer la chaine de connexion... 3 4.2. Charger le ComboBox avec les données de l'objet Departement... 4 4.3. Afficher les informations du cours pour le département sélectionné dans le ComboBox... 4 5. Enregistrer des modifications apportées aux données... 5 5.1 Gérer un bouton de sauvegarde des modifications effectuées... 5 5.1 Améliorer les messages à l'utilisateur... 5 1. La base de données Nous utiliserons une base de données existante, créée sous SQL Server 2008 : prof_gestioncours, disponible sur la serveur SQL 172.16.0.50. Le schéma physique de cette base de données est le suivant : Dans cet exercice nous allons nous intéresser à la table Departement et à la table Cours, dont voici le contenu : SIO2 - Carcouët MVH 1/5
2. Création de l'application GestionCours 2.1. Créer l'application «GestionCours» à l'aide de l'ide Visual Studio 2010 Créer un nouveau projet de nom «GestionCours» Langage de développement Visual C#. Application de type Application Windows Forms. Enregistrer la solution dans un dossier dédié à la solution 2.2. Objectif : créer un formulaire permettant la gestion des cours Commençons par créer un nouveau dossier Forms dédié au rangement du formulaire On déplace le formulaire Form1 vers ce nouveau dossier On renomme le formulaire : frmcours.cs, le designer est également renommé Dans le volet Propriétés du formulaire frmcours, remplacez : - la valeur de la propriété Name par frmcours - et celle de la propriété Text par Gestion des cours. Dans la Boîte à outils, développez Contrôles communs, faites glisser un contrôle ComboBox vers le formulaire et renommez le en cbolistedpt Dans la Boîte à outils, faites glisser un contrôle Button vers le formulaire, renommez le en btnquitter, puis remplacez la valeur de Text par Quitter. Dans la boîte à outils, développez Données, faites glisser un contrôle DataGridView vers le formulaire et renommez le en dgvcours. Double-cliquez sur le contrôle bouton btnquitter, la page de codes du formulaire s'ouvre et la méthode de gestionnaire d'événements btnquitter_click est créée, appliquer la méthode de fermeture du formulaire à cet objet : this.close(); Le formulaire frmcours est créé, ses composants correctement paramétrés et prêt à être utilisé. 3. Génération du fichier Cours.edmx avec Entity Framework Nous allons générer un fichier.edmx, Entity Data Model, qui permettra de générer : un modèle conceptuel objet un modèle de stockage conforme à la structure de la base de données utilisée et des informations de mappage entre classes et tables l'ensemble sera affiché sous Visual Studio sous forme d'un diagramme de classes en réalité nous avons compris qu'en arrière plan, trois fichiers XML permettaient cette gestion 3.1. Ajouter le composant objet ADO.Net pour générer le modèle edmx Sélectionnez le projet GestionCours dans l'explorateur de solutions, Clique droit pour ajouter un Composant Sélectionner ADO.NET Entity Data Model Saisir mdlcours.edmx comme nom de modèle, puis cliquez sur Ajouter La page d'ouverture de l'assistant EDM (Entity Data Model) s'affiche. SIO2 - Carcouët MVH 2/5
3.2. Générer le fichier.edmx 1. Sélectionner Générer à partir d'une base de données comme contenu de modèle, puis Suivant 2. Cliquer sur le bouton Nouvelle connexion, choisir Microsoft SQL Server comme source de données 3. Nom du serveur : 172.16.0.50, authentification SQL Server saisir votre nom et votre mot de passe 4. Sélectionner le nom de base de données prof_cours, tester la connexion puis OK 5. Attention à bien renommer la chaine de connexion connectcours 6. Sélectionner toutes les tables, vérifiez la valeur de l'espace de noms du modèle : mdlcours 7. Modifier les propriétés de navigation pour que le modèle tiennent compte des multiplicités L'assistant exécute les actions suivantes : Ajoute les références System.Data.Entity, System.Runtime.Serialization et System.Security. Génère le fichier mdlcours.edmx Crée un code de couche objet contenant les classes qui ont été générées Crée un fichier App.Config. Nous avons généré le contenu conceptuel, de stockage et de mappage pour le modèle mdlcours du projet. Modifier si besoin le modèle edmx pour qu'il soit similaire à celui présenté ci-contre. Nous allons maintenant créer des requêtes sur des objets qui représentent les entités et associations du modèle, puis lier les résultats de ces requêtes à des contrôles. 4. Exécution de requêtes pour visualiser les départements 4.1. Déclarer la chaine de connexion Au début du fichier de code du formulaire frmcours, ajoutez les instructions using pour faire référence au modèle créé à partir de la base de données prof_gestioncours et à l'espace de noms de l'entité. using System.Data.Objects; using System.Data.Objects.DataClasses; Puis déclarer une variable privée de type chaine de connexion et l'instancier sous le nom maconnexion. private connectcours maconnexion; connectcours est le nom que vous avez fourni à votre chaine de connexion et déclaré dans le fichier App.Config. Si vous ouvrez ce fichier, vous trouverez le nom que vous avez donné à la classe de type chaine de connexion. <connectionstrings> <add name="connectcours" SIO2 - Carcouët MVH 3/5
Le début du programme C doit donc ressembler à cela : // Références à ajouter obligatoirement en tête de formulaire using System.Data.Objects; using System.Data.Objects.DataClasses; namespace CourseManager public partial class frmcours : Form private connectcours maconnexion; public frmcours() InitializeComponent(); 4.2. Charger le ComboBox avec les données de l'objet Departement Dans le concepteur de formulaires frmcours, double-cliquez sur le formulaire. La page de codes s'ouvre et la méthode de gestionnaire d'événements frmcours _Load est créée. Dans la méthode de gestionnaire d'événements frmcours _Load copiez et collez le code ci-après, qui : exécute une requête qui retourne une collection de départements (classés par Name) relie la collection d'objets Department au contrôle cbolistedpt. private void frmcours_load(object sender, EventArgs e) // Requête SQLToLinq qui retourne tous les Departments, triés par nom var departmentquery = from dpt in maconnexion.departement.include("cours") orderby dpt.name select dpt; // Charge le composant ComboBox avec les données récupérées par la requête précédente this.cbolistedpt.displaymember = "Nom Dpt"; this.cbolistedpt.datasource = (ObjectQuery)departmentQuery).Execute(MergeOption.AppendOnly); MessageBox.Show(ex.Message); 4.3. Afficher les informations du cours pour le département sélectionné dans le ComboBox Dans le concepteur de formulaires frmcours, double-cliquez sur le contrôle cbolistedpt. Cette opération crée la méthode de gestionnaire d'événements cbolistedpt _SelectedIndexChanged. Collez le code ci-dessous, qui charge les cours liés au département sélectionné. private void cbolistedpt_selectedindexchanged(object sender, EventArgs e) //Affectation à cedepartement du département sélectionné dans le cbolistedpt Departement cedepartment = (Departement)this.cboListeDpt.SelectedItem; //Affectation au datagriedview dgvcours de l'ensemble de lescours de cedepartement dgvcours.datasource = cedepartment.lescours; // On renomme et on cache volontairement certaines colonnes résultantes dgvcours.columns["courseid"].headertext = "Cours"; dgvcours.columns["title"].headertext = "Intitulé"; dgvcours.columns["credits"].headertext = "Crédits"; dgvcours.columns["departmentid"].visible = false; dgvcours.columns["ledepartement"].visible = false; dgvcours.columns["lesgrades"].visible = false; dgvcours.allowusertodeleterows = false; //dgvcours.autoresizecolumns(datagridviewautosizecolumnsmode.allcells); MessageBox.Show(ex.Message); SIO2 - Carcouët MVH 4/5
5. Enregistrer des modifications apportées aux données 5.1 Gérer un bouton de sauvegarde des modifications effectuées Dans cette tâche, nous allons enregistrer, dans la base de données, les modifications apportées aux objets Cours liés au contrôle DataGridView, dgvcours. Dans la boîte à outils faire glisser un contrôle Button vers le formulaire frmcours, remplacer le nom du contrôle par btnmodifier, puis remplacer la valeur Text par Mettre à jour. Dans le concepteur de formulaires frmcours, double-cliquez sur le contrôle btnmodifier. Cette opération crée la méthode de gestionnaire d'événements btnmodifier_click. Coller le code suivant qui enregistre dans la base de données les modifications apportées aux objets. private void btnmodifier_click(object sender, EventArgs e) // Sauvegarder les modifications et afficher un message de confirmation maconnexion.savechanges(); MessageBox.Show("Modifications enregistrées."); this.refresh(); MessageBox.Show(ex.Message); 5.1 Améliorer les messages à l'utilisateur Puisque nous en sommes aux boîtes de dialogue, fenêtre modale qui contient un message à l'utilisateur et lui demande éventuellement de confirmer un choix, regardons cela de plus près. MessageBox affiche un message pouvant contenir du texte, des boutons et des symboles donnant des informations et des instructions diverses à l'utilisateur. MessageBox est une classe system qui hérite de System.Windows.Forms On pourra donc associer MessageBox à la méthode Show : MessageBox.Show("Le message pour l'utilisateur") Les constructeurs de MessageBox supportent de nombreux paramètres d'entrée, quelques exemples : Show(String, String) Affiche un message avec le texte et la légende spécifiés. Show(String, String, MessageBoxButtons) Affiche un message avec le texte, la légende et les boutons spécifiés. Show(String, String, MessageBoxButtons, MessageBoxIcon) Affiche un message avec le texte, la légende, les boutons et l'icône spécifiés Le résultat de l'action de l'utilisateur, à un composant MessageBox, peut être affecté à une variable résultat de la classe DialogResult dont la valeur pourra être testée. En fonction de la valeur résultat, le programme peut déclencher telle ou telle action. private void btnquitter_click(object sender, EventArgs e) string message = "Voulez-vous vraiment quitter?"; string caption = "Fermeture de l'application"; MessageBoxButtons buttons = MessageBoxButtons.YesNo; DialogResult result; // Affichage de la boîte de dialogue result = MessageBox.Show(message, caption, buttons); if (result == System.Windows.Forms.DialogResult.Yes) /* Si l'utilisateur confirme en cliquant sur Yes */ /* fermeture de l'application, libération des ressources */ this.dispose(); this.close(); SIO2 - Carcouët MVH 5/5