Mar.27
TP15 : Utilisation des méthodes GetChildRows et GetParentRow
Objectif
L’objectif de ce TP est de s’habituer à effectuer le mapping de deux tables en relation de type père-fils et comment utiliser les deux méthodes GetChildRows et GetParentRow.
Questions
On veut consulter les données contenues dans les deux tables Genre et Série dans la base de données Imdb. On veut afficher dans un même formulaire :
- La liste des séries d’un genre choisi dans un combo.
- Le genre d’une série choisi dans un combo.
- Créer l’interface suivante :
- Créer les objets et variables nécessaires et le code réalisant le travail demandé.
- Créer et remplir les deux Dataset Genre et Serie.
- Spécifier les clés primaires et créer la relation.
- Utiliser la méthode GetChildRows pour récupération des séries (fils) d’un genre.
- Utiliser la méthode GetParentRow Récupération du genre (Parent) d’une série.
Correction
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; namespace TP16_IMDB_2 { public partial class Form1 : Form { SqlConnection conn = new SqlConnection("server = DESKTOP-EIALG0J\\SQLEXPRESS; database = imdb; integrated security = SSPI"); DataSet ds = new DataSet(); SqlCommand cmd = new SqlCommand(); SqlDataAdapter da1 = new SqlDataAdapter(); SqlDataAdapter da2 = new SqlDataAdapter(); public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { conn.Open(); da1 = new SqlDataAdapter("select * from serie", conn); da1.Fill(ds, "serie"); da2 = new SqlDataAdapter("select * from genre", conn); da2.Fill(ds, "genre"); DataColumn[] PK_Serie = new DataColumn[1]; PK_Serie[0] = ds.Tables["serie"].Columns[0]; ds.Tables["serie"].PrimaryKey = PK_Serie; DataColumn[] PK_Genre = new DataColumn[1]; PK_Genre[0] = ds.Tables["genre"].Columns[0]; ds.Tables["genre"].PrimaryKey = PK_Genre; ds.Relations.Add("Rel_Gen_Ser", ds.Tables["genre"].Columns[0], ds.Tables["serie"].Columns[3]); conn.Close(); genreCombo.DataSource = ds.Tables["genre"]; genreCombo.DisplayMember = ds.Tables["genre"].Columns[1].ToString(); genreCombo.ValueMember = ds.Tables["genre"].Columns[0].ToString(); genreCombo.SelectedIndex = -1; serieCombo.DataSource = ds.Tables["serie"]; serieCombo.DisplayMember = ds.Tables["serie"].Columns[1].ColumnName; serieCombo.ValueMember = ds.Tables["serie"].Columns[0].ColumnName; serieCombo.SelectedIndex = -1; } private void genreCombo_SelectionChangeCommitted(object sender, EventArgs e) { dv.Rows.Clear(); if (genreCombo.SelectedIndex != -1) { int pos = int.Parse(genreCombo.SelectedValue.ToString()) -1 ; DataRow[] lignes = ds.Tables["genre"].Rows[pos].GetChildRows("Rel_Gen_Ser"); for (int i = 0; i < lignes.Length; i++) { dv.Rows.Add(lignes[i][0].ToString(), lignes[i][1].ToString()); } } } private void serieCombo_SelectionChangeCommitted(object sender, EventArgs e) { genreLabel.Text = ""; if (serieCombo.SelectedIndex != -1) { int pos = int.Parse(serieCombo.SelectedValue.ToString())-1; DataRow ligne = ds.Tables["serie"].Rows[pos].GetParentRow("Rel_Gen_Ser"); genreLabel.Text = ligne[1].ToString(); } } } }