我有一个小问题,我无法弄清楚。我的应用程序中有一个名为FORM1的表单。在按钮上单击SEARCH - 我在DATAGRIDVIEW中显示用户数据。所以现在我有数据 - 用户可以选择添加一个新客户端,所以他们点击一个按钮,我就会弹出一个新表单。我没有关闭FORM1 - 我把它留下来并创建一个像这样的新孩子......
Dim NewMDIChild As New frmNewClient()
NewMDIChild.MdiParent = MDIContainer
NewMDIChild.Show()
MDIContainer.Show()
现在,用户可以输入数据并将其保存在frmNEWCLIENT上。完成后,他们点击一个名为DONE的按钮,将它们带回FORM1。在这里,我希望刷新网格,以便它包括新客户端。但我不知道怎么做!
我尝试在表单的Activate Event中执行此操作 - 但在这种情况下 - 当我最初打开FORM1时,网格会被加载 - 这是我不想要的。当用户打开FORM时,我希望网格为空。我只想在用户关闭FRMNEWCLIENT时重新加载它。
我希望我能说清楚。谢谢!
答案 0 :(得分: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
Edit / New表单,INSERTS或UPDATES根据需要使用自己的SQL语句记录,直接作用于db。之后,该方法仅用作通知程序。结果:
“婴儿形式”能够添加或编辑记录,在任何一种情况下,它“告诉”主要形式它已经这样做了。 DataGridView
只是表明它得到了通知,它可能实际上并不存在。
即使您正在编写旧式的以表单为中心的应用程序,也可以利用NET提供程序的功能。也就是说,不同的参与者(表单)可以对单个数据源进行更改,因此所有相关方都可以立即看到任何更改。您只需要提供一些数据对象。
即使对ADD和EDIT以及UPSERT方法使用相同的表单,编辑/添加表单独立行动所涉及的代码也比使用通用数据源要多5倍。