2009-09-02 29 views
0

簡而言之:我有一個DataSet,其中包含多個DataTable,它們通過多個DataRelations連接。我在這個DataSet上使用數據綁定創建了一個表單,並且可以說它非常複雜。數據綁定,包含數據的數據集以及從數據庫刷新單個DataTable

場景是下一個:窗體的主要目的是插入一條新記錄。要插入它,必須設置各種親子關係。對於數據綁定,這一切都可以正常工作,但問題在於:當用戶想爲這些父子關係中的一個輸入新的「孩子」時,新的表單打開,他輸入它,yada yada yada,作品。麻煩的是 - 我應該如何將新數據恢復到原始形式,以便出現在父子組合框中?

我知道的一種方法是刷新整個表單;但我正在尋找一種解決方案來刷新包含該數據的DataTable。我試圖獲得來自DB新鮮數據的新數據表,並在DataSet中的DataTable合併,但它不工作:「子行有多個家長」異常被拋出:

// basically just a Select * using dataadapter, 
// nothing programmatically added 
DataTable table = tableModule.GetPlainTable(); 
existingDataSet.Tables["tableName"].Merge(table); 

等效我想要做的一個例子是有一個Order窗體,其上帶有Customer組合框。在組合框的右側,有一個「添加」按鈕,打開一個新的「添加客戶」表單。在DB中,「Customers」表與「Cities」表有關,並且該數據在Orders表單中也被鏈接在數據綁定中...

編輯:我可以想到的一種解決方案是「手動」循環遍歷新的DataTable,並找到DataSet中原始DataTable中沒有的所有行,但我不確定這是否可行...

任何幫助/建議/解釋/推向正確的方向將不勝感激:)

回答

0

嗯,我有點解決了與手動行復制插入後的第二種形式的問題......我創建了一個事件與對象集合(行項目數組),在第一種形式登記在該事件的處理程序,我在其中通過手動添加新行:

data.Tables["tableName"].Rows.Add(e.RowItems); 

之後,我調用acceptChanges()在該行使其狀態不變,而不是加...

該解決方案雖然快捷,但工作正常。問題是,我認爲有一個更好的,更「數據綁定」的哲學導向...:=)

相關問題