0

私は2つのフォームを持っています:

  1. 編集者
  2. テーブル

「エディター」フォームには、F5 キーが押されたときに「テーブル」フォームを開く「KeyDown」イベントがあります。

    Private Sub DataGridView_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DataGridView.KeyDown
    Select Case e.KeyCode
        Case Keys.Delete
            For Each Row As DataGridViewRow In DataGridView.Rows
                If Row.IsNewRow Then
                    DataGridView.Rows.Remove(Row)
                End If
            Next
        Case Keys.F5
            Tabels.Show()
    End Select
End Sub

「テーブル」フォームには、List(Of String) を取得してループし、フォームのデータグリッドビューに行を追加するコードがあります。

        Dim Tables As List(Of String)
    Tables = NAV2013BLOBReader.ReturnXML("SELECT [Metadata] FROM dbo.[Object Metadata] WHERE [Object Type] = 1")

    'Sæt egenskaber på datagridview
    DataGridView.AutoGenerateColumns = False

    Dim Row As DataGridViewRow = DataGridView.Rows(0).Clone()
    For Each Line As String In Tables
        If Line.Contains("MetaTable") Then
            Dim LanguageStartIndex As Integer = Line.IndexOf("CaptionML=""") + 15
            Dim LanguageEndIndex As Integer = Line.IndexOf(";", LanguageStartIndex)

            Dim IdStartIndex As Integer = Line.IndexOf("ID=""") + 4
            Dim IdEndIndex As Integer = Line.IndexOf(""" CaptionML") - IdStartIndex

            Dim NameStartIndex As Integer = Line.IndexOf("Name=""") + 6
            Dim NameEndIndex As Integer = Line.IndexOf(""" LookupFormID") - NameStartIndex

            'Tildel cellerne værdier
            Row.Cells(0).Value = Line.Substring(IdStartIndex, IdEndIndex)
            Row.Cells(1).Value = Line.Substring(NameStartIndex, NameEndIndex)
            Row.Cells(2).Value = Line.Substring(LanguageStartIndex, LanguageEndIndex - LanguageStartIndex)

            DataGridView.Rows.Add(Row)
            DataGridView.Refresh()
        End If
    Next

    DataGridView.AllowUserToAddRows = False

問題は、ループが 2 回繰り返されると、フローがループを終了し、KeyDown イベントに戻って終了することです。

ステートメント内のコードを空にしてIf Line.ContainsMessageBox を挿入すると、すべてが正常に繰り返されます。

誰かが答えを知っていることを願っています。

よろしくお願いします!

編集:それが間違っていることがわかりますがDataGridView.Rows.Add(Row)、理由はわかりません。

編集:「For Each」ループを「For」ループに変更し、最後に追加された行を複製することで修正しました。

For i = 0 To Tables.Count - 1
        Dim Row As DataGridViewRow = DataGridView.Rows(i).Clone()
        If Tables(i).Contains("MetaTable") Then
            Dim LanguageStartIndex As Integer = Tables(i).IndexOf("CaptionML=""") + 15
            Dim LanguageEndIndex As Integer = Tables(i).IndexOf(";", LanguageStartIndex)

            Dim IdStartIndex As Integer = Tables(i).IndexOf("ID=""") + 4
            Dim IdEndIndex As Integer = Tables(i).IndexOf(""" CaptionML") - IdStartIndex

            Dim NameStartIndex As Integer = Tables(i).IndexOf("Name=""") + 6
            Dim NameEndIndex As Integer = Tables(i).IndexOf("""", Tables(i).IndexOf("Name=""") + 6) - NameStartIndex

            'Tildel cellerne værdier
            Row.Cells(0).Value = Tables(i).Substring(IdStartIndex, IdEndIndex)
            Row.Cells(1).Value = Tables(i).Substring(NameStartIndex, NameEndIndex)
            Row.Cells(2).Value = Tables(i).Substring(LanguageStartIndex, LanguageEndIndex - LanguageStartIndex)

            'Tilføj række til DataGridView og opfrisk kontrollen, så at de nye rækker bliver vist med det samme
            DataGridView.Rows.Add(Row)
            DataGridView.Refresh()
        End If
    Next
4

1 に答える 1