Windows Forms DataGridView - добавляет слишком много строк - PullRequest
0 голосов
/ 25 апреля 2019

Устранение неполадок в существующем приложении Windows Form на работе.При нажатии кнопки «Добавить аналит» должны появиться 5 строк, и они появляются (иногда это еще одна ошибка).При выборе другого аналита и повторном нажатии «Добавить аналит» должны появиться еще 5 строк.В результате появится еще одна строка для предыдущего аналита и 6 строк для второго аналита.

beforeAdd afterAdd

Я пробовал довольно много вещей - возиться с циклом For, который добавляет строки и удостоверяясь, чтоDataGridView.AllowUserToEdit имеет значение FALSE.Я запускал отладчик несколько раз, и это код сразу после того, как число строк переходит от 5 до 12.

 Private Sub FillerUpToolStripButton_Click(sender As Object, e As EventArgs) Handles FillerUpToolStripButton.Click

        Try
            Me.TblQCResultsTableAdapter.FillerUp(Me.DbCalcsDataSet.tblQCResults, New System.Nullable(Of Integer)(CType(QCIDToolStripTextBox.Text, Integer)))
        Catch ex As System.Exception
            System.Windows.Forms.MessageBox.Show(ex.Message)
        End Try

    End Sub

Ожидаемый результат: должно быть 5 строк для начала, затем всего 10 строк после этого,Здесь задействованы и другие функции, но именно здесь отладчик показал мне, что при добавлении rowCount изменяется от 5 до 12.

UPDATE

Вот еще немного кода, который поможет объяснить этот вопрос.Сначала приведем код для нажатия кнопки AddAnalyte:

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

        If Me.cmbAnalytes.SelectedIndices.Count = 0 Then Exit Sub
        If Me.dgvPatientReview.RowCount > 0 Then

            Me.Validate()
            Me.TblQCResultsBindingSource.EndEdit()
            Me.TblQCResultsTableAdapter.Update(Me.DbCalcsDataSet.tblQCResults)

        End If

        For i = 0 To Me.cmbAnalytes.SelectedIndices.Count - 1
            AddFiveAnalytes(Me.cmbAnalytes.SelectedItems(i))
        Next

        Me.cmbAnalytes.ClearSelected()

        UpdateTable()

    End Sub

Возможно, именно в этом и заключается проблема - поскольку это хорошо в первый раз и ломается после добавления дополнительных строк.Я не уверен, что он на самом деле делает в операторе if «If me.dgvPatientReview.RowCount> 0 then ...»

Подпрограмма AddFiveAnalytes также может быть проблемой:

    Public Sub AddFiveAnalytes(ByVal test As String)

        Using cmd As New OleDb.OleDbCommand
            For i = 0 To 5
                cmd.Connection = con
                cmd.CommandText = "INSERT into tblQCResults (QCID, Analyte, [Within Tolerance], RevisedReport) VALUES (@QCID, @Analyte, 0, 0);"
                cmd.Parameters.AddWithValue("@QCID", intIncidence)
                cmd.Parameters.AddWithValue("@Analyte", test)

                cmd.ExecuteNonQuery()

            Next
        End Using

    End Sub

Тогда может возникнуть проблема с Sub-файлом UpdateTable:

   Public Sub UpdateTable()

        Dim Boo As Boolean = False

1:
        con.Close()
        con.Open()

        FillerUpToolStripButton.PerformClick()

        Dim intA As Integer = aRound(Me.dgvPatientReview.RowCount / 5, 0)

        If Not (Me.dgvPatientReview.RowCount / 5).ToString = intA.ToString Then
            If Boo = True Then
                MsgBox("There is an error in attempting to add 5 new lines. If you need more lines than are being shown, add 5 more. Any lines not used will be deleted when you save.")
                GoTo 2
            Else
                Boo = True
                GoTo 1
            End If
        End If
2:
        For i = 0 To Me.dgvPatientReview.RowCount - 1
            If Me.dgvPatientReview.Item(10, i).Value = True Then
                dgvPatientReview(11, i).Style.BackColor = Color.LightYellow
            Else
                dgvPatientReview(11, i).Style.BackColor = Color.Silver
            End If
        Next

    End Sub

Я надеюсь, что эта информация поможет ответить на эту проблему.VBA определенно не мой сильный костюм!

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