Atozed Forums

Full Version: iwdbgrid e funções javascript
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Olá Pessoal,

  Sou nova no intraweb por isso já antecipo a falta de conhecimento, eis meu problema:

  Fiz uma tabela usando html para montar o cabeçalho e chamei o restante pela procedure TemplatesUnknownTag, e ainda usei uma função em jscript usando a jquery que faz com que seja possível editar os dados diretamente na tabela "salvando" as alterações com o clique do Enter não uso nenhum edit e nem button no delphi para fazer essa edição, porém agora não sei exatamente como fazer para o delphi receber as alterações e fazer os updates no banco, pensei em usar algum evento da iwdbgrid, como onHTMLtag ou onRenderCell, porém não achei nenhum documento que explicasse bem como funciona esses eventos, assim venho aqui pedir uma luz!

  Agradeço a oportunidade e aguardo um retorno!
Olá DeboraMezz, esse JScript que vc usou não tem um callback?, se sim, vc deve usar esse callback pra enviar para o delphi.
(07-09-2020, 02:19 PM)Jose Nilton Pace Wrote: [ -> ]Olá DeboraMezz, esse JScript que vc usou não tem um callback?, se sim, vc deve usar esse callback pra enviar para o delphi.
 Olá José, obrigada pelo retorno, segue a função:

 $(function () {
    $("td").dblclick(function () {
        var conteudoOriginal = $(this).text();
         
        $(this).addClass("celulaEmEdicao");
        $(this).html("<input type='text' value='" + conteudoOriginal + "' />");
        $(this).children().first().focus();
 
        $(this).children().first().keypress(function (e) {
            if (e.which == 13) {
                var novoConteudo = $(this).val();
                $(this).parent().text(novoConteudo);
                $(this).parent().removeClass("celulaEmEdicao");
            }
        });
         
    $(this).children().first().blur(function(){
        $(this).parent().text(conteudoOriginal);
        $(this).parent().removeClass("celulaEmEdicao");
    });
    });
});


Se eu entendi bem o callback seria o "novoConteudo"?

tentei algo assim e não funcionou

procedure novoConteudo (EventParams: TStringList);

procedure TfrmHome.IWAppFormCreate(Sender: TObject);
begin

  WebApplication.RegisterCallBack('novoConteudo', novoConteudo);

end;
Quando ACABAR a digitação, com o ENTER, faz a chamada para o Servidor. Algo assim:
Code:
            if (e.which == 13) {
                var novoConteudo = $(this).val();
                $(this).parent().text(novoConteudo);
                $(this).parent().removeClass("celulaEmEdicao");
                ajaxcall("novoConteudo", "id=" + $(this).id + "&nvctdo=" + novoConteudo);
            }
(07-10-2020, 08:44 PM)Jose Nilton Pace Wrote: [ -> ]Quando ACABAR a digitação, com o ENTER, faz a chamada para o Servidor. Algo assim:
Code:
            if (e.which == 13) {
                var novoConteudo = $(this).val();
                $(this).parent().text(novoConteudo);
                $(this).parent().removeClass("celulaEmEdicao");
                ajaxcall("novoConteudo", "id=" + $(this).id + "&nvctdo=" + novoConteudo);
            }

Obrigada pelo retorno, vou incomodar mais um pouco, o que significa o "id"?

e como faço a chamada disso no delphi, como que capturo o novoConteudo para salvar no banco?
(07-13-2020, 07:03 PM)Jose Nilton Pace Wrote: [ -> ]Tem sim, Link to Callback
eu até já li esse link, mas infelizmente não entendi, até pq meu intraweb é o 15.0, revirei o fórum também e não achei algo que funcionasse, pra mim.

por que não entendo como pegar o novo conteudo, a sintaxe no caso, e após isso eu uso o WebApplication.CallBackResponse.AddJavaScriptToExecute() ou outro tipo de chamada?
Vamos lá. No Create do seu form:
procedure TIWForm1.IWAppFormCreate(Sender: TObject);
begin

  WebApplication.RegisterCallBack('RetornoEdicao', RetornoEdicao);
end;

Cria uma procedure para tratar:
procedure TIWForm1.RetornoEdicao(EventParams: TStringList);
begin
  WebApplication.ShowNotification(EventParams.Values['id']);
  WebApplication.ShowNotification(EventParams.Values['nvctdo']);
end;

o EventParams tem os seus dados vindos do browser pela ajaxcall.
Entendi, parece que dá parte do delphi deu certo, mas deu um erro na linha onde coloquei o callback

Uncaught ReferenceError: RetornoEdicao is not defined
    at HTMLInputElement.<anonymous> ((index):292)
    at HTMLInputElement.dispatch (jquery.min.js:2)
    at HTMLInputElement.y.handle (jquery.min.js:2)
O ajaxcall seria algo assim:
ajaxcall("RetornoEdicao", "id=" + $(this).id + "&nvctdo=" + novoConteudo);