none
Dropdownlist regresa al primer registro c# webfoorms RRS feed

  • Pregunta

  • Saludos

    amigos no entiendo porque mi dropdownlist después del autopostback regresa al primer registro y no se queda en la selección que realice.

    Tengo dos dropdownlist anidados: dropPais y dropProvincia ambos se llenan de una base de datos pero el dropProvincia se llena dependiendo de la información de dropPais.

    verán

    mi problema esta en el dropPriovincia.

    Este es el codigo en asp.net:

    <asp:DropDownList ID="DdlProvincia" runat="server" ToolTip="Seleccione la pronvincia del pais" ForeColor="#0066FF" Font-Bold="True" Enabled="True" Font-Size="Medium" AutoPostBack="True" TabIndex="10" CssClass="DdlProvincia" OnSelectedIndexChanged="DdlProvincia_SelectedIndexChanged" OnTextChanged="DdlProvincia_TextChanged"></asp:DropDownList> 

    y este es el código c#

                                                    

     protected void DdlPais_SelectedIndexChanged(object sender, EventArgs e)
            {

                    int Id_Provincia = Convert.ToInt32(DdlPais.SelectedValue);
                    DdlProvincia.DataSource = Consultar("Select * from Provincia Where Id_Provincia=" + Id_Provincia);
                    DdlProvincia.DataTextField = "Pro_Nombre";
                    DdlProvincia.DataValueField = "Id_Provincia";
                    DdlProvincia.DataBind();
                    DdlProvincia.Items.Insert(0, new ListItem("[Seleccionar]", "0"));

            }

            protected void DdlProvincia_TextChanged(object sender, EventArgs e)
            {
                TxtDireccion.Focus();
            }

    Cuando pongo el autopostback en false de dropProvincia todo sale bien, el problema es cuando pongo el autopostsback en true es que me selecciona de la lista el primer registro y si por ejemplo selecciono el items 3 cuando realiza el postback lo devuelve al items 1, y no me lo deja en el items 3.

    necesito el autopostsback del dropProvincia en true, porque necesito que cuando seleccione la provincia me salte al siguiente TextBox que es TxtDireccion.

    pueden darme una mano por favor, para que cuando seleccione el items deseado se quede ahí y me salte al siguiente textbox.

    Gracias.

    sábado, 19 de octubre de 2019 10:56

