Ir al contenido


Foto

Relación Padre e Hijo en un ListBox desde un mismo Dataset


  • Por favor identifícate para responder
3 respuestas en este tema

#1 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 13 febrero 2016 - 01:45

Cabe aclarar que al pasar mucho tiempo programando PHP he perdido el hilo en Object Pascal :p, este es el asunto, estoy haciendo pruebas con una aplicación REST, el caso es que recibo todos los datos tanto Padre como hijo en un FDMemTable, todo bien, mi problema es al llenar esos datos con su relación Padre/Hijo (Un Padre un TListBoxGroupHeader y sus hijos un TListBoxItem), ya que esos datos no viene ordenados de tal forma, tengo los siguientes códigos para tratar de ordenar esa relación en el ListBox:
 


delphi
  1. procedure GetProducts(DataSet: TDataSource; List: TListBox);
  2. begin
  3. DataSet.DataSet.First;
  4. while not Dataset.DataSet.eof do
  5. begin
  6. if Dataset.DataSet.FieldByName('parent').Value = 'root' then
  7. begin
  8. ItemEncabezado := TListBoxGroupHeader.Create(List);
  9. ItemEncabezado.Text := Dataset.DataSet.FieldByName('name').Value;
  10. List.AddObject(ItemEncabezado);
  11. GetChildrens(Dataset,List,Dataset.DataSet.FieldByName('id').AsString);
  12. end;
  13. Dataset.DataSet.Next;
  14. end;
  15. end;
  16.  
  17. procedure GetChildrens(DatasetParent: TDataSource; List: TListbox; ID: string);
  18. begin
  19. DatasetParent.DataSet.First;
  20. while not DatasetParent.DataSet.eof do
  21. begin
  22. if DatasetParent.DataSet.FieldByName('id').Value = ID then
  23. begin
  24. ItemNormal := TListBoxItem.Create(List);
  25. ItemNormal.Text := DatasetParent.DataSet.FieldByName('name').Value;
  26. ItemNormal.ItemData.Accessory := TListBoxItemData.TAccessory(1);
  27. List.AddObject(ItemNormal);
  28. end;
  29. DatasetParent.DataSet.Next;
  30. end;
  31. end;
  32.  

y el resultado no es el esperado, porque sólo me muestra un sólo TListBoxGroupHeader con el Texto "MANZANA" y un sólo TListBoxItem con el Texto del mismo nombre, en el Dataset hay tres Campos, id, Parent y Name, los dos primeros está la relación, se supone que debería hacer recursividad pero la verdad es que llevo dias en esto :(.
 
A ver si me hechan un mano, Saludos.


  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 15 febrero 2016 - 02:33

Retomando el Tema, he hecho un cambio desde el servidor REST, he hecho que me devuelva la jerarquía ya preparada, el resultado es algo así:
 

{
  "results": [
    {
      "id": "7",
      "parent": "root",
      "name": "ZAPATOS",
      "position": "1",
      "children": [
        {
          "id": "32",
          "parent": "7",
          "name": "Houdini'Pro",
          "position": "1"
        },
        {
          "id": "26",
          "parent": "7",
          "name": "Hush Puppies",
          "position": "2"
        }
      ]
    }
  ]
}


Todo bien con el debugger, sólo tengo el detalle que el campo children (hijos) me sigue saliendo en formato JSON, ¿cómo podría pasarlo a estilo Dataset?.

¿Alguna idea?.

Saludos.
  • 0

#3 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 15 febrero 2016 - 05:52

Que tal usando las clases de la unidad REST.Respone.Adapter?

 

 

TRESTResponseDataSetAdapter

 

TRESTResponseJSON


  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 15 febrero 2016 - 06:42

Pues es lo que estoy utilizando, el problema en sí son los sub-arrays (un Array dentro de otro Array), todos los datos del array padre lo puedo manejar sin problema, los sub-arrays se muestran en texto aún en formato JSON y no como Campos del Dataset y es ahí el problema, estoy viendo a ver si manejo los datos con XSuperObject.

Saludos.
  • 0




IP.Board spam blocked by CleanTalk.