none
Ejecutar una sola vez un databound RRS feed

  • Pregunta

  • Hola a todos:

    Tengo dos dropdownlist, ddlpaises y ddlregiones

    Al ejecutar las páginas web por primera vez doy valores por defecto a ambos, ddlpaises a 65 y ddlregiones a 6578 (España y Madrid)

        Sub cargar_paises(ByVal s As Object, ByVal e As EventArgs) Handles ddlpaises.DataBound, ddlpaises_factura.DataBound, ddlpaiseseventos.DataBound, ddlpaisesnegocios.DataBound, ddlpaises_otrosdatos.DataBound
            Dim cnconexion As New SqlConnection(ConfigurationManager.ConnectionStrings("Cresolia").ConnectionString)
            Dim sqlc As New SqlCommand("seleccionar_datos_paises", cnconexion)
            Dim intpais As Integer
            Response.Write("cargar_paises")
            Response.Write(s.id)
            sqlc.CommandType = CommandType.StoredProcedure
            If Request.Cookies("cuenta") Is Nothing Then
                sqlc.Parameters.AddWithValue("@pais_empresa", True)
            Else
                sqlc.Parameters.AddWithValue("@c10", Request.Cookies("cuenta").Value)
            End If
            cnconexion.Open()
            intpais = sqlc.ExecuteScalar
            cnconexion.Close()
            s.SelectedValue = intpais
        End Sub
    
        Sub cargar_regiones(ByVal s As Object, ByVal e As EventArgs) Handles ddlregiones.DataBound, ddlregioneseventos.DataBound, ddlregiones_factura.DataBound, ddlregionesnegocios.DataBound, ddlregiones_otrosdatos.DataBound
            If Not IsPostBack Then
                Dim cnconexion As New SqlConnection(ConfigurationManager.ConnectionStrings("Cresolia").ConnectionString)
                Dim sqlc As New SqlCommand("seleccionar_datos_regiones", cnconexion)
                sqlc.CommandType = CommandType.StoredProcedure
                If Request.Cookies("cuenta") Is Nothing Then
                    sqlc.Parameters.AddWithValue("@region_empresa", True)
                Else
                    sqlc.Parameters.AddWithValue("@c10", Request.Cookies("cuenta").Value)
                End If
                s.SelectedValue = sqlc.ExecuteScalar
                cnconexion.Close()
            End If
        End Sub

    Pero cuando cambio el país no quiero que se ejecute el cargar_regiones ya que el selectedvalue lo saca del ddlpaises, no el valor por defecto

    El html es

            <asp:SqlDataSource ID="sqldspaises" ConnectionString="<%$ ConnectionStrings:Cresolia%>" EnableCaching="true" CacheKeyDependency="mantenimiento" SelectCommandType="StoredProcedure" SelectCommand="seleccionar_paises" runat="server">
                <SelectParameters>
                    <asp:QueryStringParameter Name="idioma" QueryStringField="idioma" />
                </SelectParameters> 
            </asp:SqlDataSource>
            <asp:SqlDataSource ID="sqldsregiones" ConnectionString="<%$ ConnectionStrings:Cresolia%>"  SelectCommandType="StoredProcedure" SelectCommand="seleccionar_regiones" runat="server">
                <SelectParameters>
                    <asp:ControlParameter Name="p0" ControlID="ddlpaises" PropertyName="selectedvalue" />
                    <asp:QueryStringParameter Name="idioma" QueryStringField="idioma" />
                </SelectParameters> 
            </asp:SqlDataSource>
            <asp:SqlDataSource ID="sqldsregioneseventos" ConnectionString="<%$ ConnectionStrings:Cresolia%>"  SelectCommandType="StoredProcedure" SelectCommand="seleccionar_regiones" runat="server">
                <SelectParameters>
                    <asp:ControlParameter Name="p0" ControlID="ddlpaiseseventos" PropertyName="selectedvalue" />
                    <asp:QueryStringParameter Name="idioma" QueryStringField="idioma" />
                </SelectParameters> 
            </asp:SqlDataSource>
            <asp:SqlDataSource ID="sqldsregionesnegocios" ConnectionString="<%$ ConnectionStrings:Cresolia%>"  SelectCommandType="StoredProcedure" SelectCommand="seleccionar_regiones" runat="server">
                <SelectParameters>
                    <asp:ControlParameter Name="p0" ControlID="ddlpaisesnegocios" PropertyName="selectedvalue" />
                    <asp:QueryStringParameter Name="idioma" QueryStringField="idioma" />
                </SelectParameters> 
            </asp:SqlDataSource>
            <asp:SqlDataSource ID="sqldsmodos" ConnectionString="<%$ ConnectionStrings:Cresolia%>"  SelectCommandType="StoredProcedure" SelectCommand="seleccionar_modos" runat="server">
                <SelectParameters>
                    <asp:QueryStringParameter Name="idioma" QueryStringField="idioma" />
                </SelectParameters>
            </asp:SqlDataSource>
            <asp:SqlDataSource ID="sqldsregiones_otrosdatos" ConnectionString="<%$ ConnectionStrings:Cresolia%>"  SelectCommandType="StoredProcedure" SelectCommand="seleccionar_regiones" runat="server">
                <SelectParameters>
                    <asp:ControlParameter Name="p0" ControlID="ddlpaises_otrosdatos" PropertyName="selectedvalue" />
                    <asp:QueryStringParameter Name="idioma" QueryStringField="idioma" />
                </SelectParameters> 
            </asp:SqlDataSource>
            <asp:SqlDataSource ID="sqldstiposidentificaciones_factura" ConnectionString="<%$ ConnectionStrings:Cresolia%>" SelectCommandType="StoredProcedure" SelectCommand="seleccionar_tipos_identificaciones" runat="server">
                <SelectParameters>
                    <asp:QueryStringParameter Name="idioma" QueryStringField="idioma" />
                </SelectParameters> 
            </asp:SqlDataSource>
            <asp:SqlDataSource ID="sqldsregiones_factura" ConnectionString="<%$ ConnectionStrings:Cresolia%>"  SelectCommandType="StoredProcedure" SelectCommand="seleccionar_regiones" runat="server">
                <SelectParameters>
                    <asp:ControlParameter Name="p0" ControlID="ddlpaises_factura" PropertyName="selectedvalue" />
                    <asp:QueryStringParameter Name="idioma" QueryStringField="idioma" />
                </SelectParameters> 
            </asp:SqlDataSource>

    ¿Cómo hacerlo? ¿Hay alguna alternativa mejor?

    Gracias por anticipado


    • Editado volar.2014 jueves, 21 de mayo de 2015 17:33
    jueves, 21 de mayo de 2015 17:27

