Jump to content
ment0r

Atualizar input ao escolher opção de um <select>

Recommended Posts

Olá amigos.

Mais uma problema que precisa ser resolvido... Bom, dessa vez é o seguinte: tenho um <select> que traz de uma tabela PRODUTO (id, nome, unidade, preco) o nome. Preciso que ao escolher um produto, seja preenchido automaticamente um <input> com o preço referente à esse produto.

 

Alguém pode me ajudar de uma forma mais simples possível?

 

Já adianto os agradecimento àqueles que postarem vídeo aulas sobre javascript e/ou ajax, mas como se trata de uma parte do sistema, preciso resolver com urgência pra não ficar 'empacado' na mesma, portanto um exemplo prático é o que peço no momento.

 

Muito obrigado desde já a todos. Um grade abraço.

 

 

img.png

Share this post


Link to post
Share on other sites

Utilizei a própria função Javascript que desenvolvi somente para execução de ajax.

O link para obter os arquivos estão aqui: https://github.com/Spell-Master/sm-web/tree/master/scripts/AjaxRequest

 

Então, meu exemplo aqui vai ser genérico, mas não diferencia em nada para qualquer estrutura, pois vamos nos orientar por elementos identificadores. Que é o select e os inputs que vão receber os dados.

Primeiro o html base com os scripts:

Spoiler

<link href="AjaxRequest.css" rel="stylesheet" type="text/css"/>
<script src="AjaxRequest.js" type="text/javascript"></script>

<select id="seletor">
    <option value="consulta1">Maçã</option>
    <option value="consulta2">Laranja</option>
    <option value="consulta3">Banana</option>
</select>

<input type="text" id="informacao1"/>
<input type="text" id="informacao2"/>

<div id="local_do_ajax"></div>

<script>
    var ajax = new AjaxRequest();
    document.getElementById('seletor').addEventListener('change', executaAjax, false);

    function executaAjax(e) {
        var valor = e.target.value;
        if (valor) {
            ajax.pop('local_do_ajax', 'arquivo_php.php?parametro=' + valor, false);
        }
    }
</script>

 

 

Simples não é?

Inclusão do css e o js usado pelo ajaxrequest

Criamos o grupo seletor "select" e suas opções que são o valor que eu devo passar para o próximo arquivo.

Então os dois input's que serão preenchidos com o valor logo após o ajax.

Entra o elemento #id onde o arquivo será aberto pelo ajax (É importante que ele fique abaixo dos inputs!)

Então no script primeiramente instanciamos a classe js AjaxRequest criando seu objeto que chamei de ajax mesmo.

Pego o elemento #ID do seletor e adiciono o evento a ele que vai disparar toda vez que ele for alterado chamando uma função que é responsável por obter o valor e executar o método do ajax.

Spoiler

* A classe AjaxRequest possui alguns métodos, o método pop é um método que executa ajax via GET. Possui uma animação de progresso no canto inferior esquerdo da página, desde que você tenha incluído o arquivo css.

Caso não queira essa animação de progresso use o método open

 

No caso: "lembre-se que o objeto será o nome que você der na instância da classe"

ajax.open('DIV_ID_ONDE_CARREGAR', 'CAMINHO_OU_URL_DO_ARQUIVO');

 

Agora é só irmos ao arquivo php que recebe os dados e usar o php para filtrar o valor recebido, então usar o javascript para preencher os inputs

Spoiler

<?php
if (isset($_GET['parametro']) && !empty($_GET['parametro'])) {
    $valor = filter_input(INPUT_GET, 'parametro', FILTER_DEFAULT);
    if (preg_match('/^([a-zA-Z0-9]+)$/i', $valor)) {
        switch ($valor) {
            case 'consulta1':
                $quantidade = 10;
                $valor = 111;
                break;
            case 'consulta2':
                $quantidade = 20;
                $valor = 222;
                break;
            case 'consulta3':
                $quantidade = 30;
                $valor = 333;
                break;
        }
        ?>
        <script>
            document.getElementById('informacao1').value = '<?= $quantidade ?>';
            document.getElementById('informacao2').value = '<?= $valor ?>';
        </script>
        <?php

    }
}

 

 

Obs.: O ideal acredito para você é que os inputs sejam ocultos (type="hidden") e que você tenha um div ou span que servirá como um input fake para que algum usuário não o altere.

De qualquer forma terá que tratar os dados quando submeter um suposto form, porque mesmo oculto ou desabilitados os inputs podem ser manipulados pelo inspetor do navegador.

Share this post


Link to post
Share on other sites

Muuuito obrigado Omar pela ajuda.

 

Vou ler atentamente seu conteúdo e vou adaptar para meu sistema. Assim que eu conseguir posto aqui e se caso enroscar rsrs, peço ajuda novamente.

 

Citar

