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
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
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:
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.
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
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).
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
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
-----------------------------------------------------------------------------------------
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
-----------------------------------------------------------------------------------------