none
Atribuir valores para uma Dropdownlist RRS feed

  • Pergunta

  • Olá Pessoal, 

    Estou usando uma esquema de cascading em dropdownlist através de Jquery. O processo está tudo certo para inserção, porém, quando preciso efetuar um update e necessito atribuir valores para estas dropdowlist encontro um grande problema porque as dropdownlist não possuem valores. 

    Estou utilizando este exemplo para efetuar tudo o processo. http://www.aspsnippets.com/Articles/AJAX-Cascading-DropDownList-using-jQuery-in-ASP.Net.aspx

    Estou usando este esquema para popular as dropdownlists. 

    SqlConnection conpai = new SqlConnection();
                    conpai.ConnectionString = ConfigurationManager.ConnectionStrings["PROJETOALConnectionString"].ConnectionString;

                    string querypai = "select PAIS.ID, esta.id, muni.id from PCLIENTE cli, PRAMOATIVIDADE RAMO, PMUNICIPIO MUNI, PESTADO ESTA, PPAIS PAIS where CLI.IDPRAMOATIVIDADE = RAMO.ID AND CLI.IDPMUNICIPIO = MUNI.ID AND MUNI.IDPESTADO = ESTA.ID AND ESTA.IDPPAIS = PAIS.ID AND cli.ID = @codigo";
                    SqlCommand cmdpai = new SqlCommand(querypai, conpai);
                    cmdpai.Parameters.AddWithValue("@codigo", txt_codigo_cli.Text);

                    try
                    {

                        conpai.Open();

                        SqlDataReader dr = cmdpai.ExecuteReader();
                        if (dr.Read())
                        {



                            ddlContinents.DataTextField = "NOME";
                            ddlContinents.DataValueField = "ID";
                            ddlContinents.SelectedValue = dr[0].ToString();
                           

                            ddlCountries.DataTextField = "ESTADO";
                            ddlCountries.DataValueField = "ID";
                            ddlCountries.SelectedValue = dr[1].ToString();

                            ddlCities.DataTextField = "NOME";
                            ddlCities.DataValueField = "ID";
                            ddlCities.SelectedValue = dr[2].ToString();



                        }

                        dr.Close();
                    }

                    catch (SqlException ex)
                    {
                        //ex.Message
                    }
                    catch (Exception ex)
                    {
                        //verificar exceção
                    }
                    finally
                    {
                        conpai.Close();
                    }

    Alguém sabe o que eu poderia fazer para popular essas dropdownlist?

    quinta-feira, 5 de setembro de 2013 16:17

Respostas

  • Lucas uma solução bem simples seria vc carregar o dropdownlist cidades no evento selectedIndexChanged do pais, assim que o usuário selecionar o pai vc pega o id selecionado e faz a consulta e carrega o dropdownlist cidade.


    Junior

    • Marcado como Resposta Alysson Queiroz segunda-feira, 9 de setembro de 2013 19:55
    sexta-feira, 6 de setembro de 2013 11:51

