Páginas

segunda-feira, 11 de julho de 2016

Popular DataSet com uma String JSON - Fácil Fácil

Boa noite pessoas, vou mostrar um exemplo simples de como pegar uma string em formato JSON e popular um DataSet criado em RunTime, da String JSON eu só vou pegar os Campos para montar uma lista no DataSet.

Vamos la, Criando o DataSet.

faça uso  de Data.DB e  Datasnap.DBClient


-- Classe --

TPopulaJSON = class
private
   FLstCampos: TClientDataSet;
public
   constructor Create;
   destructor Destroy; override;
property LstCampos: TClientDataSet read FLstCampos write FLstCampos;
end;




-- Create da Classe --

constructor TPopulaJSON.Create;
begin
   FLstCampos:=TClientDataSet.Create(nil);
   with FLstCampos do
   begin
      FieldDefs.Add('checado', ftBoolean, 0, False);
      FieldDefs.Add('nome', ftString, 100, False);
      CreateDataSet;
      Fields.Fields[0].DisplayLabel:=EspacoDirEsq('',3,'D');
      Fields.Fields[1].DisplayLabel:='Campo de Pesquisa';
   end;
end;


isso é o que é preciso para criar o DataSet em RunTime


agora vc tem uma variável String em formato JSON e quer popular 1 campo do DataSet com ela.

vc vai precisar


var LJSONObject : TJSONObject;
    j:Integer;
    jSubPar: TJSONPair;
   vRegistro:String;
begin
   try

      LJSONObject := TJsonObject.Create;
      LJSONObject := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(vRegistro), 0) as TJSONObject;

      for j := 0 to LJSONObject.Size - 1 do
      begin
         jSubPar := LJSONObject.Get(j);
         FLstCampos.Append;
         FLstCampos.FieldValues['checado']:=False;
         FLstCampos.FieldValues['nome']:=jSubPar.JsonString.Value;
         FLstCampos.Post;
      end;
   finally
      FreeAndNil(LJSONObject);
   end;
end;

usei meu DataSet com F na frente porque fiz esse tratamento dentro da classe, ou seja, no Set da proprierade, mais nada impede de vc usar aonde vc quiser somente chamando o seu DataSet.


ai na sua tela vc vai ter uma dbGrid e 1 DataSource, ligue sua dbGrid no DataSource e no OnShow do Form vc liga o DataSource no DataSet assim

DataSource.DataSet:=seu DataSet

e tudo o que vc fizer no seu DataSet pelo sistema vai aparecer na sua dbGrid.

Nenhum comentário: