2
respostas

Popular combo com dados do banco

Bom dia pessoal.

Estou querendo popular um select com dados do banco. Estou utilizando c# para pegar a lista de empresas do banco; passando esta lista para o lado cliente com o webmethod, vejam um pouco do meu código:

C# //Pegando a lista de empresas

[WebMethod] [ScriptMethod(UseHttpGet = true)] public static BOJson[] carregaComboEmpresas() { IList listaEmpresas = PersistenceUtils.GetSession().CreateCriteria(). Add(Restrictions.Eq("TipoEmpresa.tipoEmpresaPK.codTipoEmpresa", (int)EnumTipoEmpresa.COD_EMPRESAS_ELETROBRAS)) .List().OrderBy(e => e.Empresa.ordem) .Select<EmpresaTipoEmpresa, BOJson>(em => new BOJson(em.Empresa.codEmpresa, em.Empresa.apelido)).ToList();

        return listaEmpresas.ToArray<BOJson>();
    }

No javacript tento chamar este método, assim:

$(document).ready(function () {

        $.ajax({
            type: 'GET',
            url: 'Visualizador.aspx/carregaComboEmpresas',
            contentType: 'application/json; charset=utf-8',
            data: {
                empresa: $('#lblEmpresas').val()
            },
            dataType: 'json',
            success: function (result) {

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

E no html coloco a combo, assim:

-- Selecione a empresa --

Este código não está funcionando para popular a combo. Sou iniciante na área, o que estou fazendo de errado?

Desde já agradeço.

Flávia

2 respostas

Resolvi esta primeira etapa pelo lado do servidor mesmo. Agora a partir da seleção desta combo tenho que preencher outra. 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. O que deve ser feito é: Ao selecionar a empresa na combo , a outra combo deve ser preenchida com os responsáveis da empresa selecionada.

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

Oi Flávia, tudo bem? Não sou especialista C# nem tenho muito conhecimento sobre, mas se você tá exibindo o resultado do Ajax na página e está aparecendo "[Object obect], [Object object]", quer dizer que você está recebendo a resposta mas ela é um array de objetos, então pra popular o seu combo, você vai precisar fazer um foreach nesse objeto gerando os options necessários.

Será que isso já ajuda?