2

私の vb.net プロジェクトには、3 つのフォームがあります。home_mdiViewfrmおよびAddDatafrm

Viewfrmその上に UltraWinGrid があり、いくつかのデータを表示しています。add dataボタンをクリックするとAddDatafrm開きます。データが保存されると、フォームは閉じます。この時点で、UltraWinGrid をオンViewfrmにして、追加したデータを更新/更新して表示します。現時点では、閉じViewfrmてから再度開くまで表示されません。

画像はこれを示しています。(データは最初は存在せず、追加されて表示されません。最後の画像は、新しいデータを再度開いた後に表示されるフォームです。

ここに画像の説明を入力

これを変更するにはどうすればよいですか?

現在のコード:

追加フォームを開くには

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
4

1 に答える 1

1

DialogResultWinForm アプリでは、ボタンが押され、そのプロパティが None 以外に設定されている場合、モーダル ダイアログはエンジンによって自動的に閉じられます。次に、Winform エンジンはフォーム DialogResult をボタンの同じプロパティに設定し、ShowDialog 呼び出しを終了して、クリックされたボタンの DialogResult プロパティを返します。
通常、上記のような状況を処理するにはこれで十分です。(または、ユーザーが [はい/いいえ] または [OK/キャンセル] シナリオを選択する一般的な状況)

コードでは (チャットで説明されているように)、[保存] ボタンの DialogResult プロパティが に設定されていますDialogResult.None。これは、Winforms エンジンがフォームを自動的に閉じず、独自の終了ルーチンを作成する必要があることを意味します。

ただし、Form プロパティ DialogResult を DialogResult.OK に設定するのを忘れると、DialogResult.OK のテストが失敗するため、呼び出し元のコードはグリッドを更新できなくなります。

したがって、fromAddData インスタンスを閉じるために必要な終了コードが何であれ、フォームの DialogResult プロパティを設定することを忘れないでください。

 Me.DialogResult = DialogResult.OK 

または、何か問題が発生した場合は、

 Me.DialogResult = DialogResult.Cancel
于 2016-07-15T13:44:07.100 に答える