Delphi - duda onChange combo dbgrid

 
Vista:

duda onChange combo dbgrid

Publicado por Pablo (5 intervenciones) el 28/12/2005 19:59:38
Tengo un DBGrid que entre sus campos contiene uno (lookup) con la propiedad ButtonStyle=cbsAuto, para que despliegue un combo y poder elegir un elemento. Resulta que tengo que cubrir el procedimiento OnChange para algunos de los otros campos restantes del DBGrid, y resulta que cuando relleno uno de ellos, al salir, en lugar de llamar al metodo OnChange que le corresponde, llama al OnChange de la columna que tiene el "combo" desplegable; no se si me explico.He comprobado el codigo y todo parece correcto. Si me pudierais dar alguna indicación......
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:duda onChange combo dbgrid

Publicado por Delfino (1216 intervenciones) el 29/12/2005 09:02:30
No puede ser, seguro tienes algun error tuyo, el evento onchange del field se dispara cuando sales del campo con un tab, (o al post), pon el codigo como lo haces..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:duda onChange combo dbgrid

Publicado por Pablo (5 intervenciones) el 29/12/2005 09:08:55
el codigo es el siguiente (no incluyo las propiedades del dbgrid ni la tabla, pq creo que está correcto,no se):

//EL CAMPO QUE DESPLIEGA EL COMBO EN EL DBGRID

procedure Tdm_db.TDesgloseTrabcategoriaChange(Sender: TField);
var
cadSQL:String;
begin
if form1.DBGrid1.Columns.
if salarioCalculado then
begin
salarioCalculado:=false;
form1.ComboCOD_CATE.ItemIndex:=form1.CCATEGORIA1.Items.IndexOf(dm_db.TDesgloseTrab.fieldbyname('categoria').value);

//Aprovechamos el Q_CargarCombo para cargar el IMP_COSTESAL
form1.Q_CargarCombo.close;
form1.Q_CargarCombo.SQL.clear;

cadSQL:='SELECT c.imp_costesal, c.imp_seg_soc, c.imp_tot from spf_costessala c, municipi m WHERE'
+ ' C.ANNO_CONVENI=' + form1.ANNO_PFOEA.text
+ ' AND C.COD_CATE=' + form1.ComboCOD_CATE.text
+ ' AND C.DC_DT= M.TURNO_CONT'
+ ' AND M.COD_MUNI=' + form1.COD_MUNI.text;

form1.Q_CargarCombo.SQL.Add(CadSQL);
form1.Q_CargarCombo.Open;
form1.Q_CargarCombo.First;
if not form1.Q_CargarCombo.EOF then
begin
dm_db.TDesgloseTrab.fieldbyname('IMP_COSTESAL').value:=form1.Q_CargarCombo.FieldByName('IMP_COSTESAL').AsString;
dm_db.TDesgloseTrab.fieldbyname('IMP_SEG_SOC').value:=form1.Q_CargarCombo.FieldByName('IMP_SEG_SOC').AsString;
dm_db.TDesgloseTrab.fieldbyname('IMP_TOT').value:=form1.Q_CargarCombo.FieldByName('IMP_TOT').AsString;
if dm_db.TDesgloseTrab.fieldbyname('DURACION').value>0 then
begin
dm_db.TDesgloseTrab.fieldbyname('COSTE_TOT').value:=dm_db.TDesgloseTrab.fieldbyname('IMP_TOT').value * dm_db.TDesgloseTrab.fieldbyname('DURACION').value;
end;

end
else
begin
Showmessage('No existe importe salarial asociado.');
dm_db.TDesgloseTrab.fieldbyname('IMP_COSTESAL').value:='0';
dm_db.TDesgloseTrab.fieldbyname('IMP_SEG_SOC').value:='0';
dm_db.TDesgloseTrab.fieldbyname('IMP_TOT').value:='0';
//METER AQUI CÓDIGO DE CANCELAR EL PROCESO GLOBAL (SERÁ PARECIDO AL BOTON CANCELAR).
end;
end;
salarioCalculado:=false;
end;

//UNO DE LOS CAMPOS

procedure Tdm_db.TDesgloseTrabN_TRABAJChange(Sender: TField);
begin
if (dm_db.TDesgloseTrab.fieldbyname('N_TRABAJ').value=0) OR (dm_db.TDesgloseTrab.fieldbyname('N_TRABAJ').asstring='') then
begin
form1.ComboCOD_CATE.ItemIndex:=2;
TDesgloseTrab.fieldbyname('categoria').value:=form1.CCATEGORIA1.Items.IndexOf('2');
end;
end;

Gracias de nuevo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:duda onChange combo dbgrid

Publicado por Pablo (5 intervenciones) el 29/12/2005 09:23:13
Lo que realmente me extraña es que no llame primero a su propio procedimiento onChange, ya que llama directamente al onChange del campo desplegable.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:duda onChange combo dbgrid

Publicado por Pablo (5 intervenciones) el 29/12/2005 11:45:23
acabo de observar que cada vez que se accede al dbgrid, llama al metodo onchange del campo desplegable.....¿por qué ocurre?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar