2013-02-27 3 views
0

Я создал элемент управления datagridview с комбинированным полем в vb.Net 2008. В приведенном ниже коде я извлекаю несколько строк данных и настраиваю свой datagrid, чтобы правильно отображать данные , Для всех возвращенных строк я могу заполнить поле со списком каждой строки в datagrid без проблем.Как правильно заполнить поле со списком datagridview VB.net

Когда я пытаюсь автоматически выбирать значения (ы) при извлечении данных для конкретной записи, все комбинированные поля неправильно заполняются с тем же значением.

В приведенном ниже коде '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 

Любые советы приветствуются!

ответ

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() 
Смежные вопросы