2013-02-27 3 views
0

vb.Net 2008의 콤보 상자로 datagridview 컨트롤을 만들었습니다. 아래 코드에서 여러 행의 데이터를 검색하고 데이터를 올바르게 표시하도록 datagrid을 구성합니다. . 반환 된 모든 행에 대해 datagrid에있는 각 행의 콤보 상자에 아무런 문제없이 채울 수 있습니다.VB.net datagridview 콤보 상자를 올바르게 채우는 방법

특정 레코드의 데이터를 검색 할 때 값을 자동 선택하려고하면 모든 콤보 상자에 동일한 값이 잘못 입력됩니다.

아래 코드에서 '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 

모든 조언을 크게 듣습니다!

답변

0

상황을 파악했습니다. 값을 콤보 상자로 읽는 방법을 변경했습니다. 내가 편한 편 (레코드 세트)을 사용하여 datareader로 전환했다. 훨씬 쉽고 적은 코드.

 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() 
관련 문제