PDA

Ver la Versión Completa : valores por defaul en CxGrid ....


CHECHE81
24-09-2010, 19:27:34
Saludos camaradas, con la novedad que ando manejando el bondadoso y famoso cxgrid junto con un cxnavigator asociado claro con su clientdataset y datasource, el detalle que al agregar un registro nuevo quiero ponerle un valor que ya tengo guardado en una variable o en algún campo de otra tabla y lo intento en 2 eventos:

Primero:
pprocedure TfmEstadoCuenta.cxNavigator1ButtonsButtonClick(Sender: TObject;
AButtonIndex: Integer; var ADone: Boolean);
begin
if AButtonIndex = NBDI_INSERT then
begin
cxGridDBTableView2.ViewData.Records[0].Values[4] := edimportecita.Text;
cxGridDBTableView2IMPORTE.Caption := edimportecita.Text;
cxGridDBTableView2IMPORTE.EditValue := edimportecita.Text;
cxGridDBTableView2IMPORTE.DataBinding.Field.Value := cdcg.FieldValues['importecitas'];
cdsc.FieldValues['importe'] := cdcg.FieldValues['importecitas'];
end;
end;

Segundo
procedure TfmEstadoCuenta.cdSCBeforeInsert(DataSet: TDataSet);
begin
if (cdsc.State = dsinsert) then
begin
cdsc.FieldValues['importe'] := cdcg.FieldValues['importecitas'];
cxGridDBTableView2IMPORTE.DataBinding.Field.Value := cdcg.FieldValues['importecitas'];
cdsc.FieldValues['fecha'] := date;
cxGridDBTableView2FECHA.DataBinding.ValueType := datetostr(date);
cxGridDBTableView2IMPORTE.Caption := edimportecita.Text;
cxGridDBTableView2.ViewData.Records[0].Values[2]:= edimportecita.Text;
end;
end;


de cada forma pero ninguna me ha dado resultado, ya busque algúnos ejemplos y con ellos hice lo anterior pero no le he dado al clavo les agradeceria cualquier ayuda, gracias por su tiempo.:D

AzidRain
24-09-2010, 22:06:13
No has probado con el soporte de DevExpress? Mándales tu código y te ponen la respuesta directamente, es lo bueno de esos componentes. Por otro lado el enfoque está incorrecto, el grid únicamente muestra los datos lo que quieres hacer es modificar los datos por lo que tienes que ir a la tabla o query que alimenta el grid y ahí hacer el cambio

Al González
24-09-2010, 22:07:03
¿Qué pasó Cheché?

Llevas poco más de un año que no trabajas conmigo y ya se te olvida lo básico. :p :o

Cuando quieras asignar valor predeterminado a un campo de un nuevo registro, puedes usar tanto el evento OnNewRecord como el evento AfterInsert.

Recuerda que a nivel de los conjuntos de datos AfterInsert no significa “después de agregar el registro”, sino “después de preparar un nuevo registro para ser capturado”, por tanto es un momento adecuado para complementar esa “preparación” asignándole valores “default”.

En cambio el evento BeforeInsert ocurre antes de dicha preparación, es decir, antes de que el buffer en blanco para un nuevo registro esté listo y activo. Lo que hagas en BeforeInsert afectará al registro que esté activo al momento de iniciar la ejecución del Insert / Append, no al nuevo registro que estos métodos agregan para su captura.

Un abrazo.

Al González. :)

CHECHE81
24-09-2010, 23:35:32
Gracias por sus repuestas :), AzidRain efectivamente estaba mal el evento utilizado, que tal Al :D, si ya probé y ya me muestra los datos con el evento AfterInsert:
procedure TfmEstadoCuenta.cdSCAfterInsert(DataSet: TDataSet);
begin
cdsc.FieldValues['importe'] := edimportecita.Text;
cdsc.FieldValues['fecha'] := date;
end;Si, la verdad se me paso ese dato de la preparación del nuevo registro desde el clientdataset, porlo que estaba mal enfocado por el lado del cxgrid o el cxnavigator, gracias por recordarmelo, jejej:o te debo unas chelas bien elodias jojojo:cool: