Foros del Web » Programación para mayores de 30 ;) » .NET »

Llenar un ComboBox con un DataReader

Estas en el tema de Llenar un ComboBox con un DataReader en el foro de .NET en Foros del Web. Estimados Amigos, Tengo una duda de como llenar un Combo con Valor y Clave a travéz de un objeto DataReader, ok puedo llenar la coleccion ...
  #1 (permalink)  
Antiguo 28/09/2004, 11:54
Avatar de Dr.Guindows  
Fecha de Ingreso: enero-2004
Mensajes: 77
Antigüedad: 20 años, 10 meses
Puntos: 0
Llenar un ComboBox con un DataReader

Estimados Amigos,

Tengo una duda de como llenar un Combo con Valor y Clave a travéz de un objeto DataReader, ok puedo llenar la coleccion de Items del Combo, pero necesito necesariamente cargar tambien los Primary Key de la Tabla como values en el Combo, me inmagino que esto debe ser mucho mas sencillo de lo que me he inmaginado hasta ahora....

Espero que me puedan ayudar!!!

Frank

PD: El código esta en VB.NET y es un Windows Form, la Bases de Datos es en SQL Server 2000...

Última edición por Dr.Guindows; 28/09/2004 a las 11:57
  #2 (permalink)  
Antiguo 28/09/2004, 13:57
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 10 meses
Puntos: 50
Hola.. en el caso de un win form por lo regular lo haces con un dataset.. pero que pasa si quieres manipular tus datos y llenar manualmente tu combobox..

Bien.. lo que puedes hacer es construir una pequeña clase que te permita hacer eso y despues guardar esa clase en un ArrayList..

Ejemplo.

Cita:
Public Class MyListItem
Private myDisplayText As String
Private myValueText As String

Public Sub New()
MyBase.New()
myDisplayText = ""
myValueText = ""
End Sub

Public Sub New(ByVal Display As String, ByVal Value As String)
MyBase.New()
myDisplayText = Display
myValueText = Value
End Sub

Public Property Display() As String
Get
Return myDisplayText
End Get
Set(ByVal Value As String)
myDisplayText = Value
End Set
End Property

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

End Class
Y donde la vayas a ocupar..por ejemplo un boton que llene el combo..te quedaría: (voy a usar un ciclo con For pero tu lo podrás sustituir por tu datareader... )

Cita:
Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim nItem As MyListItem
For i As Integer = 0 To 10
nItem = New MyListItem("Uno" & i, "Dos" & i)
myItemsList.Add(nItem)
Next

ComboBox1.DisplayMember = "Display"
ComboBox1.ValueMember = "Value"
ComboBox1.Items.AddRange(myItemsList.ToArray())


End Sub
Espero te sirva.

P.D.- Creo que se puede incluir en las faq´s no crees..??

Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #3 (permalink)  
Antiguo 28/09/2004, 14:12
Avatar de Dr.Guindows  
Fecha de Ingreso: enero-2004
Mensajes: 77
Antigüedad: 20 años, 10 meses
Puntos: 0
Gracias Root =)

Sabes, así me lo inmaginaba... je pero pense que existía una manera mas sencilla de hacerlo, te cuento: tengo 8 combos que se llenan desde una misma Tabla, si lo hago con un DataTable funciona bien, el problema es que cuando seleccionas el primer combo, me inmagino que se mueve el apuntador del DataTable hacia la Seleccion del Primero, entonces me vería obligado a utilizar un Datatable por Combo y eso desmejoraría el rendimiento notablemente, por eso decidí usar un reader que me llenara los combos, si conoces la manera de desactivar el apuntador hacia el DataTable tambien me sirve.

Me parece que si Se puede Incluir en los FAQs porque creo que muchas personas sobretodo en ASP les gustaría llenar los Combos con un DataReader eso Mejoraría notablemente el rendimiento de la APP Web...

Bueno Root una vez Mas, muchisimas Gracias... y si nos ayudamos unos a otros las cosas se hacen mucho mas Fáciles...

Cualquier cosa que pueda hacer por Ud, solo Dígalo.... sera un placer ayudarlo...

Frank
  #4 (permalink)  
