2016-12-29 2 views
0

私は3つのテーブルを持つデータベースを持っています。 また、私は2つのエンティティ(テーブル)のいくつかのプロパティを示すDataGridを持っています。 両方のテーブルから情報を選択するには、正常に動作するストアドプロシージャを使用します。 このデータグリッド内の行を選択したいのですが、ボタンを押すとデータベース内の3番目のテーブルに追加されます。もう1つのボタンは、エンティティのすべての情報(すべてのプロパティ)を表示するためのボタンです。 私はChosenBooksAuthorsの後にXと何をするべきかわかりません - それはXのBookIDでなければなりませんが、私はそれに到達できません、どうすればいいですか?選択した行をテーブルに追加するには? XAML:DataGridからデータベースに選択した行を追加するには?

<Canvas> 
<DataGrid CanUserAddRows="False" x:Name="Info" SelectedItem="{Binding Path=ChosenBooksAuthors}" ItemsSource="{Binding Path=Bookslist}" Background="Honeydew" Canvas.Top="190" Canvas.Left="38" Width="297" Height="105" ></DataGrid> 
</Canvas> 

のC#:

private List<Book> _VMBooksAuthors = new List<Book>(); 

      public List<Book> ChosenBooksAuthors 
      { 
       get 
       { 
        return _VMBooksAuthors; 
       } 
       set 
       { 
        _VMBooksAuthors = value; 
        OnPropertyChanged("ChosenBooksAuthors"); 
       } 
      } 
     private void BasketButton_Click(object sender, RoutedEventArgs e) 
      { 
       Basket b = db1.BasketSet.Where(c => c.BookID == ChosenBooksAuthors.X).FirstOrDefault(); 
       db1.BasketSet.Add(b); 
       db1.SaveChanges(); 


      } 

答えて

1

ChosenBooksAuthorsは収集、選択した項目がブックであるべきです。試してみてください:

<DataGrid CanUserAddRows="False" x:Name="Info" SelectedItem="{Binding Path=Book}" ... 

それともキャスト:

private void BasketButton_Click(object sender, RoutedEventArgs e) 
{ 
    var book = (Book)myDataGrid.SelectedItem; 
    Basket b = db1.BasketSet.FirstOrDefault(c => c.BookID == book.BookID); // No need for where with FirstOrDefault() 
    db1.BasketSet.Add(b); 
    db1.SaveChanges(); 
} 
+0

私は、チェックポイントでそれを確認した場合、私はdb1.BasketSet.Add(b)の中にいることを確認。 b = null しかし、前の行ではプロパティーが必要でした –

+0

これですべてが問題なく、すべてのデータが表示されますが、これを書き込むとdb1.SaveChanges(); throws System.Data.Entity.Validation.DbEntityValidationException –

+0

メッセージの内部例外をチェックします。存在しているか、必須フィールドがないキーを追加しようとしている可能性があります。 –

関連する問題