Bonjour à tous et a toutes,
Tout d'abord je sais qu'il existe énormément de poste sur ce sujet de problème d'actualisation de datagridview mais aucun ne correspond à mon cas avec l'entity framework.
Problème :
Lors de l'insertion d'un ordinateur dans une base de données sql server, l'objet s'enregistre bien mais le datagridview ne s'actualise pas.
Mon application dispose de 2 forms : 1 de base avec le datagridview et une autre avec le formulaire qui permet de rentrer les informations de l'ordinateur.
Codes :
Home.cs
Cette fonction est celle qui gére le datagridview
Je récupere la liste venant de la DB et je la rentre en tant que DataSource.
A ce moment là ma datagridview se remplit bien
Mon instance pour faire appel a ma classe Home depuis d'autre classe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public void loadDgvComputer() { List<computer> liste = ComputerManager.Instance.getList(); dgvHome.DataSource = liste.ToList(); dgvHome.Columns[0].Visible = false; //Cache la colonne ID; dgvHome.Visible = true; }
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 //Singleton public static Home Instance { get { if (instance == null) { instance = new Home(); } return instance; }
FormComputer.cs
J'enregistre correctement mon objet dans la DB et puis je fais appel a ce fameux bout de code dans Home.cs => Home.Instance.loadDgvComputer();
En debug il passe bien dedans mais la datagridview n'est pas modifiée ...
J'avoue être perdu ... j'ai lu qu'il y aurait des problèmes avec le datasource qui convertirait après un databinding mais j'ai pas su aller vérifier dans le code source
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 private void cmdSaveComputer_Click(object sender, EventArgs e) { //1. On récupere tous les champs pour former l'objet computer com = new computer(); com.brand = txtBrand.Text; com.model = txtModel.Text; com.type = txtType.Text; com.warranty = txtWarranty.Text; com.price = Double.Parse(txtPrice.Text); //2. On injecte l'objet pour le persister try { Boolean check = ComputerManager.Instance.save(com); if (check == true) { MessageBox.Show("Computer enregistré correctement !"); Home.Instance.loadDgvComputer(); } } catch (Exception ex) { MessageBox.Show("ERROR !!!" + ex.Message); } } }
Auriez-vous des idées ?
Merci d'avance.
Partager