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 !!
Ich habe das nicht verwendet, aber sah es gestern erwähnt http://www.codeproject.com/Articles/8619/Flat-MultiColumn-Combobox-with-Autocomplete – FloatingKiwi
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
haha, yeah es warst du es gepostet. Haben Sie versucht zu sehen, wie sie die automatische Vervollständigung in ihrer Bibliothek versucht haben? – FloatingKiwi