2016-08-12 5 views
0

DataTableのコンボボックスの複数列のドロップダウンリストを作成しましたが、今度はその両方の列も表示したいと思います。今のところ1列だけが表示されます(DisplayMemberプロパティ付き)。ですから、基本的には、両方の列をコンボボックスに表示してオートコンプリートを行いたいのです。私はコンボボックスの隣にあるテキストボックスに2列目を表示することに満足しますが、オートコンプリートとして機能する必要があります(選択されたインデックスの変更、値の表示の変更も同じです)。これは両方のDatable値(名前&姓)が別のDBテーブルに一緒に追加され、ユーザーが両方の値を同じ場所で見るためです。Combobox - 2 Datatableの列を表示

編集:任意の提案

Private Sub Combobox1_DrawItem(sender As Object, e As DrawItemEventArgs) Handles Combobox1.DrawItem 

     e.DrawBackground() 

     Dim drv As DataRowView = CType(Combobox1.Items(e.Index), DataRowView) 

     Dim id As String = drv("Name").ToString() 
     Dim name As String = drv("Surname").ToString() 

     Dim r1 As Rectangle = e.Bounds 
     r1.Width = r1.Width/2 


     Using sb As SolidBrush = New SolidBrush(e.ForeColor) 
      e.Graphics.DrawString(id, e.Font, sb, r1) 
     End Using 


     Using p As Pen = New Pen(Color.AliceBlue) 
      e.Graphics.DrawLine(p, r1.Right, 0, r1.Right, r1.Bottom) 
     End Using 


     Dim r2 As Rectangle = e.Bounds 
     r2.X = e.Bounds.Width/2 
     r2.Width = r2.Width/2 

     Using sb As SolidBrush = New SolidBrush(e.ForeColor) 
      e.Graphics.DrawString(name, e.Font, sb, r2) 
     End Using 

    End Sub 

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

      Dim SQL As String = "SELECT ID,Name ||' ' || Surname as FullName 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 

        con.Open() 

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

        End Using 

        Combobox1.DataSource = dtb 
        Combobox1.DisplayMember = "FullName" 
        Combobox1.ValueMember= "ID" 
        con.Close() 

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

      End Using 

     End Sub 

そして、描画線コンボボックスの列の間に?前もって感謝します !!

+0

私はこれを使用していませんが、昨日のことを見ましたhttp://www.codeproject.com/Articles/8619/Flat-MultiColumn-Combobox-with-Autocomplete – FloatingKiwi

+0

私はこれallreadyをテストした、それは正しく動作しません。その上、私の解決策はうまくいきました。私は両方の列のオートコンプリートをしたいだけです。私の以前のスレッド:http://stackoverflow.com/questions/38868261/flat-multi-column-combobox-filling-columns-with-db-tables – LuckyLuke82

+0

ええ、それはあなたが投稿した。彼らは彼らの図書館で自動完成を試みた方法を見てみましたか? – FloatingKiwi

答えて

0

唯一の方法は、別のコンボボックスを追加し、同じデータテーブルに彼をバインドすることです。この方法でコンボボックスから項目を選択すると、両方の値が表示されます。オートコンプリートも機能します。同じコンボボックスですべてを行うことは良くありません、表示されたテキストが広すぎる、よく見えません。

0

チェックアウトこの回答:https://stackoverflow.com/a/5570901/6550457

それは示唆している:すべてを達成するために

comboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend; 
comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems; 
+0

まず、私はVB.NETの初心者です。このオートコンプリートは機能しますが、私はそれを.Suggestに変更しました。第2に、これは問題の半分を解決します - コンボボックス(名前)に表示される列は1つだけです。私はどのようにして "John Davies"のような両方の列をコンボボックスに表示できますか? – LuckyLuke82

+0

2列が必要ですか? 'SELECT Name、Surname from MyTable'のクエリではなく、' SELECT Name + '+ MyTableからの姓 'MyTable'に参加してください。それを超えて、私はあなたがそれをやる方法がわからない。 – FloatingKiwi

+0

これは私達を最初に戻します。 OK、これを教えて...どうすればいいですか... DBに1つのテーブルがあり、データを入力するためのフィールドが1つあります。同じテーブルでは、名前と姓の文字列(tehnician、user、developer、maintainer)として4人の異なる従業員を入力する必要があります。今では、すべての名前と姓を入力できるユーザーフレンドリーなフォームを開発したいと思います。しかし、これらの名前と姓は、別のテーブルにあるので、コンボボックス/データグリッド/リストビューなどから選択する必要があります。あなたはどうしますか? – LuckyLuke82

関連する問題