2016-12-29 85 views
0

我有一個有三個表的數據庫。 另外我有一個datagrid顯示兩個實體(表)的幾個屬性。 要從兩個表中選擇信息,我使用可正常工作的存儲過程。 我想選擇這個數據網格中的一行,並按下一個按鈕,這將被添加到數據庫中的第三個表中。另一個按鈕應該是顯示實體的全部信息(所有屬性)。 我不知道如何處理ChosenBooksAuthors後的X - 它應該是BookID的X,但我無法達到它,我該怎麼辦?如何將選定的行添加到表中? 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

現在everyting是好的,所有數據存在,但當我寫這個:db1.SaveChanges(); 它拋出 System.Data.Entity.Validation.DbEntityValidationException –

+0

檢查消息的內部異常。可能是你試圖添加一個存在或缺少必需字段的密鑰。 –

相關問題