2010-08-19 137 views
2

我有一個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。

+0

看看myTableAdapter.UpdateCmd.CommandText並在需要時將其發佈到此處。 – 2010-08-19 11:16:32

+0

TableAdapter。Update()返回一個整數結果,其中包含已更改行數的計數...如果它返回0,那麼您的EndEdit()可能不會應用於正確的(即當前活動的編輯中)項目。 – ewall 2010-08-19 13:29:51

+0

@ewall:聽起來像是它;我有多個TableAdapters和BindingSources用於表單上的主 - 細節視圖。如何設置當前活動的編輯源? – Rezzie 2010-08-19 14:38:40

回答

1

你還爲數據源保存了些什麼?其次,確保你的表適配器有有效的更新,插入和刪除命令。即使嚮導說已經完成了,我也遇到了問題,他們沒有填寫。

+0

它使用System.Data.SQLite組件保存到SQLite數據庫。所有TableAdapter都有有效的命令。 – Rezzie 2010-08-22 21:38:25

+0

你有文件作爲你的項目的一部分嗎?如果是這樣,它是否設置爲複製到輸出目錄?我相信我遇到了與Access類似的問題。問題是,當我重新啓動應用程序時,它吹走了我的更改,因爲它一直在拷貝乾淨版本的數據庫到我修改的數據庫上。只是一個想法。 – Wade73 2010-08-23 00:27:14

+0

是的,數據庫正常,因爲對其他表的更改已正確保存。只有客戶表不會保存:/ – Rezzie 2010-08-23 00:53:30