0

datagridviewvb.Net 2008 でコンボ ボックスを使用してコントロールを作成しました。以下のコードでは、複数行のデータを取得datagridし、データを適切に表示するように構成しています。返されたすべての行について、各行のコンボ ボックスにdatagrid問題なく入力できます。

特定のレコードのデータを取得するときに値を自動選択しようとすると、すべてのコンボ ボックスに誤って同じ値が入力されます。

以下のコードでは、「Populate the Grid Combo」コードは、値をコンボ ボックスにロードする方法を表しています。「特定のレコードを作成する」コードは、私が問題を抱えていると思われる場所です。すべてのレコードのコンボ ボックスが同じ値を返すのはなぜですか? 非コンボボックスが適切に設定されているため、ループが正しいことはわかっています。

'Populate the Grid Combo
            conCombo.Open(sConnectionString)

        'Populate the Referral Reason combo box
        sSQL = "SELECT Referral_Reason_Id, Referral_Reason FROM Referral_Reason WHERE DELETED = FALSE ORDER BY SortOrder"

        cmdCombo = New ADODB.Command
        cmdCombo.ActiveConnection = conCombo
        cmdCombo.CommandText = sSQL
        rsCombo = cmdCombo.Execute

        i = 0
        Do While i < dgPPV.RowCount
            Do While Not rsCombo.EOF
                Dim dgvcc As DataGridViewComboBoxCell
                dgvcc = dgPPV.Rows(i).Cells(3)
                dgvcc.Items.Add(New MyListItem(rsCombo.Fields(1).Value, rsCombo.Fields(0).Value))
                rsCombo.MoveNext()
            Loop
            rsCombo.MoveFirst()
            i = i + 1
        Loop

        If rsCombo.State Then rsCombo.Close()
        If conCombo.State Then conCombo.Close()
        If cmdCombo.State Then cmdCombo.ActiveConnection = Nothing


'Populate specific record
        Sub GetPPVGridData()

        Dim i As Integer

        CloseConnectionString()
        con.Open(sConnectionString)

        sSQL = "SELECT Policy.PolicyDescription, Referral_Reason.Referral_Reason, ERS_Outcome.Outcome_Description, Audit_Outcome.Comment "
        sSQL = sSQL & "FROM ((Audit_Outcome INNER JOIN Referral_Reason ON Audit_Outcome.Referral_Reason_Id = Referral_Reason.Referral_Reason_Id) INNER JOIN Policy ON Audit_Outcome.Policy_Id = Policy.Policy_ID) INNER JOIN ERS_Outcome ON Audit_Outcome.Outcome_Id = ERS_Outcome.Outcome_Id "
        sSQL = sSQL & "WHERE Audit_Outcome.Referral_Id = " & lblReferralId.Text

        cmd = New ADODB.Command
        cmd.ActiveConnection = con
        cmd.CommandText = sSQL
        rs = cmd.Execute

        Do While Not rs.EOF
            For i = 0 To dgPPV.RowCount - 1
                If dgPPV.Rows(i).Cells("dgPPVDescription").Value = rs.Fields(0).Value Then
                    dgPPV.Rows(i).Cells("dgCheckPPV").Value = True
                    dgPPV.Rows(i).Cells("dgPPVDescription").Value = rs.Fields(0).Value
                    dgPPV.Rows(i).Cells("dgPPVReferralReason").Value = rs.Fields(1).Value
                    dgPPV.Rows(i).Cells("dgPPVOutcome").Value = rs.Fields(2).Value
                    dgPPV.Rows(i).Cells("dgPPVComment").Value = rs.Fields(3).Value
                End If
            Next
            rs.MoveNext()
        Loop
        CloseConnectionString()

    End Sub

どんなアドバイスでも大歓迎です!

4

1 に答える 1

0

私は状況を理解しました。コンボボックスへの値の読み取り方法を変更しました。使い慣れたもの(レコードセット)からデータリーダーに切り替えました。はるかに簡単で少ないコード。

        oConn.Open()
    oCmdSelect.CommandText = "SELECT Referral_Reason_Id, Referral_Reason FROM Referral_Reason WHERE DELETED = FALSE ORDER BY SortOrder"
    oCmdSelect.Connection = oConn
    oReader = oCmdSelect.ExecuteReader

    While oReader.Read
        dgPPVReferralReason.ValueMember = oReader.Item(0)
        dgPPVReferralReason.DisplayMember = oReader.Item(1).ToString
        dgPPVReferralReason.Items.Add(oReader.Item(1).ToString)
    End While

    oConn.Close()
    If oConn.State Then oConn.Close()
于 2013-02-28T12:43:23.310 に答える