2016-08-12 4 views
0

Ich habe mehrspaltige Dropdown-Liste für eine Combobox aus einer DataTable erstellt, und jetzt möchte ich beide Spalten darin anzeigen. Bisher wird nur 1 Spalte angezeigt (mit DisplayMember-Eigenschaft). Also im Grunde möchte ich Autocomplete mit beiden Spalten in Combobox angezeigt. Ich würde mit der Anzeige der 2. Spalte in der Textbox neben der Combobox zufrieden sein, aber es muss als Autocomplete funktionieren (wenn der Index geändert wird, ändert sich auch der Wert der Anzeige). Ich brauche das, weil beide Datable Werte (Name & Nachname) in einer anderen DB-Tabelle zusammen addiert werden, und damit Benutzer beide Werte an der gleichen Stelle sehen können.Combobox - Anzeige 2 Datatable Spalten

EDITED:

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 

Und Ziehlinie zwischen Combobox Spalten:

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 

Irgendwelche Vorschläge? Danke im Voraus !!

+0

Ich habe das nicht verwendet, aber sah es gestern erwähnt http://www.codeproject.com/Articles/8619/Flat-MultiColumn-Combobox-with-Autocomplete – FloatingKiwi

+0

Ich habe dies bereits getestet, es funktioniert nicht richtig . Außerdem funktioniert meine Lösung hier gut, ich möchte nur für beide Spalten Autovervollständigen. Mein vorheriger Thread: http://stackoverflow.com/questions/38868261/flat-multi-column-combobox-filling-columns-with-db-tables – LuckyLuke82

+0

haha, yeah es warst du es gepostet. Haben Sie versucht zu sehen, wie sie die automatische Vervollständigung in ihrer Bibliothek versucht haben? – FloatingKiwi

Antwort

0

Nur Weg, um alle zu erreichen, ist eine andere Combobox hinzuzufügen und ihn zu gleichen Datentabelle zu binden. Auf diese Weise sehen Sie, wenn Sie einen Gegenstand aus der Combobox auswählen, beide Werte in ihnen. Autocomplete funktioniert auch. Alles in der gleichen Combobox ist nicht gut, angezeigter Text ist zu breit, sieht nicht gut aus.

0

Kasse diese Antwort: https://stackoverflow.com/a/5570901/6550457

Er schlägt vor:

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

Zunächst einmal bin ich VB.NET Anfänger. Diese automatische Vervollständigung funktioniert, aber ich habe es nur in .Suggest geändert. Zweitens löst dies die Hälfte der Probleme - immer noch wird nur eine Spalte in der Combobox (Name) angezeigt. Wie könnte ich beide Spalten, wie "John Davies" in Combobox anzeigen? – LuckyLuke82

+0

Benötigen Sie 2 Spalten? Wenn Sie nach dem vollen Namen suchen, dann suchen Sie nicht nach "SELECT Name, Nachname von MyTable", sondern schließen Sie sich ihnen 'SELECT Name + '' + Nachname von MyTable' an. Darüber hinaus bin ich mir nicht sicher, wie du es machen würdest. – FloatingKiwi

+0

Und das bringt uns zurück zum Anfang. OK, sag mir das ... Wie würdest du es machen ... Ich habe 1 Tabelle in der Datenbank mit vielen Feldern, um Daten einzugeben. In der gleichen Tabelle muss ich 4 verschiedene Angestellte in Fieleds als Schnur (Tehniker, Benutzer, Entwickler und Betreuer) mit Namen und Nachnamen eintragen. Jetzt möchte ich ein benutzerfreundliches Formular entwickeln, in dem Sie all diese Namen und Nachnamen eingeben können - aber diese Namen und Nachnamen sollten aus combobox/datagrid/listview usw. ausgewählt werden, da sie bereits in einer anderen Tabelle sind. Wie würdest du das machen ? – LuckyLuke82