WindowsBorm VB.net меняется затем [System.Data.MissingPrimaryKeyException] - PullRequest
0 голосов
/ 02 июля 2018

-Я создал 2 формы после того, как я использовал hide () и show () для переключения между формами.

-Во 2-й форме я создаю таблицу данных (связь с сеткой данных) и первичный ключ для таблицы данных для использования find ().

-После того, как я нажму кнопку [НАЗАД] с формы 2-й формы до 1-й формы (используйте функции hide () и show ()) и вернусь, чтобы снова использовать приложение 2-й формы. ошибка времени выполнения показывает это [System.Data.Missing.PrimaryKeyException: у таблицы нет первичного ключа]

1-я форма

Public Class MainMenu

    Public MainForm As MainMenu
    Public AssetCheckForm As AssetCheck

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        AssetCheckForm.Show()
        MainForm.Hide()

    End Sub

    Public Sub MainMenu_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        MainForm = New MainMenu()
        AssetCheckForm = New AssetCheck()
    End Sub End Class

2-я форма

Dim dtAsset As New DataTable("AssetTable")

Public Sub readData()
        If readStatus = 0 Then
            Try
                Dim splits As String()
                Using sr As StreamReader = New StreamReader(inputcsvname)
                    'read the first line for the table columns
                    splits = sr.ReadLine.Split(","c)
                    For i As Integer = 0 To UBound(splits)
                        dtAsset.Columns.Add(splits(i))
                    Next
                    'read the rest of the lines to add rows
                    Do While Not sr.EndOfStream
                        splits = sr.ReadLine.Split(","c)
                        dtAsset.Rows.Add(splits)
                    Loop
                End Using
            Catch ex As Exception
            Finally

            End Try

            dtAsset_display = dtAsset.Copy()
            totalcount.Text = getRowsCount(dtAsset_display)

            dtAsset.Columns("AsstCode").Unique = True
            dtAsset.PrimaryKey = New DataColumn() {dtAsset.Columns("AsstCode")}

            'bind display part to DataGrid
            DataGrid1.DataSource = dtAsset

Private Sub BackButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonF4.Click
    clearData()
    MainMenu.MainForm.Show()
    MainMenu.AssetCheckForm.Hide()

End Sub

Я думаю, что что-то упустил из концепции VB.net WinForm. Кто-нибудь знает, что означает эта ошибка?

1 Ответ

0 голосов
/ 02 июля 2018

Тот факт, что вы звоните MainForm = New MainMenu() в MainForm, означает, что у вас теперь есть два экземпляра из MainForm.

Итак, когда вы звоните MainMenu.MainForm.Show(), вы показываете свой новый экземпляр, а не существующий.

Вам нужно изменить это так, чтобы сохранить ссылку на существующий MainForm в форме AssetCheckForm.

Примерно так:

Public Class MainMenu

    Private AssetCheckForm As AssetCheckForm

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Me.AssetCheckForm = New AssetCheckForm
        Me.AssetCheckForm.MainMenu = Me
        Me.Hide()
        Me.AssetCheckForm.Show()
    End Sub

End Class

Public Class AssetCheckForm

    Friend MainMenu As MainMenu

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Me.MainMenu.Show()
        Me.Close()
    End Sub

End Class
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...