Combobox

07/04/2005 - 18:11 por Carlos | Informe spam
Hola.

Tengo un problema. Lo que pasa es que lleno un combo con un data, pero
quiero q me despliegue dos columnas, no solo una. tengo esto.

m_SQL = "SELECT str_Nombre AS [Nombre], str_Descripcion AS [Descripción]
FROM tbl_Nombres"
da = New OleDb.OleDbDataAdapter(m_SQL, Ruta)
da.Fill(ds)
cbo_Prueba.DataSource = ds.Tables(0)
cbo_Prueba.DisplayMember = "Nombres, Descripción"
cbo_Prueba.ValueMember = "Descripción"
y quiero que en el combo, me despliegue tanto el nombre como la descripcion...

Agradezco su ayuda.
 

Leer las respuestas

#1 Angel J. Hernández M.
08/04/2005 - 05:14 | Informe spam
Puedes crear un user control el cual tenga un miembro que sea un ComboBox,
pues bien en el evento Load del control debes escribir algo similar:

cboCustom.DrawMode = DrawMode.OwnerDrawFixed // Acá cboCustom es el miembro
(ComboBox del UserControl)

necesitas una clase que servirá para agregar los Items a tu ComboBox

Class CCustomComboItem
Private m_text As String

Public Property Prueba() As String
Get
Return m_text
End Get
Set(ByVal Value As String)
m_text = Value
End Set
End Property

Public Sub New()
m_text = String.Empty
End Sub


Public Sub New(ByVal text As String)
m_text = text
End Sub

Public Overrides Function ToString() As String
Return m_text
End Function
End Class

El código que es requerido para dibular los items es el siguiente

private Sub cboCustom_DrawItem(byval sender as Object, e as
DrawItemEventArgs) Handles cboCustom.DrawItem
e.DrawBackground()
e.DrawFocusRectangle()

Dim item as CCustomComboItem, _
bounds as Rectangle = e.Bounds

Try
item = Ctype(cboCustom.Items(e.Index), CCustomComboItem)
' Aca description es otra propiedad de la clase
CCustomComboItem
e.Graphics.DrawString(item.Text + item.Description,
e.Font, _
new SolidBrush(e.ForeColor), _
bounds.Left, bounds.Top)
Catch
If e.Index <> -1 Then
' Acá solo dibujo el Text del Item podrías agregar un
separador y otro valor
e.Graphics.DrawString(cboCustom.Items(e.Index).ToString(),
e.Font, _
new SolidBrush(e.ForeColor),
bounds.Left, bounds.Top)
Else
e.Graphics.DrawString(cboCustom.Text, e.Font, _
new SolidBrush(e.ForeColor),
bounds.Left, bounds.Top)
EndIf
EndTry
EndSub

Espero te sirva,

Saludos,


Angel J. Hernández M.
MCP - MCAD - MCSD - MCDBA
http://groups.msn.com/desarrolladoresmiranda


"Carlos" escribió en el mensaje
news:
Hola.

Tengo un problema. Lo que pasa es que lleno un combo con un data, pero
quiero q me despliegue dos columnas, no solo una. tengo esto.

m_SQL = "SELECT str_Nombre AS [Nombre], str_Descripcion AS [Descripción]
FROM tbl_Nombres"
da = New OleDb.OleDbDataAdapter(m_SQL, Ruta)
da.Fill(ds)
cbo_Prueba.DataSource = ds.Tables(0)
cbo_Prueba.DisplayMember = "Nombres, Descripción"
cbo_Prueba.ValueMember = "Descripción"
y quiero que en el combo, me despliegue tanto el nombre como la
descripcion...

Agradezco su ayuda.

Preguntas similares