2016-11-22 75 views
1

我有一個小問題,我無法弄清楚。我在我的應用程序FORM1中有一個表單。在按鈕上單擊搜索 - 我在DATAGRIDVIEW中顯示用戶數據。所以,現在我有數據 - 用戶可以選擇添加一個新的客戶端,所以他們點擊一個按鈕,我有一個新的窗體彈出。我不關閉Form1 - 我離開它,因爲它創造這樣一個新的子....子窗體 - 在激活的事件上執行操作

Dim NewMDIChild As New frmNewClient() 
NewMDIChild.MdiParent = MDIContainer 
NewMDIChild.Show() 
MDIContainer.Show() 

現在,用戶可以輸入數據並保存在frmNEWCLIENT。完成後,他們單擊一個名爲DONE的按鈕,將其返回到FORM1。在這裏我想要刷新網格,以便它包含新客戶端。但我不知道如何!

我嘗試過在窗體的激活事件中這樣做 - 但在這種情況下 - 網格在我最初打開FORM1時被加載 - 我不想要。我希望網格在用戶打開FORM時爲空。我只想在用戶關閉FRMNEWCLIENT時重新加載它。

我希望我很清楚。謝謝!

+0

如果您正在添加到底層數據源,則不需要刷新 - 它將自動存在。 – Plutonix

+0

@plutonix我將它保存到sql服務器 - 我使用數據集加載我的網格 - 但我不知道它是否仍然綁定 - siince它不顯示新記錄。一旦我再次搜索所有記錄,它會向我顯示已添加的新記錄。它適用於其他情況下,我有標籤,但我在每種情況下我必須調用我的函數加載網格才能看到新的數據。與選項卡它不同的情況 - 在這裏我不知道。如果我應該在表單初始激活時設置一個標誌,並且只有在我從其他表單返回時才重新加載該標誌? – BobSki

+0

好吧,數據集包含表是數據源。如果向該DataTable添加新記錄,只要與該當前過濾器匹配,它們就會自動在使用該DataTable的任何內容中可見。選項卡,表單控件 - 這些都不重要 – Plutonix

回答

2

聽起來像你正在尋找一種方式來知道另一種形式的數據庫變化。給定一個表單添加或編輯一行,每當另一種形式添加/更改或刪除一行,你可以調用一個方法:

Public Sub SampleDSChanged() 
    daSample.Fill(dtSample)  ' refresh 
    dgv1.FirstDisplayedScrollingRowIndex = dgv1.RowCount - 1 
End Sub 

在添加表格/編輯記錄:

dbcon.Open() 
Dim rows = cmd.ExecuteNonQuery() 
If rows > 0 Then 
    frmMain.SampleDSChanged() 
End If 

編輯/新窗體,插入或更新記錄根據需要使用自己的SQL語句,直接作用於數據庫。之後,該方法僅充當通知者。結果:

enter image description here

的「嬰兒形式」能夠添加或編輯記錄,在任何情況下,「告訴」的主要形式,它已經這樣做了。 DataGridView只是表明它得到了通知,它可能並不存在。


即使您正在編寫以學校爲中心的舊式應用程序,也可以利用.NET提供程序的功能。也就是說,不同的參與者(表單)可以對單個數據源進行更改,以便所有相關方立即看到所做的更改。你只需要製作一些可用的數據對象。

即使對於ADD和EDIT和UPSERT方法使用相同的表單,與使用公共數據源一起工作時,編輯/添加表單獨立操作的代碼也會多出大約五倍。

+0

感謝您的詳細示例。 – BobSki

+0

我完全同意 - 在這裏完成的方式非常古老。但我希望我能看到一個完整的例子,說添加/編輯所有使用相同的數據源(從你在上個月告訴我,或者聽起來像這將是幾乎可以在這個應用程序中使用的東西)。另外有時我們所做的不是簡單地添加編輯更新,因爲我們將更改記錄在編輯的特殊表格中,我們記錄了我們的DELETES,而不是。我剛剛開始用vb.net編程 - 大部分時間我都在做所有vb6 – BobSki

+1

我已經給你[此鏈接](http://stackoverflow.com/a/33702351)。一旦你有一個配置的DA,你不需要任何其他SQL或DB代碼來維護表格;你可以做*真正*刷新 - DA自己挑選行更改。搜索只是應用行過濾器的問題。這並不排除捎帶審計/記錄。順便說一句老學校提到程序規劃vs更多的OO。而不是用100行代碼複製其他形式的表單,客戶(或Widget或其他)類負責 – Plutonix