Obs.: O ideal acredito para você é que os inputs sejam ocultos (type="hidden") e que você tenha um div ou span que servirá como um input fake para que algum usuário não o altere.

Na verdade ele poderá alterar sim, pq o valor é pego do cadastro do produto, mas no momento do pedido, pode ser que ele esteja com valor diferente.

 

Mais uma vez, MUITO OBRIGADO.

Share this post


Link to post
Share on other sites

Caro Omar~

 

A parte de pedido do meu sistema será da seguinte forma:

 

2ns10mx.png

 

Cada vez que clico no + acrescenta mais um item do pedido e no - elimina esse item. Desse modo, uso um vetor, ou seja, o name="valor-unitario[]" pra poder armazenar todos os itens do pedido e no final, tratá-los. Minha pergunta é, com esse seu exemplo daria pra fazer assim?

 

Adaptei seu código, mas não estou conseguindo...

 

/*
* Teste.php
*/

<link href="AjaxRequest.css" rel="stylesheet" type="text/css"/>
<script src="AjaxRequest.js" type="text/javascript"></script>

<!-- <select id="seletor">
    <option value="consulta1">Maçã</option>
    <option value="consulta2">Laranja</option>
    <option value="consulta3">Banana</option>
</select> -->

<select id="id_produto[]" name="id_produto" class="form-control">
    <option value="" selected="selected">Escolha um produto</option>
    <?php

    require'../inc/conn.php';

    $select = "select * from PRODUTO";
    $query = ibase_query($select);

    while ($array = ibase_fetch_object($query)) {
        echo '
        <option value="'.trim($array->ID).'" >'.utf8_decode(trim($array->NOME)).'</option>
        ';
    }

    ?>
</select>

<input id="valor-unitario" name="valor-unitario[]" type="text" class="form-control" placeholder="Valor unitário">


<!-- <input type="text" id="informacao1"/>
<input type="text" id="informacao2"/> -->

<div id="local_do_ajax">1</div>

<script>
    var ajax = new AjaxRequest();
    document.getElementById('seletor').addEventListener('change', executaAjax, false);

    function executaAjax(e) {
        var valor = e.target.value;
        if (valor) {
            ajax.pop('local_do_ajax', 'arquivo_php.php?parametro=' + valor, false);
        }
    }
</script>

E

 

/*
* Arquivo_php.php - a principio não mudei os nomes
*/

<?php
require'../inc/conn.php';

        echo'
        <script language="javascript">
            alert ("Chegou aqui");
        </script>
        ';

$_GET['parametro'] = 1;

if (isset($_GET['parametro']) && !empty($_GET['parametro'])) {

    /*$valor = filter_input(INPUT_GET, 'parametro', FILTER_DEFAULT);*/

    $select = "select * from PRODUTO where id = ".$_GET['parametro'];
    $query  = ibase_query($conn, $select);
    $info = ibase_fetch_object($query);


        ?>
        <script>
            document.getElementById('valor-unitario').value = '<?= $info->PRECO ?>';
        </script>

}

Coloquei o GET recebendo 1 só pra testar, mas mesmo assim não deu. Criei uma pasta e colei todos os arquivos lá. Não consigo achar onde estou errando. Se puder abusar de sua boa vontade... eu agradeço.

 

Muito obrigado desde já.

11.png

Share this post


Link to post
Share on other sites

Sim dar para fazer, deixando de se orientar pelo elemento ID e usando a class do(s) seletor(es). Já que só podemos repetir nome de ID's em uma página (mesmo executando ajax).

 

O problema é em obter os inputs que vão ser preenchidos pós o ajax. Como informar quais são para o javascript?

Simples, usando conceito de herança Node, mas para isso eu precisaria do html completo. Como eu não tenho essa informação e mesmo com todo html, um exemplo simples fica difícil de apresentar, além do mais percebi o uso do BS coisa que eu nem meto a mão para mexer.

Optei por usar um "DATA-ATTRIBUTE" que lista qual o índice do NodeList que devemos atacar, já que vamos usar class ao invés de ID.

Bastando informar esse índice na url para o arquivo.

 

O negócio fica mais complicado pelo fato que cada seletor é criado de forma dinâmica através de um botão assim como percebi pela imagem.

Então para que isso funcione a função que cria o input terá que ser responsável por enumerar o valor para usar-mos.

(Você pode usar um variável global para isso e a cada adesão a variável se incrementa, e a cada retirada de elemento ela se decrementa. O importante que o primeiro elemento seja sempre 0 "zero")

Não sei ao exato de vai dar certo, "na teoria dar" pois como disse para ser preciso só com o html renderizado para orientar o javascript usando o "nextElementSibling" para chegar ao input sem chance de erro.

 

