none
Evento SelectedIndexChanged antes que Evento Click RRS feed

  • Pregunta

  • buenas... estoy con un inconveniente... que necesito resolver urgente. Tengo una lista de noticias las cuales selecciono desde un DropDownList, al seleccionar me cambia automaticamente el contenido de la noticia particular, lista para modificar su contenido. Ahora el problema es que al querer modificar algo de estos datos, al presionar el control button, me activa primero el evento SelectedIndexChanged del control DropDownList y luego ejecuta el evento Click del button... el problema es que me borra los cambios y me vuelve a actualizar los mismos datos....

    lo que quisiera es como evitar que al presionar el control button no se ejecute el evento SelectedIndexChanged del DropDownList... El control button esta dentro de un updatepanel y en los triggers del updatepanel esta el evento SelectedIndexChanged .

    saludos


    Dante Tagliavini

    miércoles, 18 de julio de 2012 11:52

Respuestas

  • Hola Creed55
    La verdad que es raro lo que te sucede, tendriamos que ver tambien como esta configurado el UpdatePanel, pero si no lo mencionas seria que esta en modo de actualizacion "Always" no?

    Mira hice un ejemplo sencillo que si funciona la idea (no hace nada) y lo hice con "Jedis ;)"

    Aqui el UpdatePanel con los controles

     <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always">
            <ContentTemplate>
                <p>
                    LIsta de Jedis:
                    <asp:DropDownList ID="ddlJedis" runat="server"
                        AutoPostBack="True"
                        onselectedindexchanged="ddlJedis_SelectedIndexChanged">
                    </asp:DropDownList>
                </p>
                
                <asp:Panel ID="Panel1" runat="server" Visible="False">
                 <p>
                    Editando Jedi:<br/>
                    Nombre: <asp:TextBox ID="txtJediNombre" runat="server"></asp:TextBox> <br/>
                    <br/>
                    <br/>
                      <asp:Button ID="btnActualizar" runat="server" onclick="btnActualizar_Click" 
                        Text="Actualizar" />
                        <asp:Button ID="btnCancelar" runat="server" 
                        Text="Cancelar" onclick="btnCancelar_Click" />
                </p>
                
                </asp:Panel>
               
                <asp:Label ID="lblMensaje" runat="server" Text=""></asp:Label>
               
                <br />
            </ContentTemplate>
          
        </asp:UpdatePanel>

    Y aqui el codebehind, que si bien esta en C# se entiende la idea (debemos poder conversar VB.NET y C# indistintamente je!)
    Cuando se cambia el Dropdownlist, presento la info en un PAnel1 (seria bueno aqui tener un FormView) pero quise respectar algo similiar a lo que tenias, y alli dos botones Aceptar y Cancelar

     protected void Page_Load(object sender, EventArgs e)
        {
    
            if (!Page.IsPostBack)
            {
                CargarJedis();
            }
            lblHora.Text = DateTime.Now.ToLongTimeString();
        }
    
        private void CargarJedis()
        {
            ddlJedis.DataSource = JediRepository.Listado();
            ddlJedis.DataBind();
        }
        protected void ddlJedis_SelectedIndexChanged(object sender, EventArgs e)
        {
            txtJediNombre.Text = ddlJedis.SelectedItem.Text;
            lblMensaje.Text = string.Empty;
            Panel1.Visible = true;
        }
        protected void btnActualizar_Click(object sender, EventArgs e)
        {
            lblMensaje.Text = "Se modifico el nombre a " + txtJediNombre.Text;
            Panel1.Visible = false;
        }
        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            Panel1.Visible = false;
        }
    (avisame y te paso entero el ejemplo en mi dropbox)

    Has un ejemplo sencillo tambien tu para corroborar que todo funciona bien ;) o mejor dicho que los eventos estan bien enlazados

    Espero que te sirva de ayuda o guía


    Jose. A Fernandez | blog: http://geeks.ms/blogs/fernandezja

    jueves, 19 de julio de 2012 16:07

