如何将数据网格中的选定行添加到数据库?

时间:2016-12-29 18:45:43

标签: c# wpf database entity-framework

我有一个包含三个表的数据库。 我还有一个datagrid,它显示了两个实体(表)的几个属性。 要从两个表中选择信息,我使用一个工作正常的存储过程。 我想在这个数据网格中选择一行,按一个按钮,这将被添加到数据库的第三个表中。另一个按钮应该用于显示实体的全部信息(所有属性)。 我不知道在ChosenBooksAuthors之后用X做什么 - 它应该是X的BookID,但我无法达到它,我该怎么办?如何将选定的行添加到表中? XAML:

<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 个答案:

答案 0 :(得分:1)

ChosenBooksAuthors是一个集合,所选项目应该是Book。尝试:

<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();
}