我有一个窗口表单,其中包含许多与客户端相关的数据绑定字段。另外,我有一个DataGridView显示当前显示的客户端的订单。这是使用设计时Visual Studio控件实现的(例如,项目DataSet,BindingSources TableAdapters和TableAdapterManager。
加载表单以编辑现有客户端时,将使用ClientsTableAdapter上的(自定义)FillByID方法填充该表单,以将DataSet过滤到单个相关客户端。这会将其详细信息加载到客户端字段中,并正确填充订单DataGridView。
我对客户端订单(在DataGridView中)所做的任何更改都会在保存时保留到数据库,但是,没有任何客户端详细信息字段。它们是可编辑的,并在加载时显示正确的详细信息,但在关闭表单时不会保存所做的更改。我现在尝试了两种不同的方法来保存它们,第一种方法是保存订单:
this.Validate();
this.clientordersBindingSource.EndEdit();
this.clientsBindingSource.EndEdit();
this.clientordersTableAdapter.Update(projectDataSet.clientorders);
this.clientsTableAdapter.Update(projectDataSet.clients);
...第二个使用MSDN上的multiple table example。遗憾的是,这两种方法都不适用于客户详细信息 - 尽管客户订单的更改仍然存在。
我的客户表格具有以下结构:
refnumber, title, forename, surname, gender, dob, contactnumber
clientsTableAdapter分别具有DeleteCommand,InsertCommand,SelectCommand和UpdateCommand的以下CommandText字符串:
DELETE FROM clients WHERE (refnumber = @Original_refnumber)
INSERT INTO clients (refnumber, title, forename, surname, gender, dob, contactnumber) VALUES (@refnumber, @title, @forename, @surname, @gender, @dob, @contactnumber)
SELECT refnumber, title, forename, surname, gender, dob, contactnumber FROM clients
UPDATE clients SET refnumber = @refnumber, title = @title, forename = @forename, surname = @surname, gender = @gender, dob = @dob, contactnumber = @contactnumber WHERE (refnumber = @Original_refnumber)
保存时,如果我添加一个变量来捕获此行的结果:
var res = this.clientsTableAdapter.Update(projectDataSet.clients);
projectDataSet.clients.Count == 1
projectDataSet.clients.Rows[0].ItemArray
显示已修改的字段。projectDataSet.clients.Rows[0].RowState == Unchanged
res == 0
任何人都可以提供任何提示吗?这让我疯了几天!
更新
我使用Visual Studio设计器从头开始重新创建表单,然后复制&粘贴原始表单中的所有代码。它现在有效。我想Designer.cs文件中的一些数据源/数据绑定字段肯定是错误的。
感谢有用的调试提示,ewall和Ladislav Mrnka。
答案 0 :(得分:1)
您还为数据源保存了什么?其次,确保您的tableadapters具有有效的更新,插入和删除命令。我有一些问题,即使向导说它已经完成它们也没有填写。