2015-02-04 5 views
1

Access 2013을 통해 SQL 쿼리에서 VB 형식으로 데이터를 반환하려고합니다. 내 코드는 아래에 있습니다.VB.net 콤보 박스 System.Data.DataRowView 표시

Private Sub frm_8_IncidentResponseSelect_Load(sender As Object, e As EventArgs) Handles MyBase.Load 

    Dim dt As New DataTable 
    Dim query As String = "select ([response ID] &' '&[response date]) As responsedetails from response where [incident id] = " & txt_incidentid.Text & " " 
    Using connection As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\MyDatabase" 
     Using command As New OleDbCommand(query, connection) 
      Using adapter As New OleDbDataAdapter(command) 
       connection.Open() 
       adapter.Fill(dt) 
       connection.Close() 
       End Using 
     End Using 
    End Using 

    For Each Data As DataRow In dt.Rows 
     If dt.Rows.Count > 0 Then 
      cb_responseid.DataSource = dt 
      cb_responseid.DisplayMember = "[responsedetails]" 
      cb_responseid.ValueMember = "[response id] 
     End If 
    Next 
End Sub 

나는 그러나 첫째

VB는

가 '새 디스플레이 멤버에 바인딩 할 수 없습니다'다음과 같은 오류 메시지를 반환 코드 cb_responseid의 다음 행을 강조한다 두 가지 오류에 명중하고 .ValueMember = "[응답 ID]

또한 combox 상자의 모든 항목은 System.Data.DataRowView로 반환됩니다.

내 코드가 어떻게/왜 왜 제발 보이게 할 수 있습니까?

답변

1

먼저 당신은 당신의 데이터 소스와의 DataTable을 설정하여 테이블의 행을 통해 루프를 제거하고 DisplayMemberValueMember 속성에 사용되는 문자열 주위에 대괄호를 제거해야

If dt.Rows.Count > 0 Then 
    cb_responseid.DataSource = dt 
    cb_responseid.DisplayMember = "responsedetails" 
    cb_responseid.ValueMember = "responseid" 
End If 

그런 다음에 필요 공백없이 뭔가 이름을 바꾼 후 [response id] 필드를 반환하도록 쿼리를 변경하십시오. 코드는 responsedetails라는 새 필드를 구성하는 해당 필드를 사용하여 소스 필드는 ValueMember

Dim query As String = "select [response id] as responseid, " & _ 
    " ([response ID] &' '&[response date]) As responsedetails " & _ 
    " from response where [incident id] = " & txt_incidentid.Text & " " 

를 들어, 명령 텍스트 합치 문자열을 구축하는 것은 최악의 일이 있다는 사실을 상기 사용하기로 따라서 더 이상 볼 수없는 당신 데이터베이스 프로그래밍으로 할 수 있습니다. 매개 변수가있는 쿼리를 사용하는 방법을 배워야합니다.

내가 바꿀 또 다른 사항은이 필드를 공백과 함께 사용하는 것입니다. 그들은 매우 시끄러운주의 산만하고 그들이 해결하는 것보다 더 많은 문제를 일으킬 수 있습니다.

+0

답장을 보내 주셔서 감사 드리며 가장 자세한 답변 중 하나입니다. 미래의 프로젝트 공간에서 앞으로 나아가는 것은 분명히 번거롭기 때문에 확실히 데이터베이스에서 제거 될 것입니다. 응답 해 주셔서 다시 한 번 감사드립니다. – Boneyt

+0

도움이 될 수있어서 기쁩니다. 여기에 새로운 사용자가 있음을 알고 싶습니다. [답변 수락 방법은 무엇입니까?] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) – Steve

+1

읽고 다시 한 번 고마워요. – Boneyt