2016-12-29 59 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

检查消息的内部异常。可能是你试图添加一个存在或缺少必需字段的密钥。 –

相关问题