Bonjour à tous ,

Je développe actuellement pour ma société , un petit programme qui permet la gestion des heures d'es ouvriers , la gestion des chantiers ( ajout , consultation, modifications ) ainsi qu'une analytique des chantiers et la gestion du personnel en WPF (pour information c'est ma première appli en WPf , j'ai jusqu’à maintenant toujours développer en WinForms).

L'application est quasiment terminée , cependant je me heurte à un petit problème pour la modification d'un chantier.

Je m'explique :

Je charge dans un DataGrid à l'aide d'un DataSet ma table chantier avec les colonnes que je veut pouvoir modifier.

Le code xaml de mon DataGrid:

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
 
<DataGrid x:Name="dataGrid" HorizontalAlignment="Left" Height="373" Margin="0,47,0,0" VerticalAlignment="Top" Width="774" AutoGenerateColumns="False" ItemsSource="{Binding Path=LoadDataBinding}"
   CanUserResizeRows="False" TextBlock.TextAlignment="Center" IsReadOnly="False" CellEditEnding="dataGrid_CellEditEnding" >
           <DataGrid.Columns>
 
               <DataGridTextColumn Binding="{Binding Path=numero}" Header="Numéro" IsReadOnly="True" TextBlock.TextAlignment="Center"/>
               <DataGridTextColumn Binding="{Binding Path=responsable}" Header="Nom du responsable" IsReadOnly="True" TextBlock.TextAlignment="Center"/>
               <DataGridTextColumn Binding="{Binding Path=description}" Header="Nom du chantier" IsReadOnly="True" TextBlock.TextAlignment="Center" />
               <DataGridTextColumn Binding="{Binding Path=zone}" Header="Zone" IsReadOnly="False" TextBlock.TextAlignment="Center" />
 
           </DataGrid.Columns>
           <DataGrid.ColumnHeaderStyle>
               <Style TargetType="{x:Type DataGridColumnHeader}">
                   <Setter Property="FontWeight" Value="Bold"/>
 
                   <Setter Property="FontStyle" Value="Italic"/>
                   <Setter Property="HorizontalContentAlignment" Value="Center" />
 
               </Style>
 
           </DataGrid.ColumnHeaderStyle>
 
 
       </DataGrid>
Donc j'ai bien bindé et bien mit "IsReadOnly="False" pour accepter la modification.

Et voici le code C# pour remplir le Datagrid :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
public void selection_chantier(object sender, RoutedEventArgs e)
       {
           dataGrid.DataContext = trait.lire_chantier_par_numero(c_numero_chantier.SelectedItem.ToString());
       }
Le code de la méthode lire_chantier qui vient d'une classe :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
public DataSet lire_chantier_par_numero(string numero)
     {
         DataSet val = mbdd.table_lire("SELECT numero,responsable,description,zone FROM chantier WHERE numero = '"+numero+"'");
         return val;
     }
et le code de la la méthode table_lire qui vient de ma classe Mysql :

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
public DataSet table_lire(string requete)
 {
     try
     {
         cn = new MySqlConnection();             //Création d'un nouvel objet cn
         cn.ConnectionString = con_Base;  //Requête de connexion
         cn.Open();
         da = new MySqlDataAdapter(requete, cn); //On crée un nouvel objet da qui contiendra la requete et la connection
         ds = new DataSet(); //On crée un nouvel objet ds
         da.Fill(ds,"LoadDataBinding"); //On ajoute da dans le Dataset
         cn.Close(); //On se déconnecte de la mbdd
     }
     catch (MySqlException mySqlException)
     {
         MySqlException ex = mySqlException;
         System.Windows.MessageBox.Show("Erreur suivante " + ex + " ");
         { return null; }
     }
 
     return ds; //On retourne le Dataset
 }
Ma question est donc la suivante , comment faire pour que au moment ou je modifie une cellule du DataGrid la modification s'enregistre dans ma Bdd?

Chose que je sais faire avec un DataGridView d'une WinForm , mais la je sèche . J'ai fait le tours des forum , demander a google ( mon meilleur ami quand j'ai un souci ) consulter MSDN , mais Visiblement j'ai du louper quelque chose .

Edit : pour la modification de cellule j'utilise l’événement : CellEditEnding

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
private void dataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
     {         
         trait.MajDataUtilisateur(ds);
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
public void MajDataUtilisateur(DataSet ds)
        {
            mbdd.TableMaj(ds);
        }

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
public bool TableMaj(DataSet ds)
      {
          try
          {
              combuilder = new MySqlCommandBuilder(da); //création du combuilder et indication du connecteur de données
 
              da.Update(ds,"LoadDataBinding"); //on envoie le dataset ds vers le connecteur de données
 
              combuilder.Dispose(); //libération des ressources
              return true;
          }
          catch (MySqlException mySqlException)
          {
              MySqlException ex = mySqlException;
              //MessageBox.Show("Erreur suivante " + ex + " ");
              System.Windows.MessageBox.Show("Erreur suivante " + ex + " ");
 
              return false;
          }
      }
Évidemment les modifications ne se sont pas enregistrés
J'ai du louper quelque chose d'important mais je ne vois vraiment pas quoi . Si quelqu'un pouvais m’éclairer j'en serais ravis.
Merci d'avance.