Todas las respuestas

  • Hola, en que evento cargas el dropdownlist

    si es en el load deberías tener un bloque de código como este

    protected void Page_Load(object sender, EventArgs e)
            {
                if (!Page.IsPostBack)
                {
               'cargar aqui
                }
            }


    Votar y marcar respuestas es agradecer.
    Saludos.
    Lima-Perú

    sábado, 19 de octubre de 2019 12:44
  • lo cargo en load el droppais, pero el droProvincia no

    el droprovincia lo cargo desde el selectindexchanged de pais.

    sábado, 19 de octubre de 2019 14:26
  • lo cargo en load el droppais, pero el droProvincia no

    el droprovincia lo cargo desde el selectindexchanged de pais.

    Hola, por lo que comentas asumo que el ddlPais no mueve su selección después del autopostback

    y en el ddlProvincia defines dos eventos

    OnSelectedIndexChanged="DdlProvincia_SelectedIndexChanged" OnTextChanged="DdlProvincia_TextChanged"></asp:DropDownList> 

    Solo muestras el código del Text_Changed que haces en el otro?.,porque no utilizas el otro que tienes definido

    es decir el DdlProvincia_SelectedIndexChanged


    Votar y marcar respuestas es agradecer.
    Saludos.
    Lima-Perú

    sábado, 19 de octubre de 2019 16:13
  • lo hice lo movi y como quiera no me funciona.
    sábado, 19 de octubre de 2019 21:17
  • lo hice lo movi y como quiera no me funciona.
    Hola podrías postear el resto de tu código?,me parece que el error está en otro lado quizás en el Load

    Votar y marcar respuestas es agradecer.
    Saludos.
    Lima-Perú

    domingo, 20 de octubre de 2019 16:43
  • hola

    >>lo cargo en load el droppais, pero el droProvincia no

    no importa, porque al recargarse uno afecta al otro, ya que el evento al servidor SelectedIndexChanged es quien ejecuta el Load

    por eso es correcto lo que menciona Augusto, debes poner el codigo que carga ls paises dentro del if(!IsPostBack){...} del Load

    Valida si ademas del combo de provincias pierdes la seleccion del combo de paises, puedes poner un breakpoint en el codigo para evaluar por donde pasa la ejecucion

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 21 de octubre de 2019 12:05
  • Saludos gracias por contestar

    Veran: leandro y Augusto

    el dropdownlist tengo que ponerlo obligatoriamente el autopostback en true.

    tanto en el dropPais como en dropprovincia

    al cargar la pagina el cargo el droppais sin problema porque luego lo pongo dentro de un isposback en el load,

    pero la parte del dropprovincia debeo ponerlo el Ddlpais selectindexcahnge para que se ejecute el cambio.

    cuando la pantalla se refresca en cualquier momento el dropprovincia vuelve nuevamente al primer registro de la lista.

    no se como hacer para que cuando se refresque la pantalla en cualquier momento el dropprovincia se quede en el item que seleccione de la lista.

    ejemplo

    mi lista es la siguiente

    Azua

    Bani

    Barahona

    pedernales

    etc.

    si selecciono Barahona que es la posicion 3 de la lista, cuando realiza un postback regresa a la posicion 1 y eso esta mal, debe permanecer el la posicion3.


    Coloco el codigo completo

                                                                                                                                                                  

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;
    using System.Data.SqlClient;
    using System.Configuration;
    using System.Text;
    using System.Threading.Tasks;
    using System.ComponentModel;
    using System.Drawing;

    namespace Divisa.Seguridad
    {
        public partial class Usuario : System.Web.UI.Page
        {

            private void ContarRegistro()
            {

                string constr = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();
                SqlConnection con = new SqlConnection(constr);
                con.Open();
                SqlCommand cmd10 = new SqlCommand("sp_ContarRegistro_Usuario", con);
                cmd10.CommandType = CommandType.StoredProcedure;
                int maxId = Convert.ToInt32(cmd10.ExecuteScalar());
                TxtCodigo.Text = maxId.ToString();

                con.Close();

            }

            public void IniciarllenadoDropDown()
            {
                DdlPais.DataSource = Consultar("Select * from pais");
                DdlPais.DataTextField = "Pai_Nombre";
                DdlPais.DataValueField = "Id_Pais";
                DdlPais.DataBind();
                DdlPais.Items.Insert(0, new ListItem("[Seleccionar]","0"));
                DdlProvincia.Items.Insert(0, new ListItem("[Seleccionar]", "0"));

            }

            public DataSet Consultar(string strSQL)
            {
                string strconn = "data source=Agustin;Integrated Security=False;database=Divisas;uid=sa;password=123456";
                SqlConnection con = new SqlConnection(strconn);
                con.Open();
                SqlCommand cmd = new SqlCommand(strSQL, con);
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                DataSet ds = new DataSet();
                da.Fill(ds);
                con.Close();
                return ds;
            }

            protected void Page_Load(object sender, EventArgs e)
            {
                MultiView1.ActiveViewIndex = 0;

                if (!IsPostBack)
                {
                    ContarRegistro();

                    IniciarllenadoDropDown();

                    TxtUsuario.Focus();





                }

                //Login Seguridad
                LblIdentificacion.Text = (string)Session["Log_NickName"];
                LblUsuario.Text = (string)Session["Log_Usuario1"];



            }

            protected void TxtApellido_TextChanged(object sender, EventArgs e)
            {
                  TxtNickName.Text = string.Format("{0} {1}", TxtNombre.Text, TxtApellido.Text);
                  TxtCedula.Focus();
            }

            protected void DdlPais_SelectedIndexChanged(object sender, EventArgs e)
            {

                    int Id_Provincia = Convert.ToInt32(DdlPais.SelectedValue);
                    DdlProvincia.DataSource = Consultar("Select * from Provincia Where Id_Provincia=" + Id_Provincia);
                    DdlProvincia.DataTextField = "Pro_Nombre";
                    DdlProvincia.DataValueField = "Id_Provincia";
                    DdlProvincia.DataBind();
                    DdlProvincia.Items.Insert(0, new ListItem("[Seleccionar]", "0"));
                    DdlProvincia.AutoPostBack = false;

            }

            protected void DdlProvincia_SelectedIndexChanged(object sender, EventArgs e)
            {

                TxtDireccion.Focus();

            }
        }
    }

    por favor ayudenme.


    • Editado agustin173 lunes, 21 de octubre de 2019 12:31
    lunes, 21 de octubre de 2019 12:29
  • hola

    >>el dropdownlist tengo que ponerlo obligatoriamente el autopostback en true. tanto en el dropPais como en dropprovincia

    debes ponerlo en true solo en el combo que quieras que ejecute el evento SelectedIndexChanged en el servidor, sino le defines el evento no hace falta

    >>pero la parte del dropprovincia debeo ponerlo el Ddlpais selectindexcahnge para que se ejecute el cambio.

    el combo de provincias no deberia refrescar la pantalla, por eso no le defines el evento, pon el false el AutoPostBack

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 21 de octubre de 2019 13:22
  • leandro veras tienens razon,

    pero tengo un button que realiza otra cosa en la aplicación cuando lo ejecuto el dropprovincia como quiera regresa al primer items.

    no se como hacer para que el dropprovincia el solo no se refresque dentro de la pagina, yo trate de usar updapanel pero no me funciono.

    tienes alguna idea para que no se me refresque el dropprovincia solo el, porque no se como llevar esa parte del ddlpais_SelectIndexChanged al Isposback en el load, para que no se refresque el dropprovincia.

    gracias.

    lunes, 21 de octubre de 2019 13:34
  • hola

    >>pero tengo un button que realiza otra cosa en la aplicación cuando lo ejecuto el dropprovincia como quiera regresa al primer items.

    es un boton de asp.net ?

    si pones breakpoint en el codigo puedes ver que no pase por la recarga de los combos, o sea donde asigna el DataSource

    >>no se como llevar esa parte del ddlpais_SelectIndexChanged al Isposback en el load,

    eso no se cambia, no deberia ingresar a ese evento si presionas el boton

    si lo hace es porque no esta ejecutando correctamente el evento Click, valida el evento a que metodo en el codigo esta asociado

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 21 de octubre de 2019 14:18
  • Saludos

    gracias por su respuesta pero resolví usando un updatepanel colocando dentro de ellos solo los componentes que se refrescaban y lo logre.

    gracias

    sábado, 2 de noviembre de 2019 19:46