2016-08-16 15 views
0

私はデータテーブルに2つの列を持ち、両方がコンボボックス(複数列のドロップダウンリスト)のドロップダウンリストに表示されます。今私はコンボボックスに1つの列を表示したい、もう1つはtexboxに(データバインディングで)表示したい。コードは動作しますが、問題が1つあります - フォームを開くときにcombobox.selectedIndex -1を、テキストボックスを空にしたいコンボボックスは問題ではありませんが、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 .:私が望む出力は、ユーザーがコンボボックスから項目を選択すると、両方の列の値がコンボボックスの&に表示されます。表示されているコードは動作しますが、フォームのロード時にコンボボックスのように空白にすることはできません。

提案がありますか?

+0

TextBoxは名前列にバインドされていません。これは、データテーブルの名前にバインドされています。私はあなたがコンボボックスで選択されている人の誰かの名前でテキストボックスを入力したいと思いますか? – FloatingKiwi

+0

はい、私はそれが欲しいです。しかしTexboxについてはどういう意味ですか?dtb Datasetの列 "Name"にバインドされていますか?私はそのように表示されて参照してください... – LuckyLuke82

+0

私はあなたのコードを試して、それはフィールドにバインドすることを私に本物の驚きthatsです。私の答えを修正させてください – FloatingKiwi

答えて

1

ソースデータテーブルに空白のデータが含まれていないため、テキストボックスは常にデータのあるレコードの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

関連する問題