Também temos que modificar como a função será ativada, uma vez que não podemos buscar por um elemento e adicionar evento a ele, se depois do script carregado tem a opção de adicionar mais elementos. (A não ser que reescrevemos a variável que guarda essa informação).

Nesse caso optei por disparar a função diretamente em cada seletor através do onchange. Assim sendo quando criar o layout do input adicione os requezitos necessários.

 

Segue o código:

Spoiler

<link href="AjaxRequest.css" rel="stylesheet" type="text/css"/>
<script src="AjaxRequest.js" type="text/javascript"></script>

<form id="submit_com_ajax" onsubmit="return ajax.form(this.id, 'local_do_ajax', 'recebe_post.php');">

    <div>
        <!-- Seletor A -->
        <select name="seletor[]" data-idx="0" onchange="executaAjax(this);">
            <option value="nao_ativa_nada">Selecione uma opção</option>
            <option value="consulta1">Maçã</option>
            <option value="consulta2">Laranja</option>
            <option value="consulta3">Banana</option>
        </select>
        <input name="input_do_seletor[]" type="text" class="informacao1"/>
        <input name="input_do_seletor[]" type="text" class="informacao2"/>
    </div>

    <div>
        <!-- Seletor B -->
        <select name="seletor[]" data-idx="1" onchange="executaAjax(this);">
            <option value="nao_ativa_nada">Selecione uma opção</option>
            <option value="consulta1">Maçã</option>
            <option value="consulta2">Laranja</option>
            <option value="consulta3">Banana</option>
        </select>
        <input name="input_do_seletor[]" type="text" class="informacao1"/>
        <input name="input_do_seletor[]" type="text" class="informacao2"/>
    </div>

    <div>
        <!-- Seletor C -->
        <select name="seletor[]" data-idx="2" onchange="executaAjax(this);">
            <option value="nao_ativa_nada">Selecione uma opção</option>
            <option value="consulta1">Maçã</option>
            <option value="consulta2">Laranja</option>
            <option value="consulta3">Banana</option>
        </select>
        <input name="input_do_seletor[]" type="text" class="informacao1"/>
        <input name="input_do_seletor[]" type="text" class="informacao2"/>
    </div>


    <button>Submeter dados do formulário</button>
</form>

<div id="local_do_ajax"></div>

<script>
    var ajax = new AjaxRequest();

    function executaAjax(seletor) {
        var indexAlvo = seletor.dataset.idx;  // Armazendo o valor "data-idx" do alvo
        var valorInput = seletor.value; // Armazeno o "value" do alvo

        /*
         * Somente prossegue com a função se houver o data idx e se o value seja algum valor permitido
         */
        if (indexAlvo && valorInput !== 'nao_ativa_nada') {
            ajax.pop('local_do_ajax', 'arquivo_php.php?valor_do_input=' + valorInput + '&index_do_elemento=' + indexAlvo, false);
        }
    }
</script>

 

 

O php um pouco modificado pois agora tem uma nova informação e não usa mais um elemento ID e sim o class para achar os inputs

Spoiler

<?php
$input = filter_input(INPUT_GET, 'valor_do_input', FILTER_DEFAULT);
$index = (int) $_GET['index_do_elemento']; // Valor obtido pelo "data-idx" de cada seletor
if (preg_match('/^([a-zA-Z0-9]+)$/i', $input)) {
    switch ($input) {
        case 'consulta1':
            $quantidade = 10;
            $valor = 111;
            break;
        case 'consulta2':
            $quantidade = 20;
            $valor = 222;
            break;
        case 'consulta3':
            $quantidade = 30;
            $valor = 333;
            break;
    }
    ?>
    <script>
        /*
         * Como o conceito de arquitetura do html é o select e logo então os inputs
         * cada elemento class possui o mesmo index Node que o seletor.
         * exemplo se fosse o seletor de numero 9 o php reenderizaria assim aqui
         * 
         * getElementsByClassName('informacao1')[<?= $index ?>]
         * getElementsByClassName('informacao1')[9]
         */
        document.getElementsByClassName('informacao1')[<?= $index ?>].value = '<?= $valor ?>';
        document.getElementsByClassName('informacao2')[<?= $index ?>].value = '<?= $quantidade ?>';
    </script>
    <?php
}

 

 

No caso eu usei 3 selects que seria a simulação de novos seletores criados.

 

Tomei também a ousadia de salvar o form usando também a classe AjaxRequest, esse foi o resultado dos dados enviados:

Spoiler

O arquivo que recebeu o post


<?php
echo ("<pre>");
var_dump($_POST);
echo ("</pre>");

 

E o resultado:


