我有一個windows窗體,其中包含一些與客戶端相關的數據綁定字段。此外,我有一個DataGridView顯示當前顯示的客戶端的訂單。這是通過使用設計時Visual Studio控件實現的(例如項目DataSet,BindingSources TableAdapters和TableAdapterManager。數據集更改沒有被保存到數據庫中
當加載表單以編輯現有客戶端時,它使用ClientsTableAdapter上的(自定義)FillByID方法填充到將DataSet過濾到單個相關的客戶端,將它們的詳細信息加載到客戶端字段中,並正確填充訂單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中和更新命令下面的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
請任何人能提供任何線索?這讓我瘋狂了好幾天!
UPDATE
我重新使用Visual Studio設計從無到有的形式,然後複製粘貼&所有代碼從原來的形式。現在起作用了。我猜想在Designer.cs文件中有一個datasources/databinding字段是錯誤的。
感謝您提供有用的調試提示,ewall和Ladislav Mrnka。
看看myTableAdapter.UpdateCmd.CommandText並在需要時將其發佈到此處。 – 2010-08-19 11:16:32
TableAdapter。Update()返回一個整數結果,其中包含已更改行數的計數...如果它返回0,那麼您的EndEdit()可能不會應用於正確的(即當前活動的編輯中)項目。 – ewall 2010-08-19 13:29:51
@ewall:聽起來像是它;我有多個TableAdapters和BindingSources用於表單上的主 - 細節視圖。如何設置當前活動的編輯源? – Rezzie 2010-08-19 14:38:40