Ver Mensaje Individual
  #8  
Antiguo 21-02-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

No pude compilar y/o ejecutar tu código por que me faltan componentes, pero cuando usas la propiedad vectorial FieldValues en el evento OnCellClick deberías revisar que el valor del campo actual no sea nulo:
Código PHP:

void __fastcall TForm2
::DBGrid1CellClickTColumn *Column )
{
  
TDBGrid  *GR static_cast<TDBGrid*>( DBGrid1 );
  
TDataSet *DS static_cast<TDataSet*> ( DBGrid1->DataSource->DataSet );

  
EditNombre->Text VarToStrDef(DS->FieldValues["Name"], "");  // <-
  
EditPrecio->Text VarToStrDef(DS->FieldValues["Area"], "0"); // <-  

  
if ( EditUnidades->Text != "" && EditPrecio->Text != "" )
    
EditTotal->Text EditUnidades->Text.ToDouble() *
                      
EditPrecio->Text.ToDouble();

Por mi parte prefiero no usar la propiedad FieldValues ya que, debido a que usa Variants, es la opción mas lenta.

Mas rápido es:
Código PHP:
...
void __fastcall TForm2::DBGrid1CellClickTColumn *Column )
{
  
TDBGrid  *GR static_cast<TDBGrid*>( DBGrid1 );
  
TDataSet *DS static_cast<TDataSet*>( DBGrid1->DataSource->DataSet );

  
EditNombre->Text DS->FieldByName("Nombre")->AsString;
  
EditPrecio->Text DS->FieldByName("Precio")->AsString;

  if ( 
EditUnidades->Text != "" && EditPrecio->Text != "" )
    
EditTotal->Text EditUnidades->Text.ToDouble() *
                      
EditPrecio->Text.ToDouble();
}
... 
Por último la opción mas eficiente es crear los campos persistentes del TDatSet y citarlos por su nombre.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita