Ver Mensaje Individual
  #1  
Antiguo 26-08-2020
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Ubicación: Toledo - España
Posts: 1.418
Reputación: 21
Angel.Matilla Va por buen camino
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?

Última edición por Angel.Matilla fecha: 26-08-2020 a las 10:49:55.
Responder Con Cita