array(3) {
  ["form_id"]=>
  string(15) "submit_com_ajax"
  ["seletor"]=>
  array(3) {
    [0]=>
    string(9) "consulta2"
    [1]=>
    string(9) "consulta1"
    [2]=>
    string(9) "consulta3"
  }
  ["input_do_seletor"]=>
  array(6) {
    [0]=>
    string(3) "222"
    [1]=>
    string(2) "20"
    [2]=>
    string(3) "111"
    [3]=>
    string(2) "10"
    [4]=>
    string(3) "333"
    [5]=>
    string(2) "30"
  }
}

 

 

Share this post


Link to post
Share on other sites

Omar~, te mandei uma MP, por favor, de uma olhada. Ademais, vou tentar adaptar o código ao meu sistema e posto o resultado assim que o fizer.

 

Muito obrigado.

Share this post


Link to post
Share on other sites

Boa tarde amigos.

 

Depois de muito bater cabeça, quase consegui fazer o que eu queria, exceto por uma coisa. Consigo fazer o valor aparecer num select, mas não num input.

 

Vejam os códigos (páginas de exemplo somente, dps mudo pra página definitiva)

 

Nesse página index.php eu tenho a lista de produtos, exibidos via select.

 

index.php

<label>Valor</label>
<!-- ONDE APARECE ATUALMENTE -->
  <select name="valor" id="valor">
    <option value="">Selecione</option>
    <option value="Todos">Todos</option>
  </select>

<select name="produto[]" id="produto" class="form-control">
  <option value="" selected="selected">Escolha um produto</option>
  <?php

  $select = "select * from PRODUTO";
  $query = ibase_query($select);

  while ($array = ibase_fetch_object($query)) {
    echo '
    <option value="'.trim($array->NOME).'" >'.utf8_decode(trim($array->NOME)).'</option>
    ';
  }

  ?>
</select>
<!-- ONDE EU GOSTARIA QUE APARECESSE -->
<input name="valor-unitario[]" id="valor-unitario" type="text" class="form-control" placeholder="Valor unitário">

Nesse script, a mágica é feita, ele envia os valores pra getValor.php, lá é retornado os preços e então deveria aparecer no input do código acima, mas só consigo fazer aparecer no <option>

 

$(document).ready(function(){
   $("#produto").change(function(){
      $.ajax({
         type: "POST",
         url: "getValor.php",
         data: {produto: $("#produto").val()},
         dataType: "json",
         success: function(json){
            var options = "";
            $.each(json, function(key, value){
               options += '<option value="' + key + '">' + value + '</option>';
            });
            $("#valor").html(options);
         }
      });
   });
});

Já adianto que mudei #valor pra #valor-unitario e

options += '<option value="' + key + '">' + value + '</option>';

para

options += '<input type="text" name="valor-unitario" value="' + key + '">'; tanto com key, quanto com value

 

Acredito que agora seja só um detalhe pra finalizar essa zebra.

 

Código do getValor.php, pra quem precisar

 

<?php
include"../inc/conn.php";

$retorno = array();

$selectValor = "select * from PRODUTO where nome = '".$_POST['produto']."'";
$query = ibase_query($selectValor);

while ($array = ibase_fetch_object($query)) {
   $retorno[trim($array->ID)] = trim($array->PRECO);
}

echo json_encode($retorno);
?>