Todas as Respostas

  • Lucas no link de exemplo que você passou o exemplo atribui o DataSource, o TextField, o ValueField e dá um Bind() no dropdown para que ele ai sim carregue os valores.

    Pode ser que sua combo esteja com vazia devido a isso. 

    Se ajudou marque. 

    Abras Good Luck

     
    quinta-feira, 5 de setembro de 2013 17:32
  • Fernando o problema é que estou usando um cascading dropdownlis, já tentei fazer de tudo, o dropdownlist pais está carregando e recebendo o valor, porém, na lista estado não recebe nada porque não consegue enxergar os valores da lista.
    quinta-feira, 5 de setembro de 2013 18:57
  • Lucas, está muito estranho isso, você falando assim a impressão que dá é que a lista de estados esta vindo vazia do seu banco de dados. 

    Se o seu select está englobando tudo, e os países são carregados, era para os estados também estarem funcionando normalmente.

    E dando mais uma olhada no link que você passou, percebi que o select é feito separadamente para as partes.  

    Você já tentou ver se não pode ser isso?

    Abras

    quinta-feira, 5 de setembro de 2013 19:12
  • Como você está fazendo para popular esses dropdownlist's?!

    Nessa query que você passou, você possui o valor do estado e município que deve ser selecionado. Até ai, me parece correto. Porém, quando abre a página, os dropdownlist's são carregados corretamente?

    Obs.: Esses comandos geralmente, são realizados antes do DataBind

    ddlContinents.DataTextField = "NOME";
    ddlContinents.DataValueField = "ID";

    ddlCountries.DataTextField = "ESTADO";
    ddlCountries.DataValueField = "ID";


    ddlCities.DataTextField = "NOME";
    ddlCities.DataValueField = "ID";


    Claudio Neto


    quinta-feira, 5 de setembro de 2013 19:27
  • Estou usando assim:

    //*******************************************************************
    //CHAMA A FUNÇÃO QUE IRÁ POPULAR O DROPDOWNLIST PAIS, ESTADO E CIDADES
    this.PopulateContinents();
     //*******************************************************************

    Logo após:

    //**************************************************************************************************************
    //SELECIONA OS DADOS DO PAIS ( SELECT - ATRIBUI VALOR AO CAMPO PAIS)
                if (txt_operacao.Text == "1")//se o processo for de atualização
                {
                    SqlConnection conpai = new SqlConnection();
                    conpai.ConnectionString = ConfigurationManager.ConnectionStrings["PROJETOALConnectionString"].ConnectionString;

                    string querypai = "select PAIS.ID, esta.id, muni.id from PCLIENTE cli, PRAMOATIVIDADE RAMO, PMUNICIPIO MUNI, PESTADO ESTA, PPAIS PAIS where CLI.IDPRAMOATIVIDADE = RAMO.ID AND CLI.IDPMUNICIPIO = MUNI.ID AND MUNI.IDPESTADO = ESTA.ID AND ESTA.IDPPAIS = PAIS.ID AND cli.ID = @codigo";
                    SqlCommand cmdpai = new SqlCommand(querypai, conpai);
                    cmdpai.Parameters.AddWithValue("@codigo", txt_codigo_cli.Text);

                    try
                    {

                        conpai.Open();

                        SqlDataReader dr = cmdpai.ExecuteReader();
                        if (dr.Read())
                        {



                            ddlContinents.DataTextField = "NOME";
                            ddlContinents.DataValueField = "ID";
                            ddlContinents.SelectedValue = dr[0].ToString();

                                                  
                           ddlCountries.DataTextField = "ESTADO";
                           ddlCountries.DataValueField = "ID";
                           ddlCountries.SelectedValue = dr[1].ToString();

                            ddlCities.DataTextField = "NOME";
                            ddlCities.DataValueField = "ID";
                            ddlCities.SelectedValue = dr[2].ToString();



                        }

                        dr.Close();
                    }

                    catch (SqlException ex)
                    {
                        //ex.Message
                    }
                    catch (Exception ex)
                    {
                        //verificar exceção
                    }
                    finally
                    {
                        conpai.Close();
                    }

                }
                //**************************************************************************************************************

    PORÉM, VISUALIZEI QUE OS SCRIPTS DO JAVA SCRIPT ESTÃO BLOQUEANDO EU POPULAR O SEGUNDO (ESTADO)  E O TERCEIRO (CIDADES) DROPDOWNLIST, UMA VEZ QUE, O DROPDOWNLIST (PAISES) ESTÁ SENDO POPULADO NORMALMENTE, VEJA ABAIXO OS SCRIPTS EM JAVA SCRIPT:



       <%--**************************************************************--%>
        <%--//SCRIPT QUE POPULA O DROPDOWNLIST PAISES--%>
        <%--POPULAR PAISES--%>
        <script type="text/javascript">
            var pageUrl = '<%=ResolveUrl("~/cad_cliente_js.aspx")%>'
            function PopulateContinents() {
                $("#<%=ddlCountries.ClientID%>").attr("disabled", "disabled");
                $("#<%=ddlCities.ClientID%>").attr("disabled", "disabled");
                if ($('#<%=ddlContinents.ClientID%>').val() == "0") {
                    $('#<%=ddlCountries.ClientID %>').empty().append('<option selected="selected" value="0">Please select</option>');
                    $('#<%=ddlCities.ClientID %>').empty().append('<option selected="selected" value="0">Please select</option>');
                }
                else {
                    $('#<%=ddlCountries.ClientID %>').empty().append('<option selected="selected" value="0">Loading...</option>');
                    $.ajax({
                        type: "POST",
                        url: pageUrl + '/PopulateCountries',
                        data: '{continentId: ' + $('#<%=ddlContinents.ClientID%>').val() + '}',
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        success: OnCountriesPopulated,
                        failure: function (response) {
                            alert(response.d);
                        }
                    });
                }
            }

            function OnCountriesPopulated(response) {
                PopulateControl(response.d, $("#<%=ddlCountries.ClientID %>"));
            }
        </script>
        <%--**************************************************************--%>



        <%--*****************************************************************--%>
        <%--//SCRIPT QUE POPULA A DROPDOWNLIST CIDADES--%>
        <%--POPULAR CIDADES--%>
        <script type="text/javascript">
            function PopulateCities() {
                $("#<%=ddlCities.ClientID%>").attr("disabled", "disabled");
                if ($('#<%=ddlCountries.ClientID%>').val() == "0") {
                    $('#<%=ddlCities.ClientID %>').empty().append('<option selected="selected" value="0">Please select</option>');
                }
                else {
                    $('#<%=ddlCities.ClientID %>').empty().append('<option selected="selected" value="0">Loading...</option>');
                    $.ajax({
                        type: "POST",
                        url: pageUrl + '/PopulateCities',
                        data: '{countryId: ' + $('#<%=ddlCountries.ClientID%>').val() + '}',
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        success: OnCitiesPopulated,
                        failure: function (response) {
                            alert(response.d);
                        }
                    });
                }
            }

            function OnCitiesPopulated(response) {
                PopulateControl(response.d, $("#<%=ddlCities.ClientID %>"));
            }
        </script>
        <%--**************************************************************--%>



        <%--***************************************************************--%>
        <%--//SCRIPT POPULA O CONTROLE DROPDOWNLIST--%>
        <script type="text/javascript">
            function PopulateControl(list, control) {
                if (list.length > 0) {
                    control.removeAttr("disabled");
                    control.empty().append('<option selected="selected" value="0">Please select</option>');
                    $.each(list, function () {
                        control.append($("<option></option>").val(this['Value']).html(this['Text']));
                    });
                }
                else {
                    control.empty().append('<option selected="selected" value="0">Not available<option>');
                }
            }
        </script>
        <%--*********************************************************************--%>

    quinta-feira, 5 de setembro de 2013 19:58
  • Lucas uma solução bem simples seria vc carregar o dropdownlist cidades no evento selectedIndexChanged do pais, assim que o usuário selecionar o pai vc pega o id selecionado e faz a consulta e carrega o dropdownlist cidade.


    Junior

    • Marcado como Resposta Alysson Queiroz segunda-feira, 9 de setembro de 2013 19:55
    sexta-feira, 6 de setembro de 2013 11:51