2016-12-26 6 views
1

私は(Entity Frameworkの経由)、私は、データベースへのeditted細胞のすべてを保存したい ...その細胞のいずれか、または編集可能読み取り専用ことができます(ダブルクリックして)編集可能なデータグリッドを作成したいと思います...WPF GridViewを編集してデータベースに保存する方法は?

いくつかの列では、テキストフィールドの代わりにコンボボックスを表示する必要があります。

これを達成するにはどうすればよいですか?

答えて

2

MVVMを使用しているかどうかによって異なります。

いずれの方法で保存するかを決める必要があります。保存ボタンはありますか?または、編集内容が作成されるとすぐに保存されます。 (最後の1つはあなたのDBにとってひどいですが、あなた次第です)

編集では、キャプチャできるイベントが生成されます。また、保存ボタンをクリックするとイベントが発生します。

保存ボタン 保存ボタンが必要な場合があります。

ボタンのクリックイベントが発生すると、コードを呼び出してdbに保存します。あなたのdbを知らないと、これはUIスレッド上で発生しないように、これを別のスレッドにファーム化する必要があることを除いては、はるかに多くを伝えることはできません。詳細はTask.Runを見てください。

編集時に保存 基本的には上記と同じですが、あなたはもっと頻繁に会話を終えることになります。それぞれのキーを押すと実際には、それはなぜあなたのデータベースでより難しいです。 基本的に、キー押しまたはキーアップイベントをトラップしてから、情報をDBに保存します。

+0

は、あなたの助けのためにどうもありがとうございます。 私はMVVMを使用せず、私のデータベースはSQL Serverです。 –

1

使用このコード:

public class Window2Viewmodel : INotifyPropertyChanged 
    { 
     public Window2Viewmodel() 
     { 
      MyDbContext myDbContext = new MyDbContext(); 
      Customers = new ObservableCollection<Customer>(myDbContext.Customers.Include("Cars").ToList()); 
      SaveCommand = new RelayCommand(() => 
      { 
       myDbContext.SaveChanges(); 
      }); 
     } 

     private ObservableCollection<Customer> _customers; 

     public ObservableCollection<Customer> Customers 
     { 
      get { return _customers; } 
      set 
      { 
       if (_customers != value) 
       { 
        _customers = value; 
        OnPropertyChanged(); 
       } 
      } 
     } 


     public event PropertyChangedEventHandler PropertyChanged = delegate { }; 
     public void OnPropertyChanged([CallermemberNmae]string propertyName = null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 

     public RelayCommand SaveCommand { get; set; } 
    } 

そして、このXAMLコード:

<Window.Resources> 
     <local:Window2Viewmodel x:Key="VM"/> 
    </Window.Resources> 
    <Grid DataContext="{Binding Source={StaticResource VM}}"> 
     <DataGrid Name="testDataGrid" ItemsSource="{Binding Customers}" AutoGenerateColumns="False"> 
      <DataGrid.Columns> 
       <DataGridTextColumn Binding="{Binding FName}" Header="Name"/> 
       <DataGridTextColumn Binding="{Binding LName}" Header="Lastname"/> 
      </DataGrid.Columns> 
     </DataGrid> 
     <Button Content="Save" VerticalAlignment="Bottom" Command="{Binding SaveCommand}"/> 
    </Grid> 
+0

ご協力ありがとうございます。完全なサンプルコードを教えていただけますか? –

関連する問題