Conto com vocês amigos. Desde já, muito obrigado.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By dev-02
      <b>Dias</b> <span id="dia"></span> - <b>Tempo</b> <span id="hora"></span>:<span id="minuto"></span>:<span id="segundo"></span> var data = 15; var target_date = new Date(`\n October ${data}, 2019`).getTime(); var dias, horas, minutos, segundos; var regressiva = document.getElementById("regressiva"); setInterval(function() { Timer(); }, 1000); function Timer() { var current_date = new Date().getTime(); var segundos_f = (target_date - current_date) / 1000; dias = parseInt(segundos_f / 86400); segundos_f = segundos_f % 86400; horas = parseInt(segundos_f / 3600); segundos_f = segundos_f % 3600; minutos = parseInt(segundos_f / 60); segundos = parseInt(segundos_f % 60); document.getElementById('dia').innerHTML = dias; document.getElementById('hora').innerHTML = horas < 10 ? `0${horas}` : `${horas}`; document.getElementById('minuto').innerHTML = minutos < 10 ? `0${minutos}` : `${minutos}`; document.getElementById('segundo').innerHTML = segundos < 10 ? `0${segundos}` : `${segundos}`; if(horas == 0 && minutos == 0 && segundos == 0) { data = data + 2; } }  
    • By joicitias
      Olá, 
      Estou aprendendo a programar ainda, e preciso fazer com que ao clicar em um botão o  conteúdo selecionado de um select seja copiado para uma textarea. 
       
       

    • By jiltonbarbosa@gmail.com
      Olá,
      Tem como fazer funcionar um crud completo dentro de uma modal, utilizando jquery, sem que o modal seja fechada a cada operação?
    • By rtavix
      Pessoal eu sou iniciante na programação, e irei detalhar todo o processo resumidamente que estou fazendo no momento. Eu tenho uma pagina web que realiza uma consulta através de uma determinada data. Tenho um dropdow e dentro dele eu tenho a Opção Mês base e Período, caso eu selecione o Mês base devo carregar um campo de data informando o mes e o ano e em seguida eu tenho dois radio button escrito a opção Sim e Não e caso escolho fazer o filtro por periodo, deverei carregar um capo de data automaticamente para informar um determinado periodo preenchendo a data de inicio dd/MM/yyyy até a data final dd/MM/yyyy, após escolher Mês base ou por Período dentro do dropDow e carregar o campo de data automaticamente onde o usuário informará a data, consequentemente o mesmo irá escolher se a opção é de Liberação Sim ou Não (radio button) acho que é assim que se escreve rs, caso ele realiza sua escolha, deverá carregar os seguintes dados na grid:
      AnoMêsBase, inscEstadual, razaoSocial e NME_ABREV.
      Observação: No meu banco de dados a coluna AnoMesBase está dessa forma por exemplo 032018, sempre irá vir dessa forma, a data nunca será formatado o campo.
      Porém não estou conseguindo trazer as informações que está no banco de dados.
      Até agora implementei as seguintes classes:
       
      using System; using System.Collections.Generic; using System.Linq; using System.Text; using NHibernate.Mapping.Attributes; namespace Dominio.Domain { [Serializable] [Class(Table = "DAP_EMPRESA", NameType = typeof(Empresa), Lazy = false)] public class Empresa { private int codigo; private string inscEstadual; private string razaoSocial; private string nomeAbreviado; private DateTime dataCadastro; private string cnpj; [Id(Column = "ID_EMPRESA", Name = "Codigo", Generator = "increment", UnsavedValue = "0")] public int Codigo { get { return codigo; } set { codigo = value; } } [Property(Column = "INSC_ESTADUAL", Lazy = false)] public string InscEstadual { get { return inscEstadual; } set { inscEstadual = value; } } [Property(Column = "RAZAO_SOCIAL", Lazy = false)] public string RazaoSocial { get { return razaoSocial; } set { razaoSocial = value; } } [Property(Column = "NME_ABREV", Lazy = false)] public string NomeAbreviado { get { return nomeAbreviado; } set { nomeAbreviado = value; } } [Property(Column = "DAT_CADASTRO", Lazy = false)] public DateTime DataCadastro { get { return dataCadastro; } set { dataCadastro = value; } } [Property(Column = "CNPJ", Lazy = false)] public string Cnpj { get { return cnpj; } set { cnpj = value; } } } } using NHibernate.Mapping.Attributes; using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace Dominio.Domain { [Serializable] [Class(Table = "DAP_FINANCIAMENTO", NameType = typeof(Financiamento), Lazy = false)] public class Financiamento { private int codigo; // private Empresa empresa; // private decimal vlrFinanciamento;// private string inscEstadual;// private string anoMesBase; // private string anoMesFaturamento; // private decimal vlrICMSPrevisto; // private decimal totalRecolhimento; // private DateTime datUltimoRecolhimento; // private decimal totalLiberacao; // private DateTime datLiberacao; // private DateTime datUltimaLiberacao; // private decimal totalDevolucao; // private string descObservacao; // private DateTime dataDevolucao; // private DateTime dataCadastramento; // private int mesBase; // private int mesFat; // [Id(Column = "ID_FINANCIAMENTO", Name = "Codigo", Generator = "increment", UnsavedValue = "0")] public int Codigo { get { return codigo; } set { codigo = value; } } [ManyToOne(0, Name = "Empresa", ClassType = typeof(Empresa), Column = "ID_EMPRESA", Lazy = Laziness.False)] public Empresa Empresa { get { return empresa; } set { empresa = value; } } [Property(Column = "VLR_FINANCIAMENTO", Lazy = false)] public decimal VlrFinanciamento { get { return vlrFinanciamento; } set { vlrFinanciamento = value; } } [Property(Column = "INSC_ESTADUAL", Lazy = false)] public string InscEstadual { get { return inscEstadual; } set { inscEstadual = value; } } [Property(Column = "ANO_MES_BASE", Lazy = false)] public string AnoMesBase { get { return anoMesBase; } set { anoMesBase = value; } } [Property(Column = "ANO_MES_FATURA", Lazy = false)] public string AnoMesFaturamento { get { return anoMesFaturamento; } set { anoMesFaturamento = value; } } [Property(Column = "VLR_ICMS_PREVISTO", Lazy = false)] public decimal VlrICMSPrevisto { get { return vlrICMSPrevisto; } set { vlrICMSPrevisto = value; } } [Property(Column = "TOTAL_RECOLHIDO", Lazy = false)] public decimal TotalRecolhimento { get { return totalRecolhimento; } set { totalRecolhimento = value; } } [Property(Column = "DATA_ULTIMO_RECOL", Lazy = false)] public DateTime DatUltimoRecolhimento { get { return datUltimoRecolhimento; } set { datUltimoRecolhimento = value; } } [Property(Column = "TOTAL_LIBERACAO", Lazy = false)] public decimal VlrTotalLiberacao { get { return totalLiberacao; } set { totalLiberacao = value; } } [Property(Column = "DAT_ULTIMA_LIBERACAO", Lazy = false)] public DateTime DatUltimaLiberacao { get { return datUltimaLiberacao; } set { datUltimaLiberacao = value; } } [Property(Column = "TOTAL_DEVOLUCAO", Lazy = false)] public decimal TotalDevolucao { get { return totalDevolucao; } set { totalDevolucao = value; } } [Property(Column = "DSC_OBSERVACAO", Lazy = false)] public string DescObservacao { get { return descObservacao; } set { descObservacao = value; } } [Property(Column = "DAT_LIBERACAO", Lazy = false)] public DateTime DatLiberacao { get { return datLiberacao; } set { datLiberacao = value; } } [Property(Column = "MES_BASE", Lazy = false)] public int MesBase { get { return mesBase; } set { mesBase = value; } } } } using Dominio.Domain; using NHibernate; using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace Dominio.DataAccess { public class FinanciamentoDAO { public static List<Financiamento> ListarTodos() { try { ISession sessao = NhibernateHelper.SessaoCorrente; Financiamento financiamento = new Financiamento(); ICriteria criterios = sessao.CreateCriteria(financiamento.GetType()); return criterios.List<Financiamento>().ToList(); } catch (Exception e) { throw new Exception(e.ToString()); } } public static void InserirOuAtualizar(Financiamento financiamento) { ISession sessao = NhibernateHelper.SessaoCorrente; ITransaction transacao = sessao.BeginTransaction(); try { sessao.SaveOrUpdate(financiamento); transacao.Commit(); } catch (Exception e) { transacao.Rollback(); throw new Exception(e.ToString()); } } public static void Deletar(Financiamento financiamento) { ISession sessao = NhibernateHelper.SessaoCorrente; ITransaction transacao = sessao.BeginTransaction(); try { sessao.Delete(financiamento); transacao.Commit(); } catch (Exception e) { transacao.Rollback(); throw new Exception(e.ToString()); } } internal static Financiamento BuscarPorInscEstadual(string InscEstadual) { try { ISession sessao = NhibernateHelper.SessaoCorrente; Financiamento financiamento = new Financiamento(); ICriteria criterios = sessao.CreateCriteria(financiamento.GetType()); criterios.Add(NHibernate.Criterion.Expression.Eq("InscEstadual", InscEstadual)); return criterios.UniqueResult() as Financiamento; } catch (Exception e) { throw new Exception(e.ToString()); } } internal static Financiamento BuscarPorIDFinanciamento(int COD_FINANCIAMENTO) { try { ISession sessao = NhibernateHelper.SessaoCorrente; Financiamento financiamento = new Financiamento(); ICriteria criterios = sessao.CreateCriteria(financiamento.GetType()); criterios.Add(NHibernate.Criterion.Expression.Eq("Codigo", COD_FINANCIAMENTO)); return criterios.UniqueResult() as Financiamento; } catch (Exception e) { throw new Exception(e.ToString()); } } internal static List<Financiamento> ListarPorEmpresa(int ID_EMPRESA) { ISession sessao = NhibernateHelper.SessaoCorrente; Financiamento financiamento; try { financiamento = new Financiamento(); ICriteria criterios = sessao.CreateCriteria(financiamento.GetType()); criterios.CreateAlias("Empresa", "e").Add(NHibernate.Criterion.Expression.Eq("e.Codigo", ID_EMPRESA)); return criterios.List<Financiamento>().ToList(); } catch (Exception e) { throw new Exception(e.ToString()); } } } } using Dominio.DataAccess; using Dominio.Domain; using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace Dominio.APL { public class AplFinanciamento { public void gravar(Financiamento financiamento) { FinanciamentoDAO.InserirOuAtualizar(financiamento); } public void deletar(Financiamento financiamento) { FinanciamentoDAO.Deletar(financiamento); } public List<Financiamento> listarTodas() { return FinanciamentoDAO.ListarTodos(); } public Financiamento buscarPorInscEstadual(string InscEstadual) { return FinanciamentoDAO.BuscarPorInscEstadual(InscEstadual); } public Financiamento buscarPorIDFinanciamento(int IDFinanciamento) { return FinanciamentoDAO.BuscarPorIDFinanciamento(IDFinanciamento); } public List<Financiamento> listarFinanciamentoPorEmpresa(int idEmpresa) { return FinanciamentoDAO.ListarPorEmpresa(idEmpresa); } } }  
      Esse é meu .cs porém não estou conseguindo fazer funcionar, porque me retorna tudo null ao compilar o código e desconfio que a minha lógica esteja errada.
       
      using Dominio.APL; using Dominio.Domain; using dap.Models; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; namespace dapView.Relatorios.RelFinancLiberadoMesBase { public partial class RelFinancLiberadoMesBase : System.Web.UI.Page { private AplFinanciamento aplFinanciamento = new AplFinanciamento(); private List<Financiamento> financiamento = new List<Financiamento>(); private static bool keyJS { get; set; } protected void Page_Load(object sender, EventArgs e) { keyJS = true; // CarregarComboLiberado(); if (!IsPostBack) { GerenciadorUsuarioPagina.funcao = "RELFIN01"; //btnImprime.Visible = false; } } //Carrega os dados relacionando o tipo de liberação por data //private void CarregarComboLiberado() // { // ddlLiberado.Items.Add("---------Selecione----------"); // ddlLiberado.Items.Add("Mês Base"); // ddlLiberado.Items.Add("Período"); // } protected void btnConsultar_Click(object sender, EventArgs e) { CarregaRelatorio(); } protected void ddlLiberado_SelectedIndexChanged(object sender, EventArgs e) { } public void CarregaRelatorio() { financiamento = aplFinanciamento.listarTodas(); var dados = (from financiamento in financiamento where DateTime.Compare(financiamento.DatUltimaLiberacao, Convert.ToDateTime(txtMesBase.Text.ToString())) == 0 group financiamento by new { financiamento.Codigo, financiamento.Empresa.InscEstadual, financiamento.Empresa.RazaoSocial, financiamento.Empresa.Cnpj, financiamento.Empresa.NomeAbreviado, financiamento.AnoMesBase } into g select new { codigo = g.Key.Codigo, AnoMesBase = g.Key.AnoMesBase, InscricaoEstadual = g.Key.InscEstadual, RazaoSocial = g.Key.RazaoSocial, Cnpj = g.Key.Cnpj, NmeAbreviado = g.Key.NomeAbreviado }).OrderBy(o => o.codigo).ToList(); if (dados.Count() > 0) { //Carrega os dados da gridview de consulta gv.DataSource = dados; gv.DataBind(); gv.UseAccessibleHeader = true; gv.HeaderRow.TableSection = TableRowSection.TableHeader; //Carrega os dados da gridview usada para imprimir gvImprimir.DataSource = dados; gvImprimir.DataBind(); gvImprimir.UseAccessibleHeader = true; gvImprimir.HeaderRow.TableSection = TableRowSection.TableHeader; //mostra botão imprimir //btnImprime.Visible = true; } else { if (keyJS) chamarSwal("aviso", "Não foram encontrados financiamentos para essa data."); // btnImprime.Visible = false; } } private void chamarSwal(string tipo, string mensagem) { var body = (HtmlGenericControl)(Page.Master.FindControl("body")); body.Attributes["onload"] = $"{tipo}(\"{mensagem}\")"; keyJS = false; } } } Esse é o meu html
       
      <%@ Page Title="" Language="C#" MasterPageFile="~/Content/MasterPage.Master" AutoEventWireup="true" CodeBehind="RelFinanciamento.aspx.cs" Inherits="dapView.Relatorios.RelFinancLiberadoMesBase.RelFinancLiberadoMesBase" %> <asp:Content ID="head" ContentPlaceHolderID="headPlaceHolder" runat="server"> <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css"> <script src="../JsRelatorioFinancLiberadoMesBase.js"></script> <script> var d = "16/09/2019" // date received from card function filldate() { document.getElementById('cardexpirydate').value = d.split('/').reverse().join("-"); } </script> <script> function exibir_ocultar(val) { if (val.value == 'LiberadoMesBase') { document.getElementById('periodo').style.display = 'none'; document.getElementById('MesBase').style.display = 'block'; document.getElementById('periodo').style.display = 'none'; } else { document.getElementById('periodo').style.display = 'block'; document.getElementById('MesBase').style.display = 'none'; } }; </script> </asp:Content> <asp:Content ID="ContentForm" ContentPlaceHolderID="formPlaceHolder" runat="server"> <asp:ScriptManager runat="server"></asp:ScriptManager> <div class="row"> <div class="col-md-12"> <div class="content-box"> <div class="box-title">Financiamento</div> <div class="box-body"> <div id="triage"> <label for="category">Liberado:</label> <div class="form-inline"> <div class="col-md-2"> <label class="radio-inline control-label"> <input checked="checked" name="TaskLog.TaskTypeId" type="radio" value="2"> SIM </label> <label class="radio-inline control-label"> <input id="TaskLog_TaskTypeId" name="TaskLog.TaskTypeId" type="radio" value="1"> NÃO </label> </div> <div id="category-select"> <select onchange="exibir_ocultar(this)" class="col-md-3 form-control" id="category" name="category" style="width: auto"> <option value="LiberadoMesBase">-----------Selecione----------</option> <option value="LiberadoMesBase">Mês Base</option> <option value="LiberadoPeriodo">Período</option> </select> </div> </div> <br /> <div class="row"> <div class="form-group"> <label class="radio-inline control-label"> <input type="radio" name="optradio" checked>Sim</label> <label class="radio-inline"> <input type="radio" name="optradio">Não</label> </div> <br /> <div id="periodo"> <asp:TextBox type="Month" Style="width: 10%" runat="server" ClientIDMode="Static" class="form-control " ID="TextBox1" MaxLength="30"></asp:TextBox> <br /> </div> <br /> <div id="MesBase"> <asp:TextBox type="date" Style="width: 10%" runat="server" ClientIDMode="Static" class="form-control " ID="TextBox2" MaxLength="30"></asp:TextBox> <br /> </div> </div> </div> <div class="row"> <div class="content-box content-box-tabela" id="tabela" style="visibility: hidden"> <asp:GridView class="col-md-12" CssClass="tabela-padrao tabela-padrao-borda dataTable" runat="server" AutoGenerateColumns="False" PageSize="9" ID="gv" Width="100%"> <Columns> <asp:TemplateField HeaderText="Empresa" ItemStyle-HorizontalAlign="Left"> <ItemTemplate> <asp:Label ID="lblCodigo" runat="server" Text='<%# Bind("Codigo") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Valor Financiamento" ItemStyle-HorizontalAlign="Center"> <ItemTemplate> <asp:Label ID="lblValorFinanciamento" runat="server" Text='<%# Bind("ValorFinanciamento") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Inscricao Estadual" ItemStyle-HorizontalAlign="Center"> <ItemTemplate> <asp:Label ID="lblInscricaoEstadual" runat="server" Text='<%# Bind("InscricaoEstadual") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Ano mes base" ItemStyle-HorizontalAlign="Right"> <ItemTemplate> <asp:Label ID="lblAnoMesBase" runat="server" Text='<%# Bind("AnoMesBase") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> </Columns> <PagerStyle CssClass="" HorizontalAlign="Center" /> </asp:GridView> </div> </div> </div> <div class="box-footer"> <button runat="server" class="btn btn-padrao" id="btnConsultar" onserverclick="btnConsultar_Click">Consultar</button> </div> </div> <%--IMPRIMIR--%> <div class="container" style="visibility: hidden" id="ConteinerImprimir"> <div class="table" runat="server" style="margin: 0 auto; width: auto;"> <div class="row"> <div class="col-lg-12"> <img src="http://internet.sefaz.es.gov.br/imagens/topo_brasao.png" alt=""> <br> <br> </div> </div> <div class="row" runat="server" style="border-bottom: 2px solid #B0BEC5"> <div class="col-lg-5"> <strong>Financiamento</strong> </div> <div class="col-lg-5" style="text-align: end;" runat="server" id="totalRegistros"></div> </div> </div> <div class="row"> <div class="content-box content-box-tabela"> <asp:GridView class="col-md-12 grid" runat="server" AutoGenerateColumns="False" PageSize="9" ID="gvImprimir" GridLines="None" RowStyle-HorizontalAlign="Center" Width="100%"> <Columns> <asp:TemplateField HeaderText="Empresa" ItemStyle-HorizontalAlign="Left"> <ItemTemplate> <asp:Label ID="lblCodigo" runat="server" Text='<%# Bind("Codigo") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Valor Financiamento" ItemStyle-HorizontalAlign="Center"> <ItemTemplate> <asp:Label ID="lblValorFinanciamento" runat="server" Text='<%# Bind("ValorFinanciamento") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Inscricao Estadual" ItemStyle-HorizontalAlign="Center"> <ItemTemplate> <asp:Label ID="lblInscricaoEstadual" runat="server" Text='<%# Bind("InscricaoEstadual") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Ano mes base" ItemStyle-HorizontalAlign="Right"> <ItemTemplate> <asp:Label ID="lblAnoMesBase" runat="server" Text='<%# Bind("AnoMesBase") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> </Columns> <PagerStyle CssClass="" HorizontalAlign="Center" /> </asp:GridView> </div> </div> </div> </div> </div> </asp:Content>  
      Se alguém puder me ajudar, agradeço.
    • By ELT_Yuken
      Bom, eu estou aprendendo js pelo celular da minha mãe, eu gostaria de saber como faço para criar botões que repetem uma função até eu tirar o dedo dele
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.