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: 38
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
::DBGrid1CellClick( TColumn *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::DBGrid1CellClick( TColumn *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