2016-08-16 2 views
0

데이터 테이블에 2 개의 열이 있으며 둘 다 콤보 상자 (여러 열 드롭 다운 목록)의 드롭 다운 목록에 표시됩니다. 이제는 하나의 열을 콤보 박스에 표시하고 다른 열은 texbox에 표시하려고합니다 (데이터 바인딩 사용). 코드는 작동하지만 1 문제 - 폼이 열리고 텍스트 상자가 비어있을 때 combobox.selectedIndex -1을 갖기를 원합니다. 콤보 박스는 문제가 아니지만 Texbox는 텍스트를 지울 수 없습니다. 여기 내 코드는 다음과 같습니다.combobox 항목에 텍스트 상자를 바인딩

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

     Dim SQL As String = "SELECT Name,Surname from MyTable" 

     Dim dtb As New DataTable() 
     dtb.Columns.Add("Name", System.Type.GetType("System.String")) 
     dtb.Columns.Add("Surname", System.Type.GetType("System.String")) 

     Using con As OracleConnection = New OracleConnection("Data Source=MyDB;User Id=Lucky;Password=MyPassword;") 

      Try 

       OraclePovezava.Open() 

       Using dad As New OracleDataAdapter(SQL, con) 
        dad.Fill(dtb) 

       End Using 

       Combobox1.DataSource = dtb 
       Combobox1.DisplayMember = "Surname" 
       Combobox1.AutoCompleteMode = AutoCompleteMode.Suggest 
       Combobox1.AutoCompleteSource = AutoCompleteSource.ListItems 
       con.Close() 

      Catch ex As Exception 
       'MessageBox.Show(ex.Message) 
      Finally 
       con.Dispose() 
      End Try 

      TextBox1.DataBindings.Add("Text", dtb, "Name") 
      Combobox1.SelectedIndex = -1 

     End Using 

    End Sub 

이 코드는 폼의로드 이벤트에서 볼 수 있습니다. If 문을 사용하여 Combobox.SelectedIndexChanged 이벤트에서 Textbox 데이터 바인딩을 시도했지만 작동하지 않았습니다.

P .: 원하는 출력은 사용자가 콤보 박스에서 일부 항목을 선택하면 두 열 값 모두가 콤보 상자 &에 표시됩니다. 표시되는 코드는 작동하지만 텍스트 상자는 양식로드시 콤보 상자처럼 비워 둘 수 없습니다.

제안 사항?

+0

텍스트 상자가 이름 열에 바인딩되지 않았습니다. 그것은 당신의 데이터 테이블의 이름에 묶여있다. 나는 당신이 combobox에서 선택된 누구의 이름으로 텍스트 상자가 채워지 길 원합니까? – FloatingKiwi

+0

네, 그걸 원합니다. 그러나 Texbox에 대한 의미는 무엇입니까? dtb Dataset의 "Name"열에 바인딩되어 있습니까? 나는 그걸로 표시를 참조하십시오 ... – LuckyLuke82

+0

난 그냥 당신의 코드를 시도하고 그게 필드에 바인딩되어 그게 나에게 진정한 놀라움 이잖아. 내 대답을 수정하자 – FloatingKiwi

답변

1

원본 데이터 테이블에는 빈 데이터가있는 레코드가 없으므로 텍스트 상자는 항상 데이터가있는 레코드 중 하나에 바인딩됩니다. 데이터 바인딩 대신 간단한 이벤트 처리기를 사용하여 구현할 것입니다.

Private Sub ComboBox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged 
    If ComboBox1.SelectedItem Is Nothing Then 
     TextBox1.Text = "" 
    Else 
     TextBox1.Text = CStr(CType(ComboBox1.SelectedItem, DataRowView)("Name")) 
    End If 
End Sub 
+0

감사합니다 FloatingKiwi, 그 작품. 여기에 하나의 문제가 더 있습니다 - 수동으로 콤보 상자 항목을 삭제하면 ... - 자동으로 textbox.text도 지울 수 있습니까? ... 아마도 combobox의 text_changed 이벤트 ... – LuckyLuke82

+0

나는 Text_Changed_event에 제안을했습니다. 이제는 텍스트를 삭제하더라도 모든 것이 작동합니다. 그 확인은 ? – LuckyLuke82

+0

그래, 그게 효과가있을거야. 콤보 드롭 다운에없는 항목을 콤보 텍스트 편집기에 입력하면 어떤 일이 일어나는지 고려해야 할 수도 있습니다. – FloatingKiwi