Todas las respuestas

  • hola

    en que evento cargas los items del dropdownlist ? es en el page_load si es asi pones esto dentro del

    if(!IsPostBack)

    para que la accion de un evento no recargue el combo

    ------

    ademas que sucede si quitas el updatepanel? podrias crearte un backup de la pagina y quitarlo para ver si es este el que ocasiona el problema

    porque quizas algun trigger este mal definido y cause el evento incorrecto si sin el updatepanel continua el problema entocnes no es este, sino se presenta entonces ya sabes donde revisar

    El control button esta dentro de un updatepanel y en los triggers del updatepanel esta el evento SelectedIndexChanged .

    pues eso me genera ruido porque si el boton lanza una actualizacion del updatepanel entonces lanzaria este evento, revisalo

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    miércoles, 18 de julio de 2012 12:10
  • Gracias leandro... mira el contenido del combo lo cargo mediante el control sqldatasource en diseño.... no cargo nada en el evento load.

    Voy a sacar el updatepanel y te aviso en instantes..


    Dante Tagliavini

    miércoles, 18 de julio de 2012 12:22
  • hola leandro mira acabo de sacar el updatepanel y me genera el mismo problema...

    te mando el codigo asi lo veas....

     Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            If Not Page.IsPostBack Then
                CargarNoticias()
                DropDownList1.Focus()
            End If
        End Sub
        Sub CargarNoticias()
            Dim ds As New DataSet
            If Clase.ObtenerPrimerNoticias(ConfigurationManager.ConnectionStrings("Gourmet").ConnectionString).Tables(0).Rows.Count > 0 Then
                ds = Clase.ObtenerDatosNoticias(ConfigurationManager.ConnectionStrings("Gourmet").ConnectionString, Clase.ObtenerPrimerNoticias(ConfigurationManager.ConnectionStrings("Gourmet").ConnectionString).Tables(0).Rows(0).Item("IdNoticia"))
                If ds.Tables(0).Rows.Count > 0 Then
                    MostrarDatos(ds)
                End If
            End If
        End Sub
        Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
            Clase.ActualizarNoticias(ConfigurationManager.ConnectionStrings("Gourmet").ConnectionString, DropDownList1.SelectedValue, TxtFecha.Text, "", TxtTitulo.Text, "", Txtcuerpo.Text, "", True)
        End Sub
        Protected Sub DropDownList1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DropDownList1.SelectedIndexChanged
            Dim ds As New DataSet
            ds = Clase.ObtenerDatosNoticias(ConfigurationManager.ConnectionStrings("Gourmet").ConnectionString, DropDownList1.SelectedValue)
            MostrarDatos(ds)
        End Sub
        Sub MostrarDatos(ByVal Table As DataSet)
            TxtFecha.Text = Table.Tables(0).Rows(0).Item("Fecha")
            TxtTitulo.Text = Table.Tables(0).Rows(0).Item("Titulo")
            Txtcuerpo.Text = Table.Tables(0).Rows(0).Item("cuerpo")
        End Sub


    Dante Tagliavini

    miércoles, 18 de julio de 2012 12:30
  • la verdad esta muy raro, no me explico que podra estar pasando

    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    miércoles, 18 de julio de 2012 14:25
  • hola leandro....pero para vos esta bien el codigo que tengo?

    saludos


    Dante Tagliavini

    miércoles, 18 de julio de 2012 22:10
  • Hola Creed55
    La verdad que es raro lo que te sucede, tendriamos que ver tambien como esta configurado el UpdatePanel, pero si no lo mencionas seria que esta en modo de actualizacion "Always" no?

    Mira hice un ejemplo sencillo que si funciona la idea (no hace nada) y lo hice con "Jedis ;)"

    Aqui el UpdatePanel con los controles

     <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always">
            <ContentTemplate>
                <p>
                    LIsta de Jedis:
                    <asp:DropDownList ID="ddlJedis" runat="server"
                        AutoPostBack="True"
                        onselectedindexchanged="ddlJedis_SelectedIndexChanged">
                    </asp:DropDownList>
                </p>
                
                <asp:Panel ID="Panel1" runat="server" Visible="False">
                 <p>
                    Editando Jedi:<br/>
                    Nombre: <asp:TextBox ID="txtJediNombre" runat="server"></asp:TextBox> <br/>
                    <br/>
                    <br/>
                      <asp:Button ID="btnActualizar" runat="server" onclick="btnActualizar_Click" 
                        Text="Actualizar" />
                        <asp:Button ID="btnCancelar" runat="server" 
                        Text="Cancelar" onclick="btnCancelar_Click" />
                </p>
                
                </asp:Panel>
               
                <asp:Label ID="lblMensaje" runat="server" Text=""></asp:Label>
               
                <br />
            </ContentTemplate>
          
        </asp:UpdatePanel>

    Y aqui el codebehind, que si bien esta en C# se entiende la idea (debemos poder conversar VB.NET y C# indistintamente je!)
    Cuando se cambia el Dropdownlist, presento la info en un PAnel1 (seria bueno aqui tener un FormView) pero quise respectar algo similiar a lo que tenias, y alli dos botones Aceptar y Cancelar

     protected void Page_Load(object sender, EventArgs e)
        {
    
            if (!Page.IsPostBack)
            {
                CargarJedis();
            }
            lblHora.Text = DateTime.Now.ToLongTimeString();
        }
    
        private void CargarJedis()
        {
            ddlJedis.DataSource = JediRepository.Listado();
            ddlJedis.DataBind();
        }
        protected void ddlJedis_SelectedIndexChanged(object sender, EventArgs e)
        {
            txtJediNombre.Text = ddlJedis.SelectedItem.Text;
            lblMensaje.Text = string.Empty;
            Panel1.Visible = true;
        }
        protected void btnActualizar_Click(object sender, EventArgs e)
        {
            lblMensaje.Text = "Se modifico el nombre a " + txtJediNombre.Text;
            Panel1.Visible = false;
        }
        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            Panel1.Visible = false;
        }
    (avisame y te paso entero el ejemplo en mi dropbox)

    Has un ejemplo sencillo tambien tu para corroborar que todo funciona bien ;) o mejor dicho que los eventos estan bien enlazados

    Espero que te sirva de ayuda o guía


    Jose. A Fernandez | blog: http://geeks.ms/blogs/fernandezja

    jueves, 19 de julio de 2012 16:07
  • Hola gracias por responder... si pude solucionarlo con mi codigo.... nose la verdad que estaba pasando pero lo que hice fue reemplazar el master page que tenia y me ando.... no cambie nada de mi codigo.

    Gracias igual

    Atte,


    Dante Tagliavini

    jueves, 19 de julio de 2012 17:01
  • Dante: seguro q solo eso es lo que hiciste?

    Tengo el mismo problema y no logro encontrar la solucion, lo raro es que en otro archivo funciona perfecto, pero tengo una serie de archivos que no, mi problema radica en que tengo un gridview q se carga mediante la seleccion de dos DropDownList , a medida que voy seleccionando o filtrando con los dos DropDownList el gridview va cambiando, una vez que ternimo de filtrar cambio valores en los campos que estan en el ItemTemplate del gridview y hago clic en un objeto button para guardar los cambios, el tema es que antes de ejecutarse el evento click del objeto button se ejecuta nuevamente el evento SelectedIndexChanged de los dos DropDownList con los que filtro el gridview.

    cueston que no deberia suceder.

    todo esta dentro de un updatepanel. tengo otro archivo q tiene una funcionalidad casi exacta salvo por la cantidad de campos de el gridview y funciona a la perfeccion, tambien con todo dentro de un updatepanel.

    lunes, 1 de febrero de 2016 17:00