2017-02-17 63 views
0

我现在为我的公司(社会)开发了一个小程序,它允许管理工人的工时,管理建筑工地(工程)(加法,咨询,修改)以及作为WPF中的建筑网站(作品)和人员管理的一个分析(有关信息,这是我在WPf中的第一个应用程序,迄今为止我总是在WinForms中进行开发)。自datagrid更新bdd WPF

应用程序快要结束了,但是我遇到了一个修改施工现场(工作)的小问题。

我给出一些解释:

我负载(充电)DataGrid中的数据集我的表施工现场(工作),与我希望能够修改列的方式。

我的DataGrid的XAML代码:

<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> 

因此我宾得好,好把“IsReadOnly =‘假’接受修改

这里是代码C#来填补Datagrid的:

public void selection_chantier(object sender, RoutedEventArgs e) 
    { 
     dataGrid.DataContext = trait.lire_chantier_par_numero(c_numero_chantier.SelectedItem.ToString()); 
    } 
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; 
} 
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 
} 

因此,我的问题是下面的一个,怎么会是,在目前或修改我的DataGrid的单元格中的修改记录在我的BDD?

我知道如何用WinForm的DataGridView做的东西,但我干。我做了论坛的参观,问了Google(我最好的朋友,当我有问题时))向MSDN咨询,但显然我错过了一些东西。

编辑:细胞的修改我用的事件:CellEditEnding

private void dataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e) 
{   
    trait.MajDataUtilisateur(ds); 
    } 
public void MajDataUtilisateur(DataSet ds) 
    { 
     mbdd.TableMaj(ds); 
    } 

public bool TableMaj(DataSet ds) 
    { 
     try 
     { 
      combuilder = new MySqlCommandBuilder(da); //création du combuilder et indication du connecteur de données 
      da.Fill(ds); 
      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; 
     } 
    } 

回答

0

那么,如果你决定使用实体框架模型首先,映射你的BD,并保存用户修改的实体它可以更容易用几行代码。

总是当我有这种情况下,我更喜欢在每一行创建一个保存按钮,单击此按钮将执行您的代码来保存或编辑该行。