2016-08-16 73 views
0

我在數據表中有2列,並且都顯示在組合框(多列下拉列表)的下拉列表中。現在我想在combobox中顯示一列,在texbox中顯示另一列(使用數據綁定)。代碼的作品,但1個問題 - 我想有我的combobox.selectedIndex -1當表單打開時,文本框爲空。 Combobox不是問題,但是Texbox不能清除文本。這裏是我的代碼:綁定文本框到組合框的項目

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.S .:我希望的輸出是,當用戶從組合框中選擇一些項目時,兩個列值都顯示在texbox &組合框中。代碼就像你看到的那樣,但是文本框不能像表單加載時的組合框那樣空白。

有什麼建議嗎?

+0

您的文本框沒有綁定到名稱列。它綁定到數據表的名稱。我猜想你想要在組合框中選擇誰的名字來填充文本框? – 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嗎?可能是組合框的text_changed事件... – LuckyLuke82

+0

我想通了,我只是把你的建議放在Text_Changed_event。現在一切正常,即使我刪除文本。這可以嗎 ? – LuckyLuke82

+0

是的,這將工作。您可能還需要考慮如果在組合文本編輯器中輸入的內容不在組合下拉列表中,會發生什麼情況。 – FloatingKiwi