Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Preenchimento de uma combo após seleção em outra combo

Bom dia pessoal.

Estou precisando de uma ajudinha.

O que deve ser feito é: Ao selecionar a empresa na combo , a outra combo deve ser preenchida com os responsáveis da empresa selecionada.

Consegui fazer da seguinte forma: Do lado do C# fiz minha função pegando como parametro o codEmpresa , pois a outra combo deve ser preenchida após a escolha da empresa.

Segue a assinatura de minha função: [WebMethod] [ScriptMethod(UseHttpGet = true)] public static BOJson[] carregaComboResponsaveis(Int32? codEmpresa) {}

Do lado cliente chamo esta função com o ajax, assim:

function carregaResponsavelFiltro() { let empresa = $('#ddlFiltroEmpresa').val();

$.ajax({
    type: 'GET',
    url: 'Visualizador.aspx/carregaComboResponsaveis',
    contentType: 'application/json; charset=utf-8',
    data: { codEmpresa: empresa},
    success: function (response) {


        response.d.forEach(function() {

            addOption(response.d);

       });



    },
    error: function (error) {
        escreveMensagem('Erro ao enviar dados para o servidor');
    }
});

} Fiquei na dúvida de como injetar este resultado da outra combo, para isso fiz uma função addOption definido o elemento e ela foi chamada na parte de cima:

function addOption(valor) { var option = new Option(valor); var select = document.getElementById(“ddlResponsaveis”); select.add(option); }

Fiz a chamada da função ajax em uma outra função validando a empresa, pois a outra só pode ser preenchida se a empresa for selecionada, assim:

function carregaFiltro() { if ($(’#ddlFiltroEmpresa’).val() != null) { carregaResponsavelFiltro(); }

} Esta função carregaFiltro esta sendo chamada no onchange da combo Empresa.

A minha função C# está ok na depuração. Consegui passar para o lado cliente, sendo que estou com problemas no preenchimento da segunda combo. Aparece algo assim [Object obect], [Object object]… tem algo de errado ao adicionar na combo. Sabe o que pode ser?

Obrigada. Flávia

5 respostas

Consegui corrigir o problema acima da seguinte forma:

Acrescentei no addOption:

addOption(JSON.stringify(response.d));

0: {codigo: 530, descricao: "Otavio"} 1: {codigo: 518, descricao: "Lauro"} 2: {codigo: 524, descricao: "Flavia"} 3: {codigo: 520, descricao: "Ana"}...

Desta forma estou pegando na resposta um Array com o código e nome dos responsáveis, conforme estrutura acima. Mas deste array preciso apenas da descricao. Como faço para pegar apenas a descricao na resposta?

Obrigada. Flávia

Fala aí Flávia, tudo bem? Fico feliz que tenha resolvido o problema \o/

So gostaria de pedir uma coisa: Pode marcar sua resposta como solução do tópico? Assim conseguimos ajudar outros alunos com o mesmo ou problema parecido.

Abraços

Oi Matheus.

Não marquei como solução , pois ainda não cheguei na solução final. Fiz uma alteração assim no código:

        let empresa = $('#ddlFiltroEmpresa').val();


        $.ajax({
            type: 'GET',
            url: 'Visualizador.aspx/carregaComboResponsaveis',
            contentType: 'application/json; charset=utf-8',
            data: { codEmpresa: empresa },
            success: function (response) {


                response.d.forEach(function () {

                    var codigo = $(response.d).attr("codigo");
                    var nome = $(response.d).attr("descricao");
                    addItem(codigo,nome, "ddlResponsaveis");

                });


                addItem(0, "Todos", "ddlResponsaveis");


                //$('#ddlResponsaveis option[value=0]').attr('selected', 'selected');

            },
            error: function (error) {
                escreveMensagem('Erro ao enviar dados para o servidor');
            }
        });
    }

A minha ideia com este código seria pegar todos os responsáveis para a empresa selecionada. Não sei porque motivo só está preenchendo o 1º item do array na combo, ou seja, tenho o array :

0: {codigo: 530, descricao: "Otavio"} 1: {codigo: 518, descricao: "Lauro"} 2: {codigo: 524, descricao: "Flavia"} 3: {codigo: 520, descricao: "Ana"}...

Para a combo Empresa X - deveria aparecer na outra combo os responsáveis : Ana,Flavia e Lauro. Neste caso esta aparecendo apenas Ana. Não entendi pois estou utilizando um foreach.

Estou quase lá, se alguém puder me dar uma ajudinha.

Obrigada.

Flávia

solução!

Oi pessoal.

Consegui chegar no resultado final.

Ficou assim o for:

var array_object = response.d;

                for(attr in array_object){


                    var codigo = $(array_object[attr]).attr("codigo");
                    var nome = $(array_object[attr]).attr("descricao");
                    addItem(codigo, nome, "ddlResponsaveis");


                }

Agradeço a ajuda de todos

Boa Flávia, muto bem \o/