Académique Documents
Professionnel Documents
Culture Documents
Module 09 :
Linq To SQL,
Entity FramWork,
Connecté
et
Déconnecté
en Csharp
Hamid Mask
Formateur en TDI
1 / 66
TP1 : Gestion Commerciale.
5 Formulaires :
2 Rapports :
3 Graphiques :
6 Formulaires :
2 Rapports :
2 Graphiques :
2 / 66
Comparant les nombres d’emprunts des livres d’un thème donné.
(Thème = Economie, « Initiation à l’économie » 60%, « Economie
par la pratique » 30%, . . . etc.)
Un autre comparant les nombres d’emprunts par thème. (Maths
50%, Physique 30%, Economie 10% . . . etc.)
Travaux demandés :
En Linq To SQL.
Puis en mode connecté.
En mode déconnecté.
Puis en Linq To SQL.
3 / 66
TP1 : Gestion Commerciale.
En Linq To SQL
I – 2 Le DataContext (Vente).
4 / 66
I - Les formulaires :
1 – Interface à réaliser :
2 - Code à développer :
1 – Interface à réaliser :
2 - Code à développer :
1 – Interface à réaliser :
2 - Code à développer :
Les Combos doivent être remplies par les codes clients et codes articles.
Le N° de commande sera saisi et la Date de commande sera choisie dans un
DateTimePicker.
Une fois le code Client choisi, le Nom et la Ville s’affichent automatiquement.
Une fois le code Article choisi, la désignation et le PU s’affichent automatiquement et le
curseur est positionné dans le TextBox correspondant à la quantité.
Un Clic sur le bouton « Ajouter Ligne » fait descendre la ligne dans le DataGridView.
Le bouton « Ajouter Ligne » fait aussi ce qui suit :
calcule le Montant de la ligne et le Total de la commande à chaque ajout de ligne.
Verifie si le stock est suffisant (Quantité commandée <= Quantité en stock, c.à.d.
Qte < = Qdisp) et affiche le message « Stock insuffisant ! » si ce n’est pas le cas.
Le bouton « Supprimer Ligne » permet de supprimer une ligne sélectionnée dans le
DataGridView et recalcule le Total de la commande.
Prévoir le fait qu’après avoir ajouté un article dans le DataGridView son code est supprimé
du Combo CboCodeArt pour ne pas le choisir une 2eme fois (risque de doublon).
Lorsqu’il n’y a plus aucune modification à effectuer sur la commande, on peut l’enregistrer
dans la base de données.
6 / 66
Mise à jour du stock (retranche la quantité commandée de chaque article de la
commande de la quantité en stock de ce même article)
Effacer le formulaire pour préparer la saisie d’une autre commande.
1 – Interface à réaliser :
2 - Code à développer :
Le Combo code client doit être rempli par les codes des clients.
Lorsque le code d’un client est choisi :
le Nom et la Ville s’affichent automatiquement.
La liste de toutes ses commandes s’affiche dans le 1 er DataGridView.
Son Chiffre d’affaires est calculé et affiché dans un TextBox.
(Chiffre d’affaires d’un client = Somme des totaux de ses commandes)
On peut choisir d’afficher les détails de la première commande de la liste des commandes
pour chaque client choisi dans le combo.
7 / 66
I – 5 Gestion des commandes.
1 – Interface à réaliser :
2 - Code à développer :
Suggestion :
8 / 66
I – 5 Astuces et compléments .
1 – Recherche multicritères :
dgv.Rows.Clear();
IQueryable<Client> Clients1 = dc.Client;
IQueryable<Client> Clients2 = dc.Client;
if (ChkNom.Checked)
{
Clients1 = from cl in dc.Client
where cl.Nom.StartsWith(TxtNomR.Text)
select cl;
}
if (ChkVille.Checked)
{
Clients2 = from cl in dc.Client
where cl.Ville == TxtVilleR.Text
select cl;
}
dgv.DataSource = Clients1.Intersect(Clients2);
dgv.DataSource = Clients1.Intersect(Clients2.Intersect(
Clients3.Intersect(Clients4.Intersect(Clients5))));
9 / 66
2 – Procédures et fonctions :
En générale, une procédure accepte plusieurs paramètres d’entrée (les
données) et retourne plusieurs paramètres de sortie (les résultats).
Alors qu’une fonction accepte plusieurs paramètres (les données) et retourne un
seul résultat.
Un exemple d’illustration :
// Fonction Somme
private int Somme(int A,int B)
{
return A + B;
}
// Bouton CmdAppelProc
private void CmdAppelProc_Click(object sender, EventArgs e)
{
int Som = 0;
int Prod = 0;
// Appel de la Procédure SomEtProd
SomEtProd(int.Parse(TxtA.Text), int.Parse(TxtB.Text),ref Som, ref Prod);
LblSom.Text = Som.ToString();
LblProd.Text = Prod.ToString();
}
// Bouton CmdAppelFonction
private void CmdAppelFonction_Click(object sender, EventArgs e)
{
10 / 66
// Appel de la fonction Somme
LblSomme.Text = Somme(int.Parse(TxtA.Text), int.Parse(TxtB.Text)).ToString();
} }
I – 6 Exercices :
Bouton :
dgv2.Rows.Clear();
foreach (DataGridViewRow r in dgv1.SelectedRows)
{
dgv2.Rows.Add(r.Cells[0].Value, r.Cells[1].Value);
}
Pour garder l’ordre des sélections, le code sera modifié comme suit :
dgv2.Rows.Clear();
for (int i = dgv1.SelectedRows.Count - 1; i >= 0; i--)
{
dgv2.Rows.Add(dgv1.SelectedRows[i].Cells[0].Value,
dgv1.SelectedRows[i].Cells[1].Value);
}
Bouton :
dgv2.Rows.Clear();
foreach ( DataGridViewRow r in dgv1.SelectedRows)
{
var com = (from c in dc.Commande
where c.NumCom == r.Cells[0].Value.ToString()
select c).First();
Tot = 0;
foreach ( Detail d in com.Detail)
{
Tot += double.Parse(d.Article.PU.ToString()) *
double.Parse(d.Qte.ToString());
}
dgv2.Rows.Add(com.NumCom,Tot);
}
Pour garder l’ordre des sélections, le code sera modifié comme suit :
dgv2.Rows.Clear();
for (int i = dgv1.SelectedRows.Count - 1; i >= 0 ; i-- )
{
var com = (from c in dc.Commande
where c.NumCom ==
dgv1.SelectedRows[i].Cells[0].Value.ToString()
12 / 66
select c).First();
Tot = 0;
foreach (Detail d in com.Detail)
{
Tot += double.Parse(d.Article.PU.ToString()) *
double.Parse(d.Qte.ToString());
}
dgv2.Rows.Add(com.NumCom, Tot);
}
13 / 66
II - Les rapports (états) :
II – 2 Un rapport facture.
14 / 66
III - Les Graphique (états) :
15 / 66
III – 3 Diagramme sectoriel des pourcentages du CA de chaque ville.
16 / 66
TP3 : Gestion Commerciale.
I - PS et Linq To SQL :
Dans la BD Vente, créer les PS suivantes :
Code T-SQL :
1. Insertion client
CREATE PROC PS_InsertCl
@codecl varchar(6),
@nom varchar(40),
@ville varchar(30)
AS
Insert Into client Values(@codecl,@nom,@ville)
Test
2. Modification client
CREATE PROCEDURE PS_UpdateCl
@codecl varchar(6),
@nom varchar(40),
@ville varchar(30)
AS
Update Client Set Nom=@nom,Ville=@ville Where Codecl=@codecl
Test
3. Suppression client
CREATE PROCEDURE PS_DeleteCl
17 / 66
@codecl varchar(6)
AS
Delete client Where Codecl = @codecl
Test
@codecl varchar(6),
@nom varchar(40) output,
@ville varchar(30) output
AS
Select @nom=Nom,@ville=Ville From client Where Codecl=@codecl
Test
5. Procédure de navigation :
Go
Create Proc PS_Move
(@p int,
@CodeCl Varchar(6) Output,
@Nom Varchar(40) Output,
@Ville Varchar(40) Output)
As
Select @CodeCl = CodeCl, @Nom = Nom, @Ville = Ville
From (Select ROW_NUMBER()
OVER (ORDER BY CodeCl) AS Ligne,
CodeCl,Nom,Ville
From Client) As Cl
Where Ligne = @p
Go
Test
Go
18 / 66
Create Proc PS_NbClients
(@NbCl int Output)
As
Select @NbCl = Count(*) From Client
Go
Test
Go
CREATE PROCEDURE PS_RecherchEtPos
@codecl varchar(6),
@nom varchar(40) output,
@ville varchar(30) output,
@Position int output
AS
Select @CodeCl = CodeCl, @Nom = Nom,
@Ville = Ville,@Position = Ligne
From (Select ROW_NUMBER()
OVER (ORDER BY CodeCl) AS Ligne,
CodeCl,Nom,Ville
From Client) As Cl
Where CodeCl = @codecl
Go
Test
19 / 66
8. Mise à jour de la table Client :
Code à développer :
Il s’agit de d’appeler les procédures stockées précédentes pour réaliser :
La navigation dans la table client et la recherche d’un client.
La mise à jour de la table client (Ajouter, Modifier et supprimer).
II - Exercice :
Refaire la saisie d’une commande et ses détails par des procédures stockées.
20 / 66
TP2 : Gestion d’une Bibliothèque.
I – 2 Le DataSet (dsBiblio).
21 / 66
I - Les formulaires :
1er clic
2eme clic
22 / 66
I – 3 Mise à jour de la table Livre.
1 – Interface à réaliser :
2 - Code à développer :
Au choix d’un adhérent, son nom et ses emprunts passés sont affichées.
Au choix d’un thème, la liste de tous les livres de ce thème est affichée.
Après le choix d’un livre et d’une date d’emprunt, Le bouton « Enregistrer » permet
d’enregistrer l’emprunt dans la table Emprunt et de l’ajouter dans le DataGridView.
1 – Interface à réaliser :
23 / 66
2 - Code à développer :
Au choix d’un adhérent, son nom et ses emprunts passés sont affichées.
Après sélection de l’emprunt à retourner et le choix d’une date de retour, Le bouton
« Enregistrer » permet d’enregistrer le retour dans la table Emprunt et d’afficher la date
de retour de l’emprunt sélectionné dans le DataGridView.
Proposition de solutions
24 / 66
TP1 : Gestion Commerciale. (Linq To SQL)
I - Les formulaires :
I – 1 Mise à jour de la table Client.
Code C# :
namespace GestionCommerciale
{
public partial class MajClient_Avec_BS : Form
{
public VenteDataContext dc = new VenteDataContext();
public BindingSource ClientBS = new BindingSource();
public Client ClientActuel;
public MajClient_Avec_BS()
{
InitializeComponent();
}
25 / 66
public void Afficher()
{
ClientActuel = (Client) ClientBS.Current;
TxtCodeCl.Text = ClientActuel.CodeCl;
TxtNom.Text = ClientActuel.Nom;
TxtVille.Text = ClientActuel.Ville;
}
ClientBS.Position = ClientBS.IndexOf(cl);
Afficher();
}
else
{
((Client) ClientBS.Current).CodeCl = TxtCodeCl.Text;
((Client) ClientBS.Current).Nom = TxtNom.Text;
((Client) ClientBS.Current).Ville = TxtVille.Text;
ClientBS.EndEdit();
26 / 66
dc.SubmitChanges();
CmdAjouter.Text = "Nouveau";
Ajouter = false;
}
}
dc.SubmitChanges();
}
Code C# :
namespace GestionCommerciale
{
public partial class SaisieCommande : Form
{
public VenteDataContext dc = new VenteDataContext();
public int Qdispo, Q;
public double Total = 0;
public SaisieCommande()
{
InitializeComponent();
}
27 / 66
foreach (Article art in dc.Article)
{
CboCodeArt.Items.Add(art.CodeArt);
}
LblMessage.Text = "";
if ( cl != null)
{
TxtNom.Text = cl.Nom;
TxtVille.Text = cl.Ville;
}
if (art != null)
{
TxtDesi.Text = art.Desi;
TxtPU.Text = art.PU.ToString();
TxtQte.Clear();
Qdispo = Convert.ToInt32( art.Qdisp);
TxtQte.Focus();
}
28 / 66
DG1.Rows.Add(Ligne);
// Recalcul du total
Total = Total - double.Parse(DG1.Rows[DG1.CurrentRow.Index].Cells[2].Value.ToString()) *
int.Parse(DG1.Rows[DG1.CurrentRow.Index].Cells[3].Value.ToString());
TxtTotal.Text = Total.ToString();
29 / 66
select a).First();
Q = int.Parse(DG1.Rows[i].Cells[3].Value.ToString());
Qdispo = Convert.ToInt32(art.Qdisp);
art.Qdisp = Qdispo - Q;
// Enregistrement dans la BD
dc.SubmitChanges();
TxtNumCom.Clear();
DtpDateCom.Update();
CboCodeCl.Text = "";
TxtNom.Clear();
TxtVille.Clear();
DG1.Rows.Clear();
TxtTotal.Clear();
TxtQte.Focus();
}
}
}
Code C# :
namespace GestionCommerciale
{
public partial class ConsulterCommandesParClient : Form
{
public VenteDataContext dc = new VenteDataContext();
public double Total,CA;
public ConsulterCommandesParClient()
{
InitializeComponent();
}
if (cl != null)
{
TxtNom.Text = cl.Nom;
TxtVille.Text = cl.Ville;
}
dgCommandes.Rows.Clear();
foreach (Commande c in cl.Commande)
{
dgCommandes.Rows.Add(c.NumCom, c.DateCom);
}
TxtCA.Text = CA.ToString();
dgDetails.Rows.Clear();
Total = 0;
foreach (Detail d in com.Detail)
{
double Montant = Convert.ToDouble(d.Article.PU) * Convert.ToInt32(d.Qte);
dgDetails.Rows.Add(d.CodeArt, d.Article.Desi, d.Article.PU, d.Qte, Montant);
Total += Montant;
}
31 / 66
TxtTotal.Text = Total.ToString();
TxtTVA.Text = (Total * 0.2).ToString();
TxtTTC.Text = (Total * 1.2).ToString();
}
}
}
32 / 66
Code C# :
33 / 66
Code C# :
crListeClients_ParVille1.SetDataSource(Clients);
crystalReportViewer1.RefreshReport();
}
II – 2 Un rapport facture.
34 / 66
Code C# :
public partial class Facture : Form
{
VenteDataContext dc = new VenteDataContext();
35 / 66
Code C# :
public partial class FrmFacture_Une : Form
{
VenteDataContext dc = new VenteDataContext();
36 / 66
III – 2 Histogramme CA_ Mensuel_ParVille.
I - PS et Linq To SQL :
38 / 66
Code C# :
public MajClient_Avec_PS()
{
InitializeComponent();
}
}
39 / 66
private void CmdPrecedent_Click( . . . )
{
if ( p > 1)
{
string C = "", N = "", V = "";
dc.PS_Move(--p, ref C, ref N, ref V);
Afficher(C, N, V);
}
}
int? NBC = 0;
dc.PS_NbClients(ref NBC);
p = (int)NBC;
CmdAjouter.Text = "Nouveau";
}
}
40 / 66
private void CmdModifier_Click( . . . )
{
dc.PS_UpdateCl(TxtCodeCl.Text, TxtNom.Text, TxtVille.Text);
}
I - Les formulaires :
I – 1 Mise à jour de la table Client.
Code C# :
namespace GestionCommercial_Connecté_CSharp
{
41 / 66
public partial class MajClient : Form
{
public static string strcon = @"Data Source=.\sqlexpress;Initial Catalog=Vente;
Integrated Security=True";
public static string ReqSelect = "Select * From Client";
public static SqlConnection con = new SqlConnection(strcon);
public SqlCommand CmdSelect = new SqlCommand(ReqSelect,con);
public SqlDataReader dr;
public MajClient()
{
InitializeComponent();
}
Affichage();
}
42 / 66
}
if (Ajouter == false)
{
Ajouter = true;
CmdAjouter.Text = "Ajouter";
TxtCodeCl.Clear();
TxtNom.Clear();
TxtVille.Clear();
TxtCodeCl.Focus();
}
else
{
if (con.State == ConnectionState.Open)
{
con.Close();
}
con.Open();
string ReqInsert = "Insert Into Client Values(' " + TxtCodeCl.Text + " ',' " +
TxtNom.Text + " ',' " + TxtVille.Text + " ')";
SqlCommand CmdInsert = new SqlCommand(ReqInsert, con);
CmdInsert.ExecuteNonQuery();
con.Close();
MajClient_Load(sender, e);
ClientBS.MoveLast();
CmdAjouter.Text = "Nouveau";
Ajouter = false;
}
}
43 / 66
private void CmdModifier_Click(object sender, EventArgs e)
{
int p = ClientBS.Position;
if (con.State == ConnectionState.Open)
{
con.Close();
}
con.Open();
string ReqUpdate = "Update Client Set Nom = ' " + TxtNom.Text + " ', Ville = '" +
TxtVille.Text + " ' Where CodeCl = ' " + TxtCodeCl.Text + " ' ";
SqlCommand CmdUpdate = new SqlCommand(ReqUpdate, con);
CmdUpdate.ExecuteNonQuery();
con.Close();
MajClient_Load(sender, e);
ClientBS.Position = p;
}
if (con.State == ConnectionState.Open)
{
con.Close();
}
con.Open();
string ReqDelete = "Delete Client Where CodeCl = ' " + TxtCodeCl.Text + " ' ";
SqlCommand CmdDelete = new SqlCommand(ReqDelete, con);
CmdDelete.ExecuteNonQuery();
con.Close();
MajClient_Load(sender, e);
If ( p == ClientBS.Count() )
{
ClientBS.Position = p - 1;
}
44 / 66
I – 3 Saisies d’une commande.
Code C# :
namespace GestionCommercial_Connecté_CSharp
{
public partial class SaisieCommande : Form
{
public string strcon = @"Data Source=.\sqlexpress;Initial Catalog=Vente;
Integrated Security=True";
public SqlConnection con = new SqlConnection();
public string ReqSelectCl = "select * from client";
public string ReqSelectArt = "select * from article";
public SqlCommand CmdSelect = new SqlCommand();
SqlDataReader dr;
public SaisieCommande()
{
InitializeComponent();
}
45 / 66
{
string ReqSelectClient = "select nom,ville from client where codeCl='" +
CboCodeCl.Text + "'";
CmdSelect.CommandText = ReqSelectClient;
dr = CmdSelect.ExecuteReader();
dr.Read();
TxtNom.Text = dr[0].ToString();
TxtVille.Text = dr[1].ToString();
dr.Close();
}
dr = CmdSelect.ExecuteReader();
dr.Read();
TxtDesi.Text = dr[0].ToString();
TxtPU.Text = dr[1].ToString();
Qdispo = int.Parse(dr[2].ToString());
TxtQte.Focus();
dr.Close();
46 / 66
TxtPU.Clear();
TxtQte.Clear();
LblMessage.Text = "";
}
}
con.Close();
}
47 / 66
}
// Recalcul du total
Total = Total -
double.Parse(DG1.Rows[DG1.CurrentRow.Index].Cells[2].Value.ToString()) *
int.Parse(DG1.Rows[DG1.CurrentRow.Index].Cells[3].Value.ToString());
TxtTotal.Text = Total.ToString();
Code C# :
namespace GestionCommercial_Connecté_CSharp
{
public partial class ConsulterCommandesParClient : Form
{
public ConsulterCommandesParClient()
{
InitializeComponent();
}
48 / 66
CmdSelect.Connection = con;
con.Open();
dr = CmdSelect.ExecuteReader();
dr.Read();
TxtNom.Text = dr[0].ToString();
TxtVille.Text = dr[1].ToString();
dr.Close();
49 / 66
private void dgCommandes_Click(object sender, EventArgs e)
{
// Affichage des lignes de la commande
CmdSelect.CommandText = "Select a.CodeArt,Desi,PU,Qte,PU*Qte From Detail a " +
"Join Article b On a.CodeArt = b.CodeArt " + "Where NumCom = '" +
dgCommandes.SelectedRows[0].Cells[0].Value.ToString() + "'";
dr = CmdSelect.ExecuteReader();
dgDetails.Rows.Clear();
while (dr.Read())
{
string[] Ligne = { dr[0].ToString(), dr[1].ToString(), dr[2].ToString(),
dr[3].ToString(), dr[4].ToString() };
dgDetails.Rows.Add(Ligne);
}
dr.Close();
I - PS et Linq To SQL :
Dans la BD Vente, créer les PS suivantes :
Code T-SQL :
CREATE Proc PS_Insert
@CodeCl varchar(6),
@Nom varchar(30),
@Ville varchar(20)
As
Insert Into Client Values(@CodeCl,@Nom,@Ville)
@CodeCl varchar(6),
@Nom varchar(30),
50 / 66
@Ville varchar(20)
As
Update Client Set Nom=@Nom,Ville=@Ville Where CodeCl=@CodeCl
@CodeCl varchar(6)
As
Delete Client Where CodeCl = @CodeCl
@CodeCl varchar(6),
@Nom varchar(30) output,
@Ville varchar(20) output
As
Select @Nom=Nom,@Ville=Ville
From Client
Where CodeCl=@CodeCl
Code C# :
namespace GestionCommerciale
{
public partial class MajClient_Avec_PS : Form
{
public VenteDataContext dc = new VenteDataContext();
public BindingSource ClientBS = new BindingSource();
public Client ClientActuel;
public MajClient_Avec_PS()
{
InitializeComponent();
}
51 / 66
Ajouter = true;
CmdAjouter.Text = "Ajouter";
TxtCodeCl.Clear();
TxtNom.Clear();
TxtVille.Clear();
TxtCodeCl.Focus();
}
else
{
dc.PS_InsertCl(TxtCodeCl.Text, TxtNom.Text, TxtVille.Text);
CmdAjouter.Text = "Nouveau";
Ajouter = false;
}
}
52 / 66
private void CmdModifier_Click(object sender, EventArgs e)
{
dc.PS_UpdateCl(TxtCodeCl.Text, TxtNom.Text, TxtVille.Text);
}
TxtCodeCl.Text = TxtRechercheCl.Text;
TxtNom.Text = xNom;
TxtVille.Text = xVille;
}
II - PS et mode connecté :
Code C# :
namespace GestionCommercial_Connecté_CSharp
{
public partial class MajClient_AvecPS : Form
{
public string strcon = @"Data Source=.\sqlexpress;Initial Catalog=Vente;
Integrated Security=True";
public SqlConnection con = new SqlConnection();
public SqlCommand CmdSelect = new SqlCommand();
public SqlCommand CmdMaj = new SqlCommand();
public Boolean Ajouter = false;
public MajClient_AvecPS()
{
InitializeComponent();
}
CmdMaj.Parameters.Add(paramCodeCl);
CmdMaj.Parameters.Add(paramNom);
CmdMaj.Parameters.Add(paramVille);
CmdMaj.ExecuteNonQuery();
CmdMaj.Parameters.Clear();
con.Close();
CmdAjouter.Text = "Nouveau";
Ajouter = false;
}
}
54 / 66
SqlParameter paramNom = new SqlParameter("@Nom",
SqlDbType.VarChar,40);
paramNom.Direction = ParameterDirection.Output;
CmdSelect.Parameters.Add(paramCodeCl);
CmdSelect.Parameters.Add(paramNom);
CmdSelect.Parameters.Add(paramVille);
SqlDataReader dr = CmdSelect.ExecuteReader();
CmdSelect.Parameters.Clear();
con.Close();
}
CmdMaj.Parameters.Add(paramCodeCl);
CmdMaj.Parameters.Add(paramNom);
CmdMaj.Parameters.Add(paramVille);
CmdMaj.ExecuteNonQuery();
55 / 66
CmdMaj.Parameters.Clear();
con.Close();
}
CmdMaj.Parameters.Add(paramCodeCl);
CmdMaj.ExecuteNonQuery();
CmdMaj.Parameters.Clear();
con.Close();
}
}
}
56 / 66
Manipulation d’un document XML avec C#
Pour les exemples qui suivent, nous utiliserons le document XML suivant (resto.xml) :
<menu type="economique">
<entrees>
<nom calories="50">pain</nom>
</entrees>
<plats>
<nom calories="1700">jambon</nom>
</plats>
<fromages>
<nom calorie="240">camembert</nom>
</fromages>
<desserts>
<nom calories="340" parfum="a l’eau">glace</nom>
</desserts>
</menu>
</restaurant>
58 / 66
Code C# :
using System.Xml;
}
}
}
Code C# :
using System.Xml;
namespace XML_Et_CSharp_Initiation
{
59 / 66
public partial class Exemple_2 : Form
{
document.Load(@"Chemin\resto.xml");
menus = document.GetElementsByTagName("menu");
XmlAttribute att;
if (unMenu.Attributes["type"].Value == "economique")
{
att = document.CreateAttribute("prix");
att.Value = "15";
unMenu.Attributes.Append(att);
}
LstMenus.Items.Clear();
60 / 66
foreach (XmlNode unMenu in menus)
LstMenus.Items.Add(unMenu.OuterXml);
}
}
}
Code C# :
using System.Xml;
namespace XML_Et_CSharp_Initiation
{
public partial class Exemple_3 : Form
61 / 66
{
document.Load(@"Chemin\resto.xml");
menus = document.GetElementsByTagName("menu");
LstMenus.Items.Add(unMenu.LastChild.PreviousSibling.OuterXml);
LstMenus.Items.Add(unMenu.LastChild.OuterXml);
}
}
}
LstMenus.Items.Clear();
foreach (XmlNode unMenu in menus)
{
if (unMenu.Attributes["type"].Value == "gastronomique")
{
unMenu.RemoveChild(unMenu.LastChild);
LstMenus.Items.Add(unMenu.LastChild.OuterXml);
}
}
}
}
}
62 / 66
TP2 : Mise à jour d’un fichier XML
using System.Xml;
namespace XML_Et_CSharp_Initiation
{
public Form1()
{
InitializeComponent();
}
Position = 0;
Afficher(Position);
}
Txt_Id.Text = elt.Attributes[0].Value;
Txt_Nom.Text = elt.ChildNodes[0].InnerText;
Txt_Prenom.Text = elt.ChildNodes[1].InnerText;
Txt_Ville.Text = elt.ChildNodes[2].InnerText;
Txt_Tel.Text = elt.ChildNodes[3].InnerText;
}
private void CmdPremier_Click(object sender, EventArgs e)
{
Position = 0;
Afficher(Position);
}
64 / 66
XmlElement elemVille;
XmlElement elemTel;
// Ecriture du Xml
document.Save(@"C:\Clients.xml");
MessageBox.Show("Enregistrement réussi");
// Ecriture du Xml
document.Save("C:\Clients.xml");
MessageBox.Show("Suppression réussi");
}
65 / 66
private void CmdRechercher_Click(object sender, EventArgs e)
{
//elt = document.DocumentElement;
XPathNodeIterator noeuds = navigateur.Select("/Clients/Client[@id='" +
TxtRechercher.Text + "']");
noeuds.MoveNext();
//MessageBox.Show(noeuds.Current.InnerXml.ToString());
Txt_Id.Text = noeuds.Current.GetAttribute("id", "");
noeuds.Current.MoveToFirstChild();
Txt_Nom.Text = noeuds.Current.Value;
noeuds.Current.MoveToNext();
Txt_Prenom.Text = noeuds.Current.Value;
noeuds.Current.MoveToNext();
Txt_Ville.Text = noeuds.Current.Value;
noeuds.Current.MoveToNext();
Txt_Tel.Text = noeuds.Current.Value;
Position = noeuds.CurrentPosition;
MessageBox.Show("" + noeuds.CurrentPosition);
}
}
}
66 / 66