自datagrid WPF

时间:2017-02-17 13:49:48

标签: c# wpf

我目前正在为我的公司(社会)开发一个小程序,它允许管理工人的工作时间,施工现场的管理(工程)(添加,咨询,修改)以及一个建筑分析WPF中的站点(工作)和人员管理(作为信息,它是我在WPf中的第一个应用程序,到目前为止我总是在WinForms中开发)。

应用程序几乎已经结束,但我遇到了修改施工现场(工作)的小问题。

我给出了一些解释:

我通过DataSet我的表构造站点(工作)在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 =”False“接受修改。

这是填充Datagrid的代码C#:

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的一个单元格中的修改记录?

我知道如何用WinForm的DataGridView制作,但我干了。我参观了论坛,问谷歌(当我有疑虑时我最好的朋友;))咨询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;
      }
  }

1 个答案:

答案 0 :(得分:0)

如果您决定使用Entity Framework Model First,可以更容易地映射BD并使用几行代码保存用户修改的实体。

总是当我有这个场景时,我更喜欢在每一行中创建一个保存按钮,单击此按钮将执行您的代码以保存或编辑该行。