Bonjour,
Je réalise une application en WinForm avec le langage C#, avec une base de données dans le SGBD SqlServer 2000.
J'ai mon formulaire principal nommée "Fm_menu" et mon autre formulaire nommé "Fm_Employe" (d'autre formulaire arriverons par la suite.)
Dans ma base de données j'ai 2 tables :
tp1_employe(numero, nom, prenom, cadre, sexe, sce#)
tp1_service(code, designation)
le champ sce de la table tp1_employe fais référence au champ code de la table tp1_service.
Au niveau du formulaire "Fm_Menu", j'ai :
* un dataAdapteur pour chaque table ("dbAd_employe" et dbAd_service")
* un dataSet regroupant le tout ("dbDs_emplsce")
* un SqlConnexion ("dbCo_gesper")
A l'intérieur de mon formulaire principal, pour le moment j'ai un bouton nommé "bt_employe".
voici le code associé à ce formulaire :
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Fiche5
{
public partial class Fm_Menu : Form
{
public Fm_Menu()
{
InitializeComponent();
dbDs_empSce1.Clear();
dbAd_employe.Fill(dbDs_empSce1, "tp1_employe");
dbAd_service.Fill(dbDs_empSce1, "tp1_service");
}
private void bt_employe_Click(object sender, EventArgs e)
{
Fm_employe FE = new Fm_employe(dbDs_empSce1);
FE.Show();
}
}
Ensuite dans ma "Fm_employe", j'ai:
* Une textBox pour numero, nom, prenom, salaire. ("tb_numero", "tb_nom", "tb_prenom", "tb_salaire")
* Une comboBox pour le service.
* Une checkBox pour le cadre(coché si c'est un cadre sinon pas coché)
* deux radio bouton dans un GroupBox pour chaque sexe("rb_masculin", "rb_feminin")
voici le code associé à ce formulaire :
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Fiche5
{
public partial class Fm_employe : Form
{
public dbDs_empSce dbDs;
public Fm_employe()
{
InitializeComponent();
}
public Fm_employe(dbDs_empSce p_dbDs): this()
{
dbDs = p_dbDs;
// Affichage des données correspondants aux textBox
this.tb_numero.DataBindings.Add("Text", dbDs, "tp1_employe.numero");
this.tb_nom.DataBindings.Add("Text", dbDs, "tp1_employe.nom");
this.tb_prenom.DataBindings.Add("Text", dbDs, "tp1_employe.prenom");
this.tb_salaire.DataBindings.Add("Text", dbDs, "tp1_employe.salaire");
// Checked pas Text.
this.cb_cadre.DataBindings.Add("Checked", dbDs, "tp1_employe.cadre");
// Cas particulier de la liste des services
this.cb_service.DataSource = dbDs.tp1_service;
this.cb_service.DisplayMember = "designation";
this.cb_service.ValueMember = "code";
this.cb_service.DataBindings.Add("SelectedValue", dbDs, "tp1_employe.sce");
// Affichage du sexe de l'employé
DataRowView rowView = this.BindingContext[dbDs, dbDs.tp1_employe.TableName].Current as DataRowView;
if ((bool)rowView.Row["sexe"] == true)
this.rb_masculin.Checked = true;
else
this.rb_feminin.Checked = true;
affichePosCpt();
}
private void affichePosCpt()
{
string total = (this.BindingContext[dbDs, dbDs.tp1_employe.TableName].Count).ToString();
string num = ((this.BindingContext[dbDs, dbDs.tp1_employe.TableName].Position) + 1).ToString();
tb_posCpt.Text = num + "/" + total;
}
private void bt_premier_Click(object sender, EventArgs e)
{
this.BindingContext[dbDs, dbDs.tp1_employe.TableName].CancelCurrentEdit();
this.BindingContext[dbDs, dbDs.tp1_employe.TableName].Position = 0;
DataRowView rowView = this.BindingContext[dbDs, dbDs.tp1_employe.TableName].Current as DataRowView;
if ((bool)rowView.Row["sexe"] == true)
this.rb_masculin.Checked = true;
else
this.rb_feminin.Checked = true;
affichePosCpt();
}
private void bt_precedent_Click(object sender, EventArgs e)
{
this.BindingContext[dbDs, dbDs.tp1_employe.TableName].CancelCurrentEdit();
this.BindingContext[dbDs, dbDs.tp1_employe.TableName].Position--;
DataRowView rowView = this.BindingContext[dbDs, dbDs.tp1_employe.TableName].Current as DataRowView;
if ((bool)rowView.Row["sexe"] == true)
this.rb_masculin.Checked = true;
else
this.rb_feminin.Checked = true;
affichePosCpt();
}
private void bt_suivant_Click(object sender, EventArgs e)
{
this.BindingContext[dbDs, dbDs.tp1_employe.TableName].CancelCurrentEdit();
this.BindingContext[dbDs, dbDs.tp1_employe.TableName].Position++;
DataRowView rowView = this.BindingContext[dbDs, dbDs.tp1_employe.TableName].Current as DataRowView;
if ((bool)rowView.Row["sexe"] == true)
this.rb_masculin.Checked = true;
else
this.rb_feminin.Checked = true;
affichePosCpt();
}
private void bt_dernier_Click(object sender, EventArgs e)
{
this.BindingContext[dbDs, dbDs.tp1_employe.TableName].CancelCurrentEdit();
this.BindingContext[dbDs, dbDs.tp1_employe.TableName].Position = this.BindingContext[dbDs, dbDs.tp1_employe.TableName].Count - 1;
DataRowView rowView = this.BindingContext[dbDs, dbDs.tp1_employe.TableName].Current as DataRowView;
if ((bool)rowView.Row["sexe"] == true)
this.rb_masculin.Checked = true;
else
this.rb_feminin.Checked = true;
affichePosCpt();
}
private void bt_ajouter_Click(object sender, EventArgs e)
{
this.BindingContext[dbDs, dbDs.tp1_employe.TableName].AddNew();
affichePosCpt();
tb_numero.Text = System.Guid.NewGuid().ToString();
tb_nom.Text = "";
tb_prenom.Text = "";
tb_salaire.Text = "";
}
private void bt_suppression_Click(object sender, EventArgs e)
{
this.BindingContext[dbDs, dbDs.tp1_employe.TableName].RemoveAt(this.BindingContext[dbDs, dbDs.tp1_employe.TableName].Position);
affichePosCpt();
}
private void bt_validation_Click(object sender, EventArgs e)
{
DialogResult dr = MessageBox.Show("Voulez-vous sauvegarder tout les changements?", "Sauvegarder et Quitter l'application", MessageBoxButtons.YesNo);
if (dr == DialogResult.Yes)
{
DataRowView rowView = this.BindingContext[dbDs, dbDs.tp1_employe.TableName].Current as DataRowView;
if (this.rb_masculin.Checked)
rowView["Sexe"] = true;
else
rowView["Sexe"] = false;
}
}
}
}
J'ai 2 problème :
1) Dans mon formulaire "Fm_Employe", lorsque j'ajoute un employé (que je clique sur le bouton "bt_ajout"), j'ai la textBox "tb_posCpt" (qui affiche la position de l'employé et le nombre total d'employé, num/total)et si j'ai 2 employé dans la base, j'en rajoute un, j'en es donc 3. Ben dans la textBox, il m'affiche 1/3 alors que je devrais obtenir 3/3, comment puis je faire?? (voir ci-dessus la méthode "affichePosCpt()" de la classe "Fm_Employe" et le code du bouton "bt_ajouter")
2) Toujours dans le même formulaire, je vois pas trop comment faire pour enregistrer les modifications et/ou ajout d'employé vu que mon dataAdapter est au niveau du formulaire "Fm_Menu", quelqu'un a t-il une idée??
Merci d'avance!!