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?