2016-07-15 168 views
2

在我的vb.net项目中,我有3种形式。 home_mdi,ViewfrmAddDatafrmUltraWinGrid自动刷新

Viewfrm上面有一个UltraWinGrid,它正在显示一些数据。当我点击add data按钮时,AddDatafrm打开。数据保存后,表单将关闭。 此时,我想要Viewfrm上的UltraWinGrid更新/刷新并显示我添加的数据。目前,它不显示它,直到我关闭Viewfrm,然后再次打开它。

图片显示了这一点。 (数据根本不存在开始,然后将其添加并没有出现,最终的图像显示的是新的数据形式,我已经重新开放后。

enter image description here

我如何改变这种

当前代码:

,打开添加形式

Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click 

    Using fp = New frmAddData(Globals.m_database) 

     If fp.ShowDialog() = DialogResult.OK Then 

      ugData.DataSource = Nothing 
      getPeople() 

     End If 
    End Using 

End Sub 

要保存输入的信息(添加表格)

Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click 

    Dim m_cn As New OleDbConnection 
    m_cn = Globals.m_database.getConnection() 

    If txtFirstName.Text = "" Then 
     MsgBox("First name cannot be blank") 

    ElseIf txtLastName.Text = "" Then 
     MsgBox("Last name cannot be blank") 

    ElseIf txtAge.Text = "" Then 
     MsgBox("Age cannot be blank") 

    ElseIf txtPostCode.Text = "" Then 
     MsgBox("Postcode cannot be blank") 

    Else 

     Dim personID As Integer = database.SaveNewPerson(txtFirstName.Text, txtLastName.Text, txtAge.Text, txtPostCode.Text, m_cn) 

     MsgBox("Save successful") 

     txtFirstName.Text = "" 
     txtLastName.Text = "" 
     txtAge.Text = "" 
     txtPostCode.Text = "" 
     Globals.savedValue = True 

     Me.Close() 

    End If 

End Sub 

调用来加载,查看表单上的数据库:

Public Sub getPeople() 

    Try 
     Dim sql As String = "SELECT * FROM tblPerson ORDER BY [personID] ASC;" 
     Dim cm As New OleDbCommand(sql, Globals.m_database.getConnection()) 
     Dim da As New OleDbDataAdapter(cm) 
     Dim dt As New DataTable() 
     da.Fill(dt) 
     ugData.DataSource = dt 

    Catch Ex As Exception 
     mdi1.errorLog(Ex.Message, Ex.StackTrace) 
     MsgBox("Failed to retrieve data, refer to error log") 
    End Try 

End Sub 
+1

什么是错的在2天前我给你的那个人? – Steve

+1

@Steve这是因为你使用了“使用fp作为新的frmAddData”语句,它会自动用'frmView'打开'AddData'表单,而我最初只想打开'frmView',但要刷新数据保存表格关闭 – David

+0

该代码应该进入frmView中按钮添加的事件处理程序中。你把它放在哪里? – Steve

回答

1

在WinForm的应用程序,一个模式对话框会自动由发动机如果按下一个按钮关闭,其DialogResult属性设置为什么都没有。然后,Winform引擎将窗体DialogResult设置为该按钮的相同属性,从ShowDialog调用中退出并返回单击按钮的DialogResult属性。
通常这足以应付上述情况。 (或者在用户在“是/否”或“确定”/“取消”情景之间进行选择的一般情况下)

在您的代码中(如聊天中所述),您将Save按钮的DialogResult属性设置为DialogResult.None。这意味着Winforms引擎不会自动关闭表单,而需要编写自己的关闭例程。

但是,如果您忘记将Form属性DialogResult设置为DialogResult.OK,则调用代码将永远无法刷新网格,因为DialogResult.OK测试失败。

所以,无论对关闭代码,你必须关闭fromAddData实例,记得有

Me.DialogResult = DialogResult.OK 

设置窗体DialogResult属性或者,如果事情是出了问题,与

Me.DialogResult = DialogResult.Cancel