Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Problemas al cargar un VirtualStringTree (https://www.clubdelphi.com/foros/showthread.php?t=94851)

Angel.Matilla 26-08-2020 10:38:06

Problemas al cargar un VirtualStringTree
 
Buenas. A ver si alguien me puede dar una explicación. Tengo este query:
Código SQL [-]
SELECT Fecha, Tipo, Importe FROM Cajas WHERE EXTRACT(MONTH FROM Fecha) = :Mes 
   AND EXTRACT(YEAR FROM Fecha) = :Anyo ORDER BY Fecha DESC, Tipo
se ejecuta contra un base de datos FB. El resultado (parte) es este:

y para cargar un VST uso este código:
Código:

PTreeDatos Datos;
PVirtualNode Nodo1, Nodo2;
TDateTime dFecha = (int)EncodeDate(1899, 12, 30);

Diarios->NodeDataSize = sizeof(TTreeDatos);
Diarios->BeginUpdate();
Diarios->Clear();
for (; !Query->Eof; Query->Next())
{
    if (Query->FieldByName("Fecha")->AsDateTime != dFecha)
    {
          Nodo1          = Diarios->AddChild(NULL);
          Datos          = (PTreeDatos)Diarios->GetNodeData(Nodo1);
          Datos->Concepto = Query->FieldByName("Fecha")->AsDateTime.FormatString("dd/mm/yyyy");
          dFecha = Query->FieldByName("Fecha")->AsDateTime;
    }

    Nodo2          = Diarios->AddChild(Nodo1);
    Datos          = (PTreeDatos)Diarios->GetNodeData(Nodo2);
    Datos->Concepto = Query->FieldByName("Tipo")->AsString;
    Datos->Importe  = Query->FieldByName("Importe")->AsFloat;
    Datos->Fecha    = Query->FieldByName("Fecha")->AsDateTime;
}
Diarios->EndUpdate();

y la estructura que se carga es esta:
Código:

typedef struct tagTTreeDatos
{
    WideString Concepto;
    double Importe;
    TDateTime Fecha;
}TTreeDatos, *PTreeDatos;

y relleno el VST con esto:
Código:

void __fastcall TfDatos::DiariosGetText(TBaseVirtualTree *Sender,
      PVirtualNode Node, TColumnIndex Column, TVSTTextType TextType,
      WideString &CellText)
{
    switch (Column)
    {
          case 0:
              CellText = ((PTreeDatos)Sender->GetNodeData(Node))->Concepto;
              break;
          case 1:
              CellText = ((PTreeDatos)Sender->GetNodeData(Node))->Importe > 0 ? (WideString)FormatFloat("##,##0.00 €", ((PTreeDatos)Sender->GetNodeData(Node))->Importe) : (WideString)"";
              break;
    }
}
//---------------------------------------------------------------------------

Con todo este código lo que me está saliendo es esto:

y, evidentemente, no es lo que quiero. ¿Qué estoy haciendo mal?

Angel.Matilla 26-08-2020 12:21:00

Bueno. Después de muchas pruebas sencillamente he borrado el elemento, lo he vuelto a poner y ahora funciona bien.

Casimiro Noteví 26-08-2020 12:51:36

^\||/^\||/^\||/


La franja horaria es GMT +2. Ahora son las 18:05:57.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi