vb.net - una - Combobox plana de varias columnas: columnas de relleno con tablas de DB
llenar combobox vb.net manualmente (2)
Encontré un muy buen combobox gratuito de varias columnas, pero no puedo llenar la segunda columna con It, hasta ahora logré mostrar solo 1 columna. ¿Alguien tiene alguna experiencia haciendo esto a través de Datable? Tiene que hacerse así, al menos auhors de control afirman que sí. Aquí está mi código:
EDITAR:
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
con.Open()
Using dad As New OracleDataAdapter(SQL, con)
dad.Fill(dtb)
End Using
MtgcComboBox1.ColumnNum = 2
MtgcComboBox1.LoadingType = MTGCComboBox.CaricamentoCombo.DataTable
MtgcComboBox1.SourceDataString = {"Name", "Surname"}
MtgcComboBox1.SourceDataTable = dtb
con.Close()
Catch ex As Exception
''MessageBox.Show(ex.Message)
Finally
con.Dispose()
End Try
End Using
Y aquí hay un enlace para el control, algunas instrucciones también: http://www.codeproject.com/Articles/8619/Flat-MultiColumn-Combobox-with-Autocomplete
Creo que te faltan las instrucciones para mostrar las columnas. Del ejemplo:
MtgcComboBox1.LoadingType = MTGCComboBox.CaricamentoCombo.DataTable
MtgcComboBox1.SourceDataString = {"Name", "SurName"}
MtgcComboBox1.ColumnWidth = "100;100"
MtgcComboBox1.SourceDataTable = dtb
Esta es la versión simplificada de la respuesta de cualquier forma para un cuadro combinado con 2 valores por línea.
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim dtb As New DataTable
Using dad As New OracleDataAdapter("SELECT Name,Surname from MyTable", "Data Source=MyDB;User Id=Lucky;Password=MyPassword;")
dad.Fill(dtb) '' this should add the columns
End Using
Dim items = From r In dtb.Rows.Cast(Of DataRow) r(0).ToString & vbNullChar & r(1).ToString
ComboBox1.DrawMode = DrawMode.OwnerDrawFixed
ComboBox1.DataSource = items.ToList
''ComboBox1.DisplayMember = "Name"
''ComboBox1.ValueMember = "Surname"
End Sub
Private Sub ComboBox1_DrawItem(sender As Object, e As DrawItemEventArgs) Handles ComboBox1.DrawItem
e.DrawBackground() '' Fill the background.
Dim items = ComboBox1.Items(e.Index).ToString.Split(ControlChars.NullChar) '' Extract the Record object corresponding to the combobox item to be drawn.
Dim loc = e.Bounds.Location, xMid = (loc.X + e.Bounds.Width - loc.X) / 2 '' Calculate important positions based on the area of the drop-down box.
TextRenderer.DrawText(e.Graphics, items(0), e.Font, loc, e.ForeColor) '' Draw the first (Unique ID) string in the first half.
TextRenderer.DrawText(e.Graphics, items(1), e.Font, New Point(xMid + 5, loc.Y), e.ForeColor) '' Draw the second (Name) string in the second half, adding a bit of padding.
e.Graphics.DrawLine(SystemPens.ButtonFace, xMid, loc.Y, xMid, loc.Y + e.Bounds.Height) '' optional Draw the column separator line right down the middle.
e.DrawFocusRectangle() '' Finally, draw the focus rectangle.
End Sub