C# 从WPF Datagrid保存对SQL Server数据库的更改

C# 从WPF Datagrid保存对SQL Server数据库的更改,c#,database,datagrid,C#,Database,Datagrid,我正在使用WPF datagrid在SQL Server数据库中显示我的内容。datagrid中的内容绑定到数据库中的视图。我通过以下方式填充datagrid on窗口: this.myAccountantDBDataSet = MyAccountant .MyAccountantDBDataSet(this.FindResource("myAccountantDBDataSet"); // Load data into the table AccountData. this.acco

我正在使用WPF datagrid在SQL Server数据库中显示我的内容。datagrid中的内容绑定到数据库中的视图。我通过以下方式填充datagrid on窗口:

this.myAccountantDBDataSet = MyAccountant
    .MyAccountantDBDataSet(this.FindResource("myAccountantDBDataSet");

// Load data into the table AccountData.
this.accountDataAdapter = new MyAccountant
    .MyAccountantDBDataSetTableAdapters.AccountDataTableAdapter();
this.accountDataAdapter.Fill(myAccountantDBDataSet.AccountData);

System.Windows.Data.CollectionViewSource accountDataViewSource =
    (System.Windows.Data.CollectionViewSource)
    this.FindResource("accountDataViewSource");
accountDataViewSource.View.MoveCurrentToFirst();
我想知道的是,如何将更新、插入和删除保存回数据库,因为我在datagrid中显示的是一个视图。数据库表和视图如下所示:


更新将起作用,因为视图中的字段以1:1的比例映射到基础表中的字段,因此Sql Server将能够将视图中的更新解析回表中(甚至
AccountType

插入将不起作用,因为无法设置
Account.AccountTypeId
,我假设它是必填字段

删除将不起作用,因为Sql Server无法告诉您要删除的表中的哪个记录


我认为在这种情况下,您也可以使用
Accounts
记录,在一个将
AccountData
作为数据源的数据库中显示
AccountData.AccountType
并绑定到
Account.AccountTypeId

更新将起作用,因为视图中的字段以1:1映射到基础表中的字段,所以Sql Server将能够将视图中的更新解析回表(甚至
AccountType

插入将不起作用,因为无法设置
Account.AccountTypeId
,我假设它是必填字段

删除将不起作用,因为Sql Server无法告诉您要删除的表中的哪个记录


我认为在这种情况下,您可以使用
Accounts
记录,并以
AccountData
作为数据源的方式显示
AccountTypeId
,显示
AccountData.AccountType
并绑定到
Account.AccountTypeId

您应该考虑使用
语句和变量/对象的命名约定。这些是一些冗长的标识符。您应该考虑使用
语句和变量/对象的命名约定。这些是一些冗长的标识符。不过我希望将此字段用作文本列。我希望它显示已输入帐户的帐户类型的值。但是,当用户添加新帐户时,他们可以键入帐户类型。我最终希望这个专栏像一个AutoCompleteTextBox,当用户开始键入时,它将显示已经输入的帐户类型的建议,如果用户键入不同的内容,将添加新的类型。我认为您最好开始使用MVVM中的视图模型。您可以在其中定义自动完成列表,并让您的控制器按名称处理id的查找。我希望它显示已输入帐户的帐户类型的值。但是,当用户添加新帐户时,他们可以键入帐户类型。我最终希望这个专栏像一个AutoCompleteTextBox,当用户开始键入时,它将显示已经输入的帐户类型的建议,如果用户键入不同的内容,将添加新的类型。我认为您最好开始使用MVVM中的视图模型。您可以在其中定义自动完成列表,并让您的控制器按名称处理id的查找。