1

我有一个特定形式的datagridview。在该表单中有一个添加和更新按钮,它将接受详细信息,当单击完成按钮时,我想更新网格视图。但似乎我无法做到这一点,因为我正在从另一个表单添加/更新详细信息。

第一个表单(绑定数据,进入更新/添加按钮表单):

Private Sub bindStudentsData()
    Dim db As New Database()

    DataGridView1.DataSource = Nothing
    DataGridView1.DataSource = New BindingSource(db.getStudentList(), Nothing)

End Sub


Private Sub addBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles addBtn.Click
    Dim sf As New StudentForm()
    sf.Show()
End Sub

Private Sub updateBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles updateBtn.Click
    Dim sid As String = DataGridView1.SelectedRows(0).Cells("studentid").Value

    Dim sf As New StudentForm(sid)
    sf.Show()
End Sub

*通过使用 .show() 之前的表单保持打开状态并打开另一个表单

然后在输入详细信息并单击完成第二个表格后:

Private Sub doneBtm_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles doneBtm.Click
    Dim db As New Database()
    If type Is "add" Then
        'go to add
        MsgBox(type)
    Else
        'go to update
        db.updateStudentDetails(sid, astudentnumberText.Text, afirstnameText.Text, 
                     _alastnameText.Text, amiddlenameText.Text, asectionText.Text)
        Me.Close()
    End If
End Sub

单击第二个表单上的完成按钮后,我需要在第一个表单中重新绑定 datagridview。我怎么能那样做?有任何想法吗?谢谢!

4

4 回答 4

1

最简单和更好的方法是简单地使用ShowDialog()而不是Show(). 它会阻止您当前的表单,直到您关闭新打开的表单。然后调用你的bindStudentsData(). 没有更多的变化

Private Sub updateBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles updateBtn.Click
    Dim sid As String = DataGridView1.SelectedRows(0).Cells("studentid").Value    
    Dim sf As New StudentForm(sid)
    sf.ShowDialog()
    bindStudentsData()
End Sub

第二种方法(你想要的)。复杂,但如果您不愿意不惜一切代价使用 ShowDialog

公开您的bindStudentsData()表格并制作当前表格,Owner下一个表格

Private Sub updateBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles updateBtn.Click
    Dim sid As String = DataGridView1.SelectedRows(0).Cells("studentid").Value    
    Dim sf As New StudentForm(sid)
    sf.Owner = Me
    sf.Show()
    bindStudentsData();
End Sub

现在您可以通过使用以第二种形式访问第一种形式Owner,因此您也可以调用第一种形式的方法。只需bindStudentsData()在关闭第二个表格之前致电

Private Sub doneBtm_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles doneBtm.Click
    Dim db As New Database()
    If type Is "add" Then
        'go to add
        MsgBox(type)
    Else
        'go to update
         db.updateStudentDetails(sid, astudentnumberText.Text, afirstnameText.Text, 
                 _alastnameText.Text, amiddlenameText.Text, asectionText.Text)
         Dim f1 As Form1 = TryCast(Me.Owner, Form1);
         // I have supposed that your first Form is Form1
         f1.bindStudentsData()
         Me.Close()
    End If
End Sub
于 2012-11-15T18:39:40.940 回答
0

完成后,您可以将数据保存在 db 中,然后回调您要刷新的表单。并且绑定将使用其中的更新/新数据刷新...

从@kush 的评论中,如果您希望在工作完成后关闭第二个表单,您可以在 Response 中添加一个脚本标签来关闭页面。

于 2012-11-15T13:57:33.327 回答
0

我知道问题发布已经有一段时间了,但我使用了另一种解决方案,有些人可能会觉得它很有用。

在 form1 中,我打开我的第二个表单:

Dim frm As New Form1()
frm.ShowDialog()

然后,在第二种形式中,当我按下OK 按钮时,我写道:

DialogResult = Windows.Forms.DialogResult.OK
Me.Close()

最后,在 form1 中,我在下面添加了这些行frm.ShowDialog()

If frm.DialogResult = Windows.Forms.DialogResult.OK Then
    reaload_DTGV()
End If

使用此方法,您可以将 datagridview 的方法从 form1 保留为 Private

于 2017-04-21T13:49:21.863 回答
-1

这是我使用数据绑定源的方法:

在我的表单1中的按钮编辑中:

edit_product.Show()
edit_product.Item_numTextBox.Text = Item_numTextBox.Text
Me.Close()

然后在我的form2中:

Private Sub Item_numTextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Item_numTextBox.TextChanged
      InventoryBindingSource.Filter = "[item_num] like '%' + '" & Item_numTextBox.Text & "' + '%'"
End Sub
于 2021-02-09T11:12:13.027 回答