Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Sólo coge el primer valor en Combo

1,314 views
Skip to first unread message

mediocad

unread,
May 11, 2009, 9:26:07 AM5/11/09
to
Hola,

Tengo un combo que se rellena de una consulta en BD. Pero cuando selecciono
uno de los campos que se despliegan en el combo siempre coge el primero.

¿Alguien sabe la causa?

Gracias y un saludo

mediocad

unread,
May 11, 2009, 9:26:01 AM5/11/09
to

mediocad

unread,
May 11, 2009, 10:07:01 AM5/11/09
to
Hola otra vez,

Esto es lo que tengo en el Page_Load:

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
'Introducir aquí el código de usuario para inicializar la página
conn = New
SqlConnection(ConfigurationSettings.AppSettings.Item("ConexionBD"))
connDueDate = New
SqlConnection(ConfigurationSettings.AppSettings.Item("ConexionBD"))

If Not Page.IsPostBack Then 'tabla nuestra con los proyectos
Dim cmd As New SqlCommand("SELECT DISTINCT [ot] FROM [iui_workflow] ORDER
BY [ot]", conn)
conn.Open() 'obtenemos el puntero a los datos
Dim datosProyecto As SqlDataReader = cmd.ExecuteReader()

Dim boolProy As Boolean = datosProyecto.HasRows 'hasrows nos devuelve
si ha encontrado algo
If boolProy = False Then 'si ha encontrado algo=True
MsgBox1.ShowConfirmation("Los proyectos no han podido ser leídos.
Comprobar acceso a la tabla (iui_workflow)", "Workflows Proyectos", True,
False)
Exit Sub
Else
Me.DropProy.Items.Insert(0, New ListItem("Seleccione un proyecto...",
"0"))
While datosProyecto.Read()
Me.DropProy.Items.Add(New ListItem(Trim(datosProyecto("ot").ToString())))
End While
conn.Close()
End If
End If

End Sub

El primer combo se llena con una consulta a la BD, cuando pincho en éste se
llena el segundo con otra consulta en BD. Y es aquí cuando siempre,
seleccione el valor del combo que sea lee el primero.
Los dos Drop los tengo con AutoPostBack=True en diseño.

Un saludo

mediocad

unread,
May 11, 2009, 10:08:09 AM5/11/09
to

Jose A. Fernandez

unread,
May 11, 2009, 10:13:11 AM5/11/09
to
Hola mediocad

Puedes utilizar la propiedad SelectedIndex para establcer cual
quieres...pero es eso simplemente el INDICE
si quieres por valor deberias buscar info de la propiedad
SelectedValue

Al momento de enlazar si estas dentro de un contenedor como el
Formview, Gridview, etc (o similiar) puedes "bindear" esta
propiedad...


Enlaces
-------------------------
DropDownList (Clase)
Representa un control que permite al usuario seleccionar un único
elemento de una lista desplegable.
http://msdn.microsoft.com/es-es/library/system.web.ui.webcontrols.dropdownlist.aspx

DropDownList.SelectedIndex (Propiedad)
Obtiene o establece el índice del elemento seleccionado del control
DropDownList.
http://msdn.microsoft.com/es-es/library/system.web.ui.webcontrols.dropdownlist.selectedindex.aspx

Cómo: Establecer la selección en controles List de servidor Web
(Visual Studio)
http://msdn.microsoft.com/es-es/library/dt1bzx2b.aspx

ListControl.SelectedValue (Propiedad)
Obtiene el valor del elemento seleccionado en el control de lista o
selecciona el elemento en el control de lista que contiene el valor
especificado.
http://msdn.microsoft.com/es-es/library/system.web.ui.webcontrols.listcontrol.selectedvalue.aspx


Espero que te sirva de ayuda o guia
______________________
Jose A. Fernandez
blog: http://geeks.ms/blogs/fernandezja


On May 11, 10:26 am, mediocad <medio...@discussions.microsoft.com>
wrote:

Alberto Poblacion

unread,
May 11, 2009, 5:07:26 PM5/11/09
to
"mediocad" <medi...@discussions.microsoft.com> wrote in message
news:C8629568-81A8-49B9...@microsoft.com...

> Tengo un combo que se rellena de una consulta en BD. Pero cuando
> selecciono
> uno de los campos que se despliegan en el combo siempre coge el primero.
>
> ¿Alguien sabe la causa?

En estos casos la causa siempre suele ser la misma: se te ha olvidado
meter un "If Not IsPostBack..." en el Page_Load.

Como el Page_Load siempre se ejecuta en todos los postbacks antes de la
rutina de eventos en la que lees el valor del dropdown, siempre lo recargas
desde la base de datos antes de leer el valor seleccionado. Al recargarlo se
le olvida la posición anterior, y por eso siempre lees el primer elemento.

mediocad

unread,
May 12, 2009, 3:12:01 AM5/12/09
to
Alberto, gracias por tu respuesta pero eso ya lo tengo contemplado. En mi
Page_Load tengo:

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load

If Not Page.IsPostBack Then 'tabla nuestra con los proyectos

conn = New
SqlConnection(ConfigurationSettings.AppSettings.Item("ConexionBD"))

Dim cmd As New SqlCommand("SELECT DISTINCT [ot] FROM [iui_workflow]
ORDER BY [ot]", conn)
conn.Open() 'obtenemos el puntero a los datos
Dim datosProyecto As SqlDataReader = cmd.ExecuteReader()
Dim boolProy As Boolean = datosProyecto.HasRows 'hasrows nos devuelve
si ha encontrado algo
If boolProy = False Then 'si ha encontrado algo=True
MsgBox1.ShowConfirmation("Los proyectos no han podido ser leídos.
Comprobar acceso a la tabla (iui_workflow)", "Workflows Proyectos", True,
False)
Exit Sub
Else
Me.DropProy.Items.Insert(0, New ListItem("Seleccione un proyecto...",
"0"))
While datosProyecto.Read()
Me.DropProy.Items.Add(New
ListItem(Trim(datosProyecto("ot").ToString())))
End While
conn.Close()
End If
End If
End Sub

y si tengo puesto If Not Page.IsPostBack.

En esta parte del código rellena el primer DropDownList. Cuando uso en este
Drop "DropProy_SelectedIndexChanged" me rellena otro DropDownList leyendo de
una BD. Y es en éste último cuando siempre toma el primer valor. Lo curioso
es que en el anterior no lo hace y puedo recoger cualquiera.

¿Alguna sugerencia?

Gracias

mediocad

unread,
May 12, 2009, 3:12:02 AM5/12/09
to

Alberto Poblacion

unread,
May 12, 2009, 3:21:54 AM5/12/09
to
"mediocad" <medi...@discussions.microsoft.com> wrote in message
news:91839D8B-EB6D-46B9...@microsoft.com...

> En esta parte del código rellena el primer DropDownList. Cuando uso en
> este
> Drop "DropProy_SelectedIndexChanged" me rellena otro DropDownList leyendo
> de
> una BD. Y es en éste último cuando siempre toma el primer valor. Lo
> curioso
> es que en el anterior no lo hace y puedo recoger cualquiera.
>
> ¿Alguna sugerencia?

Efectivamente, el código tiene buena pinta y solo cargas el dropdown la
primera vez. Y tal como dices, este dropdown funciona correctamente y el que
falla es el otro que se carga en el SelectedIndexChanged del primero. Esto
en teoría debería funcionar correctamente, así que si se está perdiendo la
selección del segundo "dropdown", algo se tiene que escapar por alguna
parte.
Sugiero buscar por todo el código fuente todas las ocurrencias del
segundo dropdown, a ver si se está tocando inadvertidamente en algún sitio
imprevisto, y también poner un punto de ruptura en el SelectedIndexChanged
que lo carga, a ver si se está disparando en más ocasiones de las previstas.
Otra prueba que se puede hacer consiste en activar las Trazas (poniendo
Trace="true" en el @Page) y examinar en el texto de la traza las variables
del Form, a ver qué es lo que realmente se está transmitiendo desde el
navegador al servidor (para ver si el dato llega correctamente seleccionado
o no).

Juan T. Llibre

unread,
May 12, 2009, 7:09:52 AM5/12/09
to
Aqu� :

http://www.codeproject.com/KB/custom-controls/ajaxdropdownlist.aspx

hay c�digo de muestra que funciona.

Tambien aqu� :

http://www.asp101.com/samples/utils/source.aspx?file=db_pulldown_linked.aspx

Hay un ejemplo sencillo, pero funcional.

F�jate que esconde el segundo dropdown...hasta que el usuario
selecciona algo en el primero, lo cual creo es interesante.

Si no te interesa ese comportamiento, comenta estas l�neas :

ddlSalesList.Visible = False
ddlSalesList.Visible = True

Si encuentras que es mejor esconder el segundo dropdown...deja el c�digo tal y como esta.

Naturalmente, tendras que sustituir tu conexion y comando sql por los que tiene la muestra.


Juan T. Llibre, asp.net MVP
asp.net faq : http://asp.net.do/faq/
=========================
"Alberto Poblacion" <earthling-quitae...@poblacion.org> wrote in message
news:OJX1cJt0...@TK2MSFTNGP02.phx.gbl...


> "mediocad" <medi...@discussions.microsoft.com> wrote in message
> news:91839D8B-EB6D-46B9...@microsoft.com...

>> En esta parte del c�digo rellena el primer DropDownList. Cuando uso en este


>> Drop "DropProy_SelectedIndexChanged" me rellena otro DropDownList leyendo de

>> una BD. Y es en �ste �ltimo cuando siempre toma el primer valor. Lo curioso


>> es que en el anterior no lo hace y puedo recoger cualquiera.
>>
>> �Alguna sugerencia?
>

> Efectivamente, el c�digo tiene buena pinta y solo cargas el dropdown la primera vez. Y tal como dices, este

> dropdown funciona correctamente y el que falla es el otro que se carga en el SelectedIndexChanged del primero. Esto en

> teor�a deber�a funcionar correctamente, as� que si se est� perdiendo la selecci�n del segundo "dropdown", algo se

> tiene que escapar por alguna parte.

> Sugiero buscar por todo el c�digo fuente todas las ocurrencias del segundo dropdown, a ver si se est� tocando
> inadvertidamente en alg�n sitio imprevisto, y tambi�n poner un punto de ruptura en el SelectedIndexChanged que lo
> carga, a ver si se est� disparando en m�s ocasiones de las previstas.


> Otra prueba que se puede hacer consiste en activar las Trazas (poniendo Trace="true" en el @Page) y examinar en el

> texto de la traza las variables del Form, a ver qu� es lo que realmente se est� transmitiendo desde el navegador al

mediocad

unread,
May 12, 2009, 9:06:01 AM5/12/09
to
Hola,

He estado mirando el código y no encuentro nada raro. He puesto puntos de
ruptura en cada una de las funciones del código a ver si alguna es llamada
dos veces pero nada. He buscado el nombre de Drop en el código por si se le
llama dos veces y nada.

Se rellena el primer Drop (bien), elijo una valor del Drop y lanza consulta
a BD y rellena segundo Drop (bien). Si del segundo drop elijo el segundo
valor desplegable se va al Page_Load y como tiene If Not Page.IsPostBack pasa
de largo y se va al
DropWorkflow_SelectedIndexChanged del Drop seleccionado.

Justo debajo asigno a una vble. el texto del Drop

Application("strWorkflow") = Trim(Me.DropWorkflow.SelectedItem.Text)

y ya sale predeterminado el primer registro del Drop en el .Text.

Y si vuelvo a realizar la misma operación (seleccionando el segundo Drop),
ya no pasa por el DropWorkflow_SelectedIndexChanged pero si por Page_Load.

Un saludo


-----------------------------------------------------------------------------------------

mediocad

unread,
May 12, 2009, 9:06:10 AM5/12/09
to
Hola,

He estado mirando el código y no encuentro nada raro. He puesto puntos de
ruptura en cada una de las funciones del código a ver si alguna es llamada
dos veces pero nada. He buscado el nombre de Drop en el código por si se le
llama dos veces y nada.

Se rellena el primer Drop (bien), elijo una valor del Drop y lanza consulta
a BD y rellena segundo Drop (bien). Si del segundo drop elijo el segundo
valor desplegable se va al Page_Load y como tiene If Not Page.IsPostBack pasa
de largo y se va al
DropWorkflow_SelectedIndexChanged del Drop seleccionado.

Justo debajo asigno a una vble. el texto del Drop

Application("strWorkflow") = Trim(Me.DropWorkflow.SelectedItem.Text)

y ya sale predeterminado el primer registro del Drop en el .Text.

Y si vuelvo a realizar la misma operación (seleccionando el segundo Drop),
ya no pasa por el DropWorkflow_SelectedIndexChanged pero si por Page_Load.

Un saludo


-----------------------------------------------------------------------------------------

diaz...@gmail.com

unread,
Oct 29, 2013, 1:06:43 PM10/29/13
to
Hola a mi me paso lo mismo. Te sugiero que cargues una lista con la tabla SQl o la que uses y luego preguntes si esa lista esta vacia o su longitud es 0, y recien ahi cargas el DropDownList, de esa manera no cargas el combo cada vez que haces el Load de la pagina, por que ahi esta el problema. Por lo menos asi lo resolvi yo.
Un saludo

juniorpe...@gmail.com

unread,
Dec 24, 2015, 10:26:12 AM12/24/15
to
gracias"Alberto Poblacion"

mcbarbo...@gmail.com

unread,
Dec 15, 2016, 9:48:03 AM12/15/16
to
El jueves, 24 de diciembre de 2015, 10:26:12 (UTC-5), juniorpe...@gmail.com escribió:
> gracias"Alberto Poblacion"

se que el tema lleva tiempo, pero le ha de servir a quien se le presente ese problema. la causa es porque cada vez que se presiona el botón, se recarga la lista y se pierde la selección hecha, retoma el primer ítem de la lista. así que la solución dada es poner una condición if antes de agregar los datos en el el dropdownlist, donde establesca si esta vacio o si contiene datos. algo asi:

Protected Sub form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles form1.Load

If DropDownList1.Items.Count = 0 Then

Dim Comando2 As New OleDbCommand("SELECT USUARIOS.USUARIO FROM (DEPTO INNER JOIN MUNICIPIOS ON DEPTO.CODIGO = MUNICIPIOS.DEPTO) INNER JOIN USUARIOS ON MUNICIPIOS.CODIGO = USUARIOS.municipio WHERE (((DEPTO.NOMBRE)= '" & Label1.Text & "'))order by usuarios.usuario; ", cn)
'Comando.Connection = cn ' asigna la conexión al OleDbCommand
aa = Comando2.ExecuteReader
While aa.Read()
DropDownList1.Items.Add(aa(0))
End While

End If

end sub

jora...@gmail.com

unread,
Jun 19, 2020, 5:30:33 PM6/19/20
to
Levaba horas trabado con algo similar, gracias por actualizar el seguimiento del error
0 new messages