Antiguo 28/09/2004, 15:09
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 10 meses
Puntos: 50
Me da gusto que te haya servido friend..

Por otro lado ...

Cita:
Me parece que si Se puede Incluir en los FAQs porque creo que muchas personas sobretodo en ASP les gustaría llenar los Combos con un DataReader
La verdad es mucho mas facil llenar un combo en una web app que en un win form, pero en este caso puse el code para una windows forms.., ya que en una web app te apoyas de un listitem y listo.. ya tienes tu value como text.

Cita:
entonces me vería obligado a utilizar un Datatable por Combo
Ésto no te sirve..?

Ejemplo:

Cita:
Dim oConn As New SqlConnection....
...
Dim dAdap As New SqlDataAdapter(sSQL, oConn)

Dim dt As New DataTable
dAdap.Fill(ds)
ComboBox1.DisplayMember = "name"
ComboBox1.ValueMember = "value"
ComboBox1.DataSource = dt

ComboBox2.DisplayMember = "name"
ComboBox2.ValueMember = "value"
ComboBox2.DataSource = dt
En fin.., no se bien como esté tu problema.. pero cualquier cosa seguimos en contacto..
  #5 (permalink)  
Antiguo 28/09/2004, 15:42
Avatar de Dr.Guindows  
Fecha de Ingreso: enero-2004
Mensajes: 77
Antigüedad: 20 años, 10 meses
Puntos: 0
Sip Root eso justamente es lo que he hecho, lo que pasa es que Cuando Selecciono un Item en el ComboBox1, cambia el Item en el ComboBox2, :S me inmagino porque esta cableado al mismo DataSource.... >:(, lo que voy a hacer para solucionar eso sera Clonar el Objeto DataTable... :O pruebalo para que veas, llena 2 combos con la misma Tabla, y cuando seleccionas un Item en el Primer Combo se Cambia en el Segundo... lo mismo pasa al Contrario, me inmagino que debe haber un apuntador en el Selected Item del Combo con respecto al DataTable... Coño pana eso me tiene Verde.... jaja pero bueno a la final no me voy a matar es una App pequeña y voy a Crear Clones de las Tablas... Gracias Por Todo Friend...

Frank...
  #6 (permalink)  
Antiguo 28/09/2004, 16:03
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 10 meses
Puntos: 50
Cita:
es que Cuando Selecciono un Item en el ComboBox1, cambia el Item en el ComboBox2,
MM..., tienes razón.., no me había topado con eso, aunque mi fuerte no son las win forms.. pero de todas formas lo voy a investigar para ver de que manera se podría hacer, no me gusta quedarme con la duda.

Si alguien sabe algo al respecto estaría muy interesado en saberlo.

Te prometo conseguir una solución, ya me dejaste intrigado..jeje
  #7 (permalink)  
Antiguo 28/09/2004, 16:48
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 10 meses
Puntos: 50
mira.. he visto muchos ejemplos en los que utilizan un dataadapter por cada query para cada combo, pero tambien se puede hacer ésto para usar el mismo datadapter y el datatable..

Cita:
Dim dt As DataTable

dt = New DataTable
dAdap.Fill(dt)

ComboBox1.DisplayMember = "company"
ComboBox1.ValueMember = "street1"
ComboBox1.DataSource = dt

dt = New DataTable
dAdap.Fill(dt)

ComboBox2.DisplayMember = "company"
ComboBox2.ValueMember = "street1"
ComboBox2.DataSource = dt
Podría ser otra alternativa no crees..?
  #8 (permalink)  
Antiguo 28/09/2004, 17:56
Avatar de Dr.Guindows  
Fecha de Ingreso: enero-2004
Mensajes: 77
Antigüedad: 20 años, 10 meses
Puntos: 0
Sip asi me parece cool... pero tambien puedes usar la copia del DataTable... asip

dt2.copy = dt1

Claro lo malo es que necesito instanciar 6 Datatables indenticos... jeje pero bueno chamo Muchas Gracias... no creo que falle al final es minima la pérdida de Performance...

Aqui estamos, tengo muchisimos PDF en ingles y e-books, tambien las láminas de los cursos oficiales de VB, si necesitas algo de eso... tan a la orden... tambien los TestKing por si no te has certificado... bueno y lo que no tengo lo consigo...

Thank u 4 all

Frank
  #9 (permalink)  
Antiguo 28/09/2004, 18:14
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 10 meses
Puntos: 50
Cita:
tambien los TestKing por si no te has certificado...
Gracias friend.. de hecho ya tengo la MCAD.NET pero estoy buscando la MCSD para despues y no me caerían mal los testinkg..

Salu2
  #10 (permalink)  
Antiguo 21/02/2005, 10:09
 
Fecha de Ingreso: octubre-2004
Mensajes: 41
Antigüedad: 20 años, 2 meses
Puntos: 0
amigos lo he intentado de varias formas creando un objeto, collention, new y nada
me arroja error al ValueMember, alguna sugerencia...
esto mismo lo hago en asp.net y todo bien pero vb.net nada?

ayuda
  #11 (permalink)  
Antiguo 08/07/2005, 23:36
 
Fecha de Ingreso: julio-2005
Mensajes: 6
Antigüedad: 19 años, 5 meses
Puntos: 0
HOla a todos .. recien entro a este foro y me gustaria poder ayudar y q me ayuden.. yo hago asi


Combo.DataSource = LDistritos.Tables("Distritos")

Combo.DisplayMember = dataset.Tables("Tabla").Columns("Columa1").ToStrin g

Combo.ValueMember = dataset.Tables("Tabla").Columns("Columa2").ToStrin g

de este modo ya no te sale el error en el value!!
  #12 (permalink)  
Antiguo 10/07/2005, 11:05
Avatar de yiyocastro  
Fecha de Ingreso: octubre-2004
Ubicación: Maracaibo, Venezuela
Mensajes: 314
Antigüedad: 20 años, 1 mes
Puntos: 0
te recomiendo que no uses DataReaders debido a que cierran la base de datos sólo cuando uno termina con ellos. Te recomiendo que utilices un DataAdapter y luego llenes un datatable ó dataset. y realices un databind()

control.datasource=dataset
control.datakeyfield="nombredelacolumnaclave"
control.datavaluefield"nombredelacolumnatexto"+

salu2
__________________
Nada es verdad, nada es mentira, todo esta en el cristal con que lo miras. :si:
  #13 (permalink)  
Antiguo 10/07/2005, 15:52
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 10 meses
Puntos: 50
Cita:
Iniciado por yiyocastro
te recomiendo que no uses DataReaders debido a que cierran la base de datos sólo cuando uno termina con ellos. Te recomiendo que utilices un DataAdapter y luego llenes un datatable ó dataset. y realices un databind()
Los datareaders para algunas cosas son buenos usarlos a diferencia de un dataset o datatable porque siempre éstos objetos guardan una copia y son más lentos comparados con los readers, así que depende de lo que estes haciendo.

Imaginate que estas haciendo una páginación con 10,000 registros y eso lo metes en un dataset y si al mismo tiempo entran 30 usuarios cuanto ancho de banda estas ocupando y cuanta carga le dejas a la memoria..?? es bastante no crees.?? y si haces uso de un datareader para páginar donde solo navegues en los registros que necesitas el acceso es mas rápido además de la liberación de memoria, pero aclaro que todo depende de lo que uno pretenda hacer y decidir que sería lo mas conveniente de usar.

Es solo una opinión

Saludos
  #14 (permalink)  
Antiguo 14/03/2006, 15:29
 
Fecha de Ingreso: agosto-2005
Mensajes: 9
Antigüedad: 19 años, 4 meses
Puntos: 0
ComboBox !! Ayuda!

Alquien sabe como hago para seleccionar un item de un comboBox, y que dependiendo de cual seleccione haga una u otra cosa. Por ejemplo. Tengo un formulario con un combo que dice tipo_usuario y varias opciones. Lo que necesito es que al seleccionar una de las opciones me habra la ventana principal con uno u otro menu deshabilitado.
El codigo lo pongo en el evento load del formulario, pero lo que no me sale es la comparación. Cuando comparo en el if, no se bien como referenciar que se trata de una opcion u otra.

Dim form_menu As New Ingreso
If form_menu.cmbtipo_usuario.SelectedItem = form_menu.cmbtipo_usuario.SelectedItem Then
'MessageBox.Show("Esto es una prueba")
Me.menu_venta.Enabled = True
Me.menu_taller.Enabled = False
Me.menu_compras.Enabled = False
Me.menu_admin.Enabled = False

ElseIf form_menu.cmbtipo_usuario.SelectedItem = form_menu.cmbtipo_usuario.SelectedItem Then

Me.menu_venta.Enabled = False
Me.menu_taller.Enabled = True
Me.menu_compras.Enabled = False
Me.menu_admin.Enabled = False

End If
  #15 (permalink)  
Antiguo 25/05/2007, 08:13
 
Fecha de Ingreso: mayo-2007
Mensajes: 1
Antigüedad: 17 años, 6 meses
Puntos: 0
Pregunta Llenar un ComboBox con un DataReader

Compañeros del foro
Tengo un problema con unos combobox en una aplicacion web, los combox los lleno con un datareader pero en algunas ocaciones me arroja el siguiente error
databinder.eval: 'System.Data.Common.DbDataRecord' does not contain a property with the name xxxxxx.

El problema es que no siempre arroja el error es a veces si me pongo a actualizar la pagina con F5 varias veces funciona pero en ocaciones sale el error, nose si sera problemas de comunicacion con la base de datos o definitivamente es error mio de programacion.
Si alguno de uds le a sucedido o saben cual es el error les pido porfavor me ayuden a resolverlo.

Gracias.
  #16 (permalink)  
Antiguo 29/05/2007, 13:27
 
Fecha de Ingreso: julio-2005
Mensajes: 58
Antigüedad: 19 años, 4 meses
Puntos: 0
Re: Llenar un ComboBox con un DataReader

Hola, tengo una pregunta mas facil... como acceso a los datos del reader ?

tengo:

Código:
SqlConnection myConnection = new SqlConnection("server=(local)\NetSDK;database=pubs;Trusted_Connection=yes");

SqlCommand myCommand = new SqlCommand("select vchNombre, intContador from Authors", myConnection);

myConnection.Open();
SqlDataReader dr = myCommand.ExecuteReader();

// QUIERO poner en variables, como:

strNombre = dr("vchNombre");
intContador = dr("intContador");

// AHI ES LO QUE NO SE HACER, y luego, como libero el objeto ? Close, y luego que ?

myConnection.Close();
Gracias
  #17 (permalink)  
Antiguo 01/06/2007, 15:36
 
Fecha de Ingreso: junio-2007
Mensajes: 1
Antigüedad: 17 años, 6 meses
Puntos: 0
Re: Llenar un ComboBox con un DataReader

Necesito que alguien me ayede, lleno un combo por medio de esta funcion
pero mi problema es que cuando envio a llenar el combo lo hace desde el segundo items como puedo hacer para que lo llede desde el princio
cuando se coloca Items.Add lo hace desde el items(1) no desde el (0)

GenerarCombo("Oficina", Me.Combo, OficinaPrincipal)
'''Esta es la funcion

Public Function GenerarCombo1(ByVal Tabla As String, ByVal Combo As Object, Optional ByVal Filtro As String = "")
Dim sQry As String

oConn = New SqlConnection(sConn)
sQry = "GenerarCombo '" & Tabla & "'"
sQry = sQry & ", " & IIf(Filtro = "", "null", "'" & Filtro & "'")

oComm = New SqlCommand(sQry, oConn)
oConn.Open()

oRead = oComm.ExecuteReader()
If cmbServer Then
While oRead.Read()
ReDim Preserve Combo(1, UBound(Combo, 2) + 1)
Combo(0, UBound(Combo, 2)) = oRead.GetString(0)
Combo(1, UBound(Combo, 2)) = oRead.GetString(1)
End While
Else

While oRead.Read()
If Codigo = oRead.GetString(0) Then

Else


Combo.Items.Add(Combo.DisplayMember)


End If
End While

End If

oRead.Close()
oConn.Close()

End Function

Muchas gracias
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 2 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 22:21.