Respuestas

  • Puedes probar a meterle la propiedad SelectedIndexChanged, en el LOAD cargas ambos DropDownList  y cuando cambias de país, lanza el evento SelectedIndexChanged y ahí recargas el ddlregiones con los nuevos datos.

    protected void ddlpaises_SelectedIndexChanged(object sender, EventArgs e){
     
     ddlregiones.Items.Clear();
     ddlregiones.DataSource = RegionesBLL.GetRegionesByPais(Convert.ToInt32(ddlPaises.SelectedValue));
     ddlregiones.DataBind();
    
    }

    Mira a ver si te sirve. Un saludo

    • Marcado como respuesta volar.2014 domingo, 24 de mayo de 2015 18:39
    viernes, 22 de mayo de 2015 10:28

Todas las respuestas

  • hola

    en que parte del codigo realizas el DataBind() de combo de paises ?

    si lo haces en el Load de webform recuerda que debes ponerlo dentro del

    If Not IsPostBack Then
    
       'aqui codigo
    
    End If


    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 21 de mayo de 2015 17:43
  • Hola:

    Gracias, Leandro.

    El html de los dropdownlist  es

                    <tr>
                       <td><b><asp:label ForeColor="Red" Text="*" runat="server" /> <asp:localize ID="locpais" runat="server" /></b></td><td><asp:DropDownList ID="ddlpaises" DataSourceID="sqldspaises" AutoPostBack="true" DataTextField="pais" DataValueField="p0" runat="server" /></td>
                       <td><b><asp:label ForeColor="Red" Text="*" runat="server" /> <asp:localize ID="locregion" runat="server" /></b></td><td><asp:DropDownList ID="ddlregiones" DataSourceID="sqldsregiones" DataTextField="region"  DataValueField="r0" runat="server" /></td>
                    </tr>
    

    Son datos que provienen de una tabla, la del sqldatasource

    El tema es hacer solamente ejecutar una vez cargar_regiones

    Gracias de antemano. Si hace falta más info, te la doy.

    jueves, 21 de mayo de 2015 17:59
  • Puedes probar a meterle la propiedad SelectedIndexChanged, en el LOAD cargas ambos DropDownList  y cuando cambias de país, lanza el evento SelectedIndexChanged y ahí recargas el ddlregiones con los nuevos datos.

    protected void ddlpaises_SelectedIndexChanged(object sender, EventArgs e){
     
     ddlregiones.Items.Clear();
     ddlregiones.DataSource = RegionesBLL.GetRegionesByPais(Convert.ToInt32(ddlPaises.SelectedValue));
     ddlregiones.DataBind();
    
    }

    Mira a ver si te sirve. Un saludo

    • Marcado como respuesta volar.2014 domingo, 24 de mayo de 2015 18:39
    viernes, 22 de mayo de 2015 10:28
  • Y en el Page_Load aplica lo que te ha dicho Leandro, el control del PostBack

    If Not IsPostBack Then

    para que los datos te los cargue al cargar la página y no sea un postback, así cuando haga el postback el cambio de selección de país, se cargarán los de la selección que has realizado.

    viernes, 22 de mayo de 2015 10:45