2008-09-25 27 views
1

我想知道使用datagrid控件鏈接到數據表的組合(連接)的最佳方式,這種方式既允許在基礎表中創建新行,又可以創建新行刪除。來自SQL服務器的Datagrid使用情況

datagrid似乎提供了後者的功能,但我還沒有找到一種方式,我很高興做的不僅僅是在一個網格上顯示並提供特定的單獨編輯創建和刪除功能。

假設爲說明起見,該數據庫包含: -

客戶表
*客戶ID
*客戶名稱

順序表
*客戶ID
*的OrderLineItem
* OrderLineQuanity

而且我想失去CustomerID用於顯示目的,但希望能夠創建新的客戶並刪除現有的客戶,或許可以通過確認對話。

回答

1

如果關係爲1對多,您可以使用主細節的路線。 [鏈接] [1]

[1]:http://msdn.microsoft.com/en-us/library/aa479344.aspx/「主從」

+0

我可以看到這是如何允許顯示,但不能編輯或刪除。假設,例如,訂單行是正確的,它應該屬於不同的新客戶! – 2008-09-25 18:30:39

1

如果我正確理解你的問題,你必須執行一個連接,你在一個網格中顯示幾個表的查詢。您希望用戶能夠操縱該網格並讓底層表反映這些更改。

一種方法是解決這個問題,就是執行存儲過程來執行CRUD操作。存儲過程將包含從所有必需表中插入,更新和刪除記錄的邏輯。每個過程都需要爲網格上的每個綁定字段提供一個參數。將過程設置爲在數據源上插入,更新和刪除命令。

所以想象一下,如果你正在給電網添加一條新的記錄。網格調用insert命令,將參數傳遞給存儲過程。然後在存儲過程中,您將創建邏輯以確定網格中的新線是否需要新客戶,或者是否爲現有客戶,然後相應地調整操作。

2

CSharpAtl無誤,請使用主控細節控制。在WinForm應用程序中使用它的一個示例是http://msdn.microsoft.com/en-us/library/y8c0cxey.aspx

WinForm DataGrid支持添加,編輯和刪除主記錄和詳細記錄。至於你關於如果你改變一個細節記錄會發生什麼的問題,以便它匹配一個新的主人;這是不可能的。通過設計,「明細行」僅包含與主數據匹配的記錄,但您不能(例如)將訂單更改爲屬於新客戶,因爲明細行不包含任何客戶信息。

如果要將Detail行移動到另一個Master,則必須爲新Master創建新的Detail行,複製舊Detail行中的數據並刪除舊的Detail行。如果您雄心勃勃,您可以支持剪切和粘貼或拖放細節行,但在內部您必須創建/複製/刪除。

相關問題