none
Dropdownlist Multinivel RRS feed

  • Pregunta

  • Tengo un control de usuario multinivel con país, departamento, ciudad y municipio en vb.net

    Este control lo adiciona a una página aspx.vb y funciona bien. Puedo seleccionar país, dpto, ciudad y municipio.

    El problema lo tengo cuando utilizo lo siguiente:

    CType(PaDeCiMu1.FindControl("DropDpto"), DropDownList).SelectedValue = "Antioquia"

    Error

    vb – DropDownList tiene un SelectedValue que no es válido porque no existe en la lista de elementos. Nombre del parámetro:

    Cómo soluciono este error?

    Quedo atento, José

    miércoles, 2 de octubre de 2019 5:27

Respuestas

  • Que evento o instrucción debo utilizar?

    ¿Has utilizado databinding en tiempo de diseño (los automatismos de Visual Studio) para enlazar los controles? Mi experiencia con los automatismos es que solo funcionan bien cuando dejas todo con su comportamiento predeterminado, sin intentar mezclarlo con código que personalice parte de los comportamientos. En cuanto intentas combinar código con los automatismos, al final acabas perdiendo más tiempo intentando hacerlo funcionar que si de entrada hubieses prescindido de los automatismos y lo hubieses programado todo con código.

    Para hacerlo por código, el proceso sería este:

    En el Page_Load, usas un "if not page.ispostback" para cargar los datos del primer dropdown.

    En el selected index changed de ese dropdown, cargas el siguiente, filtrándolo por el valor del primero.

    Repites el paso anterior por cada uno de los dropdown.

    Si algunos están en una página aspx y otros en un ascx, entonces hay que hacer esas conexiones entre la página y el ascx. Si se requiere que al cambiar algo en el ascx se cambie algo en la página, se publica un evento en el ascx y la página se suscribe al evento. Si es al revés, desde el evento de la página se invoca algún método del ascx que previamente habremos hecho público para ese fin.

    Ojo con las inicializaciones en el Page_Load. El orden en el que se disparan los page_load de la página y del ascx no necesariamente es el que el desarrollador piensa que debería ser. Hay que tener cuidado de no meter una dependencia en el orden incorrecto.

    Después de programar todo el funcionamiento de los dropdown de esa manera, ahora todo está bajo tu control. Puedes poner puntos de ruptura en cualquiera de los eventos y seguir la ejecución paso a paso con el debugger. De esta manera, si da algún error o algo no funciona como esperabas, puedes determinar desde el debugger qué es lo que se ha ejecutado y lo que no se ha ejecutado, y de esa manera saber qué es lo que sobra o falta o está fuera de lugar y poder arreglarlo.

    Cerciórate de que sabes manejar bien el debugger y sabes hacer esas cosas de "poner puntos de ruptura" y "seguirlo paso a paso". Al igual que mencionábamos antes para los automatismos, la cantidad de tiempo que perderás por no saber esto es muchísimo mayor que la cantidad de tiempo que te cuesta aprenderlo. Realmente merece la pena dedicar un poco de tiempo a aprender el debugger, te lo ahorrarás con creces a la hora de hacer que tu código funcione.

    Saludos y gracias por contestar.

    Situación 1 (página *.ascx o donde se crea el control de usuario).

    Lo que tú mencionas en el archivo o página que corresponde a control de usuario (*.ascx) lo he tenido en cuenta, haciendo uso: if not page.ispostback y del SelectedIndexChanged.

    Situación 2.

    Página *.aspx.vb.

    En esta, arrastro o hago uso del control de usuario antes mencionado.

    En tiempo de ejecución funciona bien y sin nada que tenga que ver con hacer uso del código de programación. Puedo elegir y los cambios se hacen perfectamente. Esta parte me desconcierta, sin ningún problema todo bien.

    El problema se presenta cuando hago uso del código de programación. El único que cambia, es cuando asigno un valor al SelectedValue de capital.

    Ahora, realizo lo siguiente:

    Selecciono el país mediante un clic  y lo demás (Dpto, ciudad, municipio) por código de programación, excelente, lo proyectado o pensado sale bien haciendo uso del código de programación. Por eso, he pensado en el orden de evento en la página aspx.vb.

    Tendré en cuenta tu consejo.


    Solucionado el problema.

    Después de asignar el valor al control downlist mediante código, invoco el procedimiento que le corresponde a dpto, ciudad y municipio y hasta este momento me ha funcionado.

    Muchas gracias

    • Marcado como respuesta Campeon_01 viernes, 4 de octubre de 2019 23:17
    viernes, 4 de octubre de 2019 23:17

Todas las respuestas

  • Esencialmente el mensaje de error te está diciendo que en el momento de ejecutar esa línea, el DropDpto no contiene ningún elemento cuyo value sea "Antioquia". Si no lo contiene, no lo puedes seleccionar.

    Si estás seguro de que la tabla desde la que se carga el DropDown contiene ese valor, esto indicaría algún error en la secuencia de eventos que conducen hasta la ejecución de esa línea, de manera que la línea de código se ha ejecutado antes de haber cargado los valores del dropdown. Puedes confirmarlo poniendo un punto de ruptura en esa línea y examinando en ese momento la colección de Items con el debugger. Encontrarás sin duda que "Antioquia" no está cargado en el DropDown. Compruébalo con el debugger, no te confíes por el hecho de que en pantalla se vea el dato esperado, porque la pantalla muestra el resultado final que se envió al navegador al terminar el ciclo de vida del postback, pero durante ese ciclo de vida en el servidor los eventos pudieron ejecutarse en un orden que condujo a que la línea del error se ejecutase en un momento en que los datos aún no estaban cargados.

    miércoles, 2 de octubre de 2019 8:08
  • Esencialmente el mensaje de error te está diciendo que en el momento de ejecutar esa línea, el DropDpto no contiene ningún elemento cuyo value sea "Antioquia". Si no lo contiene, no lo puedes seleccionar.

    Si estás seguro de que la tabla desde la que se carga el DropDown contiene ese valor, esto indicaría algún error en la secuencia de eventos que conducen hasta la ejecución de esa línea, de manera que la línea de código se ha ejecutado antes de haber cargado los valores del dropdown. Puedes confirmarlo poniendo un punto de ruptura en esa línea y examinando en ese momento la colección de Items con el debugger. Encontrarás sin duda que "Antioquia" no está cargado en el DropDown. Compruébalo con el debugger, no te confíes por el hecho de que en pantalla se vea el dato esperado, porque la pantalla muestra el resultado final que se envió al navegador al terminar el ciclo de vida del postback, pero durante ese ciclo de vida en el servidor los eventos pudieron ejecutarse en un orden que condujo a que la línea del error se ejecutase en un momento en que los datos aún no estaban cargados.

    El control de usuario contiene un dropdownlista para país, dpto, ciudad y municipio.

    Cuando arrastro este control a la página, me funciona y puede seleccionar Antioquia realizando todo correctamente.

    El problema lo tengo cuando realizo mediante código:  CType(PaDeCiMu1.FindControl("DropDpto"), DropDownList).SelectedValue = "Antioquia" en un evento click de un button.

    Pienso, que podría ser en el orden de eventos, que se esté perdiendo alguno


    miércoles, 2 de octubre de 2019 16:45
  • Cuando arrastro este control a la página, me funciona y puede seleccionar Antioquia realizando todo correctamente.


    Insisto en lo que subrayé antes:  "Compruébalo con el debugger, no te confíes por el hecho de que en pantalla se vea el dato esperado".

    Es un problema de orden de eventos (no de que se pierdan). Casi con toda seguridad, el momento en el que te está saliendo el error es anterior al momento en el que se cargan en el dropdown los valores que ves en pantalla. Por tanto, en ese momento no puedes asignar el SelectedValue, porque todavía no tiene los valores. Recuerda que lo que ves en pantalla es lo que se generó al final del postback. Pero durante los eventos del postback, puede que algunos de esos eventos se disparen antes del evento que recarga el dropdown (recuerda que se tiene que recargar a cada postback, no es como en una aplicación de escritorio que solo lo carga una vez).

    miércoles, 2 de octubre de 2019 18:15
  • Esencialmente el mensaje de error te está diciendo que en el momento de ejecutar esa línea, el DropDpto no contiene ningún elemento cuyo value sea "Antioquia". Si no lo contiene, no lo puedes seleccionar.

    Si estás seguro de que la tabla desde la que se carga el DropDown contiene ese valor, esto indicaría algún error en la secuencia de eventos que conducen hasta la ejecución de esa línea, de manera que la línea de código se ha ejecutado antes de haber cargado los valores del dropdown. Puedes confirmarlo poniendo un punto de ruptura en esa línea y examinando en ese momento la colección de Items con el debugger. Encontrarás sin duda que "Antioquia" no está cargado en el DropDown. Compruébalo con el debugger, no te confíes por el hecho de que en pantalla se vea el dato esperado, porque la pantalla muestra el resultado final que se envió al navegador al terminar el ciclo de vida del postback, pero durante ese ciclo de vida en el servidor los eventos pudieron ejecutarse en un orden que condujo a que la línea del error se ejecutase en un momento en que los datos aún no estaban cargados.

    El control de usuario contiene un dropdownlista para país, dpto, ciudad y municipio.

    Cuando arrastro este control a la página, me funciona y puede seleccionar Antioquia realizando todo correctamente.

    El problema lo tengo cuando realizo mediante código:  CType(PaDeCiMu1.FindControl("DropDpto"), DropDownList).SelectedValue = "Antioquia" en un evento click de un button.

    Pienso, que podría ser en el orden de eventos, que se esté perdiendo alguno


    Pregunta:

    En la página aspx o aspx.vb al ejecutarla, selecciono el país, dpto, ciudad y municipio me funciona y sin ningún problema. Si realizo esto y realizo clic en un control de button autmáticamente me funciona CType(PaDeCiMu1.FindControl("DropDpto"), DropDownList).SelectedValue = "Antioquia".

    Pero si ejecuto la página y hago clic en control button, solo funciona país, pero no dpto.

    Por qué en el orden al seleccionar en el control de usuario (país, dpto, ciudad, Municipio) y luego clic en control button donde se encuentra la instrucción para cambiar la selección mediante código, me funciona.

    Pero necesito realizar clic en con control button para cambiar datos y este no me funciona? 

    miércoles, 2 de octubre de 2019 21:15
  • Esencialmente el mensaje de error te está diciendo que en el momento de ejecutar esa línea, el DropDpto no contiene ningún elemento cuyo value sea "Antioquia". Si no lo contiene, no lo puedes seleccionar.

    Si estás seguro de que la tabla desde la que se carga el DropDown contiene ese valor, esto indicaría algún error en la secuencia de eventos que conducen hasta la ejecución de esa línea, de manera que la línea de código se ha ejecutado antes de haber cargado los valores del dropdown. Puedes confirmarlo poniendo un punto de ruptura en esa línea y examinando en ese momento la colección de Items con el debugger. Encontrarás sin duda que "Antioquia" no está cargado en el DropDown. Compruébalo con el debugger, no te confíes por el hecho de que en pantalla se vea el dato esperado, porque la pantalla muestra el resultado final que se envió al navegador al terminar el ciclo de vida del postback, pero durante ese ciclo de vida en el servidor los eventos pudieron ejecutarse en un orden que condujo a que la línea del error se ejecutase en un momento en que los datos aún no estaban cargados.

    El control de usuario contiene un dropdownlista para país, dpto, ciudad y municipio.

    Cuando arrastro este control a la página, me funciona y puede seleccionar Antioquia realizando todo correctamente.

    El problema lo tengo cuando realizo mediante código:  CType(PaDeCiMu1.FindControl("DropDpto"), DropDownList).SelectedValue = "Antioquia" en un evento click de un button.

    Pienso, que podría ser en el orden de eventos, que se esté perdiendo alguno


    Pregunta:

    En la página aspx o aspx.vb al ejecutarla, selecciono el país, dpto, ciudad y municipio me funciona y sin ningún problema. Si realizo esto y realizo clic en un control de button autmáticamente me funciona CType(PaDeCiMu1.FindControl("DropDpto"), DropDownList).SelectedValue = "Antioquia".

    Pero si ejecuto la página y hago clic en control button, solo funciona país, pero no dpto.

    Por qué en el orden al seleccionar en el control de usuario (país, dpto, ciudad, Municipio) y luego clic en control button donde se encuentra la instrucción para cambiar la selección mediante código, me funciona.

    Pero necesito realizar clic en con control button para cambiar datos y este no me funciona? 

    Nota: El control de usuario, mediante el clic todos los demás controles se realizan (país, dpto, ciudad y municipio).  Mediante código, solo se realiza los eventos de control país. Los demás no.

    Cómo hacer para que desde DropDPais_SelectedIndexChanged ejecute el control que le corresponde a dpto.?

    jueves, 3 de octubre de 2019 5:20
  • Esencialmente el mensaje de error te está diciendo que en el momento de ejecutar esa línea, el DropDpto no contiene ningún elemento cuyo value sea "Antioquia". Si no lo contiene, no lo puedes seleccionar.

    Si estás seguro de que la tabla desde la que se carga el DropDown contiene ese valor, esto indicaría algún error en la secuencia de eventos que conducen hasta la ejecución de esa línea, de manera que la línea de código se ha ejecutado antes de haber cargado los valores del dropdown. Puedes confirmarlo poniendo un punto de ruptura en esa línea y examinando en ese momento la colección de Items con el debugger. Encontrarás sin duda que "Antioquia" no está cargado en el DropDown. Compruébalo con el debugger, no te confíes por el hecho de que en pantalla se vea el dato esperado, porque la pantalla muestra el resultado final que se envió al navegador al terminar el ciclo de vida del postback, pero durante ese ciclo de vida en el servidor los eventos pudieron ejecutarse en un orden que condujo a que la línea del error se ejecutase en un momento en que los datos aún no estaban cargados.

    El control de usuario contiene un dropdownlista para país, dpto, ciudad y municipio.

    Cuando arrastro este control a la página, me funciona y puede seleccionar Antioquia realizando todo correctamente.

    El problema lo tengo cuando realizo mediante código:  CType(PaDeCiMu1.FindControl("DropDpto"), DropDownList).SelectedValue = "Antioquia" en un evento click de un button.

    Pienso, que podría ser en el orden de eventos, que se esté perdiendo alguno


    Pregunta:

    En la página aspx o aspx.vb al ejecutarla, selecciono el país, dpto, ciudad y municipio me funciona y sin ningún problema. Si realizo esto y realizo clic en un control de button autmáticamente me funciona CType(PaDeCiMu1.FindControl("DropDpto"), DropDownList).SelectedValue = "Antioquia".

    Pero si ejecuto la página y hago clic en control button, solo funciona país, pero no dpto.

    Por qué en el orden al seleccionar en el control de usuario (país, dpto, ciudad, Municipio) y luego clic en control button donde se encuentra la instrucción para cambiar la selección mediante código, me funciona.

    Pero necesito realizar clic en con control button para cambiar datos y este no me funciona? 

    Nota: El control de usuario, mediante el clic todos los demás controles se realizan (país, dpto, ciudad y municipio).  Mediante código, solo se realiza los eventos de control país. Los demás no.

    Cómo hacer para que desde DropDPais_SelectedIndexChanged ejecute el control que le corresponde a dpto.?

    Comprendo lo que me quieres decir, el problema es que no se como abordar el problema.

    Control de usuario personalizado tiene sus eventos.

    Control de usuario lo arrastro a la página aspx.vb, que debo hacer o que eventos afectar para que funcione mediante código?

    jueves, 3 de octubre de 2019 22:33
  • Esencialmente el mensaje de error te está diciendo que en el momento de ejecutar esa línea, el DropDpto no contiene ningún elemento cuyo value sea "Antioquia". Si no lo contiene, no lo puedes seleccionar.

    Si estás seguro de que la tabla desde la que se carga el DropDown contiene ese valor, esto indicaría algún error en la secuencia de eventos que conducen hasta la ejecución de esa línea, de manera que la línea de código se ha ejecutado antes de haber cargado los valores del dropdown. Puedes confirmarlo poniendo un punto de ruptura en esa línea y examinando en ese momento la colección de Items con el debugger. Encontrarás sin duda que "Antioquia" no está cargado en el DropDown. Compruébalo con el debugger, no te confíes por el hecho de que en pantalla se vea el dato esperado, porque la pantalla muestra el resultado final que se envió al navegador al terminar el ciclo de vida del postback, pero durante ese ciclo de vida en el servidor los eventos pudieron ejecutarse en un orden que condujo a que la línea del error se ejecutase en un momento en que los datos aún no estaban cargados.

    El control de usuario contiene un dropdownlista para país, dpto, ciudad y municipio.

    Cuando arrastro este control a la página, me funciona y puede seleccionar Antioquia realizando todo correctamente.

    El problema lo tengo cuando realizo mediante código:  CType(PaDeCiMu1.FindControl("DropDpto"), DropDownList).SelectedValue = "Antioquia" en un evento click de un button.

    Pienso, que podría ser en el orden de eventos, que se esté perdiendo alguno


    Pregunta:

    En la página aspx o aspx.vb al ejecutarla, selecciono el país, dpto, ciudad y municipio me funciona y sin ningún problema. Si realizo esto y realizo clic en un control de button autmáticamente me funciona CType(PaDeCiMu1.FindControl("DropDpto"), DropDownList).SelectedValue = "Antioquia".

    Pero si ejecuto la página y hago clic en control button, solo funciona país, pero no dpto.

    Por qué en el orden al seleccionar en el control de usuario (país, dpto, ciudad, Municipio) y luego clic en control button donde se encuentra la instrucción para cambiar la selección mediante código, me funciona.

    Pero necesito realizar clic en con control button para cambiar datos y este no me funciona? 

    Nota: El control de usuario, mediante el clic todos los demás controles se realizan (país, dpto, ciudad y municipio).  Mediante código, solo se realiza los eventos de control país. Los demás no.

    Cómo hacer para que desde DropDPais_SelectedIndexChanged ejecute el control que le corresponde a dpto.?

    Comprendo lo que me quieres decir, el problema es que no se como abordar el problema.

    Control de usuario personalizado tiene sus eventos.

    Control de usuario lo arrastro a la página aspx.vb, que debo hacer o que eventos afectar para que funcione mediante código?

    Página *.ASCX que contiene cuatro DropDownlist (País, Dpto, Ciudad y Municipio)

    Página *.aspx.vb que contiene el control (*.ascx)

    En esta página *.aspx al clicquear en cada DropDownlinst funciona bien cada uno de ellos, sin código de programación.

    En la página *.aspx.vb, el único DropDownList que funciona es país, mediante código de programación.

    Que evento o instrucción debo utilizar?


    viernes, 4 de octubre de 2019 4:01
  • Que evento o instrucción debo utilizar?

    ¿Has utilizado databinding en tiempo de diseño (los automatismos de Visual Studio) para enlazar los controles? Mi experiencia con los automatismos es que solo funcionan bien cuando dejas todo con su comportamiento predeterminado, sin intentar mezclarlo con código que personalice parte de los comportamientos. En cuanto intentas combinar código con los automatismos, al final acabas perdiendo más tiempo intentando hacerlo funcionar que si de entrada hubieses prescindido de los automatismos y lo hubieses programado todo con código.

    Para hacerlo por código, el proceso sería este:

    En el Page_Load, usas un "if not page.ispostback" para cargar los datos del primer dropdown.

    En el selected index changed de ese dropdown, cargas el siguiente, filtrándolo por el valor del primero.

    Repites el paso anterior por cada uno de los dropdown.

    Si algunos están en una página aspx y otros en un ascx, entonces hay que hacer esas conexiones entre la página y el ascx. Si se requiere que al cambiar algo en el ascx se cambie algo en la página, se publica un evento en el ascx y la página se suscribe al evento. Si es al revés, desde el evento de la página se invoca algún método del ascx que previamente habremos hecho público para ese fin.

    Ojo con las inicializaciones en el Page_Load. El orden en el que se disparan los page_load de la página y del ascx no necesariamente es el que el desarrollador piensa que debería ser. Hay que tener cuidado de no meter una dependencia en el orden incorrecto.

    Después de programar todo el funcionamiento de los dropdown de esa manera, ahora todo está bajo tu control. Puedes poner puntos de ruptura en cualquiera de los eventos y seguir la ejecución paso a paso con el debugger. De esta manera, si da algún error o algo no funciona como esperabas, puedes determinar desde el debugger qué es lo que se ha ejecutado y lo que no se ha ejecutado, y de esa manera saber qué es lo que sobra o falta o está fuera de lugar y poder arreglarlo.

    Cerciórate de que sabes manejar bien el debugger y sabes hacer esas cosas de "poner puntos de ruptura" y "seguirlo paso a paso". Al igual que mencionábamos antes para los automatismos, la cantidad de tiempo que perderás por no saber esto es muchísimo mayor que la cantidad de tiempo que te cuesta aprenderlo. Realmente merece la pena dedicar un poco de tiempo a aprender el debugger, te lo ahorrarás con creces a la hora de hacer que tu código funcione.

    viernes, 4 de octubre de 2019 8:13
  • Que evento o instrucción debo utilizar?

    ¿Has utilizado databinding en tiempo de diseño (los automatismos de Visual Studio) para enlazar los controles? Mi experiencia con los automatismos es que solo funcionan bien cuando dejas todo con su comportamiento predeterminado, sin intentar mezclarlo con código que personalice parte de los comportamientos. En cuanto intentas combinar código con los automatismos, al final acabas perdiendo más tiempo intentando hacerlo funcionar que si de entrada hubieses prescindido de los automatismos y lo hubieses programado todo con código.

    Para hacerlo por código, el proceso sería este:

    En el Page_Load, usas un "if not page.ispostback" para cargar los datos del primer dropdown.

    En el selected index changed de ese dropdown, cargas el siguiente, filtrándolo por el valor del primero.

    Repites el paso anterior por cada uno de los dropdown.

    Si algunos están en una página aspx y otros en un ascx, entonces hay que hacer esas conexiones entre la página y el ascx. Si se requiere que al cambiar algo en el ascx se cambie algo en la página, se publica un evento en el ascx y la página se suscribe al evento. Si es al revés, desde el evento de la página se invoca algún método del ascx que previamente habremos hecho público para ese fin.

    Ojo con las inicializaciones en el Page_Load. El orden en el que se disparan los page_load de la página y del ascx no necesariamente es el que el desarrollador piensa que debería ser. Hay que tener cuidado de no meter una dependencia en el orden incorrecto.

    Después de programar todo el funcionamiento de los dropdown de esa manera, ahora todo está bajo tu control. Puedes poner puntos de ruptura en cualquiera de los eventos y seguir la ejecución paso a paso con el debugger. De esta manera, si da algún error o algo no funciona como esperabas, puedes determinar desde el debugger qué es lo que se ha ejecutado y lo que no se ha ejecutado, y de esa manera saber qué es lo que sobra o falta o está fuera de lugar y poder arreglarlo.

    Cerciórate de que sabes manejar bien el debugger y sabes hacer esas cosas de "poner puntos de ruptura" y "seguirlo paso a paso". Al igual que mencionábamos antes para los automatismos, la cantidad de tiempo que perderás por no saber esto es muchísimo mayor que la cantidad de tiempo que te cuesta aprenderlo. Realmente merece la pena dedicar un poco de tiempo a aprender el debugger, te lo ahorrarás con creces a la hora de hacer que tu código funcione.

    Saludos y gracias por contestar.

    Situación 1 (página *.ascx o donde se crea el control de usuario).

    Lo que tú mencionas en el archivo o página que corresponde a control de usuario (*.ascx) lo he tenido en cuenta, haciendo uso: if not page.ispostback y del SelectedIndexChanged.

    Situación 2.

    Página *.aspx.vb.

    En esta, arrastro o hago uso del control de usuario antes mencionado.

    En tiempo de ejecución funciona bien y sin nada que tenga que ver con hacer uso del código de programación. Puedo elegir y los cambios se hacen perfectamente. Esta parte me desconcierta, sin ningún problema todo bien.

    El problema se presenta cuando hago uso del código de programación. El único que cambia, es cuando asigno un valor al SelectedValue de capital.

    Ahora, realizo lo siguiente:

    Selecciono el país mediante un clic  y lo demás (Dpto, ciudad, municipio) por código de programación, excelente, lo proyectado o pensado sale bien haciendo uso del código de programación. Por eso, he pensado en el orden de evento en la página aspx.vb.

    Tendré en cuenta tu consejo.


    viernes, 4 de octubre de 2019 13:10
  • Que evento o instrucción debo utilizar?

    ¿Has utilizado databinding en tiempo de diseño (los automatismos de Visual Studio) para enlazar los controles? Mi experiencia con los automatismos es que solo funcionan bien cuando dejas todo con su comportamiento predeterminado, sin intentar mezclarlo con código que personalice parte de los comportamientos. En cuanto intentas combinar código con los automatismos, al final acabas perdiendo más tiempo intentando hacerlo funcionar que si de entrada hubieses prescindido de los automatismos y lo hubieses programado todo con código.

    Para hacerlo por código, el proceso sería este:

    En el Page_Load, usas un "if not page.ispostback" para cargar los datos del primer dropdown.

    En el selected index changed de ese dropdown, cargas el siguiente, filtrándolo por el valor del primero.

    Repites el paso anterior por cada uno de los dropdown.

    Si algunos están en una página aspx y otros en un ascx, entonces hay que hacer esas conexiones entre la página y el ascx. Si se requiere que al cambiar algo en el ascx se cambie algo en la página, se publica un evento en el ascx y la página se suscribe al evento. Si es al revés, desde el evento de la página se invoca algún método del ascx que previamente habremos hecho público para ese fin.

    Ojo con las inicializaciones en el Page_Load. El orden en el que se disparan los page_load de la página y del ascx no necesariamente es el que el desarrollador piensa que debería ser. Hay que tener cuidado de no meter una dependencia en el orden incorrecto.

    Después de programar todo el funcionamiento de los dropdown de esa manera, ahora todo está bajo tu control. Puedes poner puntos de ruptura en cualquiera de los eventos y seguir la ejecución paso a paso con el debugger. De esta manera, si da algún error o algo no funciona como esperabas, puedes determinar desde el debugger qué es lo que se ha ejecutado y lo que no se ha ejecutado, y de esa manera saber qué es lo que sobra o falta o está fuera de lugar y poder arreglarlo.

    Cerciórate de que sabes manejar bien el debugger y sabes hacer esas cosas de "poner puntos de ruptura" y "seguirlo paso a paso". Al igual que mencionábamos antes para los automatismos, la cantidad de tiempo que perderás por no saber esto es muchísimo mayor que la cantidad de tiempo que te cuesta aprenderlo. Realmente merece la pena dedicar un poco de tiempo a aprender el debugger, te lo ahorrarás con creces a la hora de hacer que tu código funcione.

    Saludos y gracias por contestar.

    Situación 1 (página *.ascx o donde se crea el control de usuario).

    Lo que tú mencionas en el archivo o página que corresponde a control de usuario (*.ascx) lo he tenido en cuenta, haciendo uso: if not page.ispostback y del SelectedIndexChanged.

    Situación 2.

    Página *.aspx.vb.

    En esta, arrastro o hago uso del control de usuario antes mencionado.

    En tiempo de ejecución funciona bien y sin nada que tenga que ver con hacer uso del código de programación. Puedo elegir y los cambios se hacen perfectamente. Esta parte me desconcierta, sin ningún problema todo bien.

    El problema se presenta cuando hago uso del código de programación. El único que cambia, es cuando asigno un valor al SelectedValue de capital.

    Ahora, realizo lo siguiente:

    Selecciono el país mediante un clic  y lo demás (Dpto, ciudad, municipio) por código de programación, excelente, lo proyectado o pensado sale bien haciendo uso del código de programación. Por eso, he pensado en el orden de evento en la página aspx.vb.

    Tendré en cuenta tu consejo.


    Solucionado el problema.

    Después de asignar el valor al control downlist mediante código, invoco el procedimiento que le corresponde a dpto, ciudad y municipio y hasta este momento me ha funcionado.

    Muchas gracias

    • Marcado como respuesta Campeon_01 viernes, 4 de octubre de 2019 23:17
    viernes, 4 de octubre